import { shallow, ShallowWrapper } from 'enzyme'; import { Mock } from 'ts-mockery'; import { DEFAULT_SHORT_URLS_ORDERING, Settings, ShortUrlsListSettings as ShortUrlsSettings, } from '../../src/settings/reducers/settings'; import { ShortUrlsListSettings } from '../../src/settings/ShortUrlsListSettings'; import { OrderingDropdown } from '../../src/utils/OrderingDropdown'; import { ShortUrlsOrder } from '../../src/short-urls/data'; describe('', () => { let wrapper: ShallowWrapper; const setSettings = jest.fn(); const createWrapper = (shortUrlsList?: ShortUrlsSettings) => { wrapper = shallow( ({ shortUrlsList })} setShortUrlsListSettings={setSettings} />, ); return wrapper; }; afterEach(() => wrapper?.unmount()); afterEach(jest.clearAllMocks); it.each([ [ undefined, DEFAULT_SHORT_URLS_ORDERING ], [{}, DEFAULT_SHORT_URLS_ORDERING ], [{ defaultOrdering: {} }, {}], [{ defaultOrdering: { field: 'longUrl', dir: 'DESC' } as ShortUrlsOrder }, { field: 'longUrl', dir: 'DESC' }], [{ defaultOrdering: { field: 'visits', dir: 'ASC' } as ShortUrlsOrder }, { field: 'visits', dir: 'ASC' }], ])('shows expected ordering', (shortUrlsList, expectedOrder) => { const wrapper = createWrapper(shortUrlsList); const dropdown = wrapper.find(OrderingDropdown); expect(dropdown.prop('order')).toEqual(expectedOrder); }); it.each([ [ undefined, undefined ], [ 'longUrl', 'ASC' ], [ 'visits', undefined ], [ 'title', 'DESC' ], ])('invokes setSettings when ordering changes', (field, dir) => { const wrapper = createWrapper(); const dropdown = wrapper.find(OrderingDropdown); expect(setSettings).not.toHaveBeenCalled(); dropdown.simulate('change', field, dir); expect(setSettings).toHaveBeenCalledWith({ defaultOrdering: { field, dir } }); }); });