import AjaxFilter from '~/droplab/plugins/ajax_filter'; import AjaxCache from '~/lib/utils/ajax_cache'; describe('AjaxFilter', () => { let dummyConfig; const dummyData = 'dummy data'; let dummyList; beforeEach(() => { dummyConfig = { endpoint: 'dummy endpoint', searchKey: 'dummy search key', }; dummyList = { data: [], list: document.createElement('div'), }; AjaxFilter.hook = { config: { AjaxFilter: dummyConfig, }, list: dummyList, }; }); describe('trigger', () => { let ajaxSpy; beforeEach(() => { jest.spyOn(AjaxCache, 'retrieve').mockImplementation((url) => ajaxSpy(url)); jest.spyOn(AjaxFilter, '_loadData').mockImplementation(() => {}); dummyConfig.onLoadingFinished = jest.fn(); const dynamicList = document.createElement('div'); dynamicList.dataset.dynamic = true; dummyList.list.appendChild(dynamicList); }); it('calls onLoadingFinished after loading data', (done) => { ajaxSpy = (url) => { expect(url).toBe('dummy endpoint?dummy search key='); return Promise.resolve(dummyData); }; AjaxFilter.trigger() .then(() => { expect(dummyConfig.onLoadingFinished.mock.calls.length).toBe(1); }) .then(done) .catch(done.fail); }); it('does not call onLoadingFinished if Ajax call fails', (done) => { const dummyError = new Error('My dummy is sick! :-('); ajaxSpy = (url) => { expect(url).toBe('dummy endpoint?dummy search key='); return Promise.reject(dummyError); }; AjaxFilter.trigger() .then(done.fail) .catch((error) => { expect(error).toBe(dummyError); expect(dummyConfig.onLoadingFinished.mock.calls.length).toBe(0); }) .then(done) .catch(done.fail); }); }); });