import { ImporterStatus } from '~/importer_status'; import axios from '~/lib/utils/axios_utils'; import MockAdapter from 'axios-mock-adapter'; describe('Importer Status', () => { let instance; let mock; beforeEach(() => { mock = new MockAdapter(axios); }); afterEach(() => { mock.restore(); }); describe('addToImport', () => { const importUrl = '/import_url'; beforeEach(() => { setFixtures(` `); spyOn(ImporterStatus.prototype, 'initStatusPage').and.callFake(() => {}); spyOn(ImporterStatus.prototype, 'setAutoUpdate').and.callFake(() => {}); instance = new ImporterStatus({ jobsUrl: '', importUrl, }); }); it('sets table row to active after post request', (done) => { mock.onPost(importUrl).reply(200, { id: 1, full_path: '/full_path', }); instance.addToImport({ currentTarget: document.querySelector('.js-add-to-import'), }) .then(() => { expect(document.querySelector('tr').classList.contains('table-active')).toEqual(true); done(); }) .catch(done.fail); }); it('shows error message after failed POST request', (done) => { appendSetFixtures('
'); mock.onPost(importUrl).reply(422, { errors: 'You forgot your lunch', }); instance.addToImport({ currentTarget: document.querySelector('.js-add-to-import'), }) .then(() => { const flashMessage = document.querySelector('.flash-text'); expect(flashMessage.textContent.trim()).toEqual('An error occurred while importing project: You forgot your lunch'); done(); }) .catch(done.fail); }); }); describe('autoUpdate', () => { const jobsUrl = '/jobs_url'; beforeEach(() => { const div = document.createElement('div'); div.innerHTML = `
`; document.body.appendChild(div); spyOn(ImporterStatus.prototype, 'initStatusPage').and.callFake(() => {}); spyOn(ImporterStatus.prototype, 'setAutoUpdate').and.callFake(() => {}); instance = new ImporterStatus({ jobsUrl, }); }); function setupMock(importStatus) { mock.onGet(jobsUrl).reply(200, [{ id: 1, import_status: importStatus, }]); } function expectJobStatus(done, status) { instance.autoUpdate() .then(() => { expect(document.querySelector('#project_1').innerText.trim()).toEqual(status); done(); }) .catch(done.fail); } it('sets the job status to done', (done) => { setupMock('finished'); expectJobStatus(done, 'Done'); }); it('sets the job status to scheduled', (done) => { setupMock('scheduled'); expectJobStatus(done, 'Scheduled'); }); it('sets the job status to started', (done) => { setupMock('started'); expectJobStatus(done, 'Started'); }); it('sets the job status to custom status', (done) => { setupMock('custom status'); expectJobStatus(done, 'custom status'); }); }); });