import MockAdapter from 'axios-mock-adapter'; import { ImporterStatus } from '~/importer_status'; import axios from '~/lib/utils/axios_utils'; 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'); }); }); });