mirror of
https://github.com/shlinkio/shlink-web-client.git
synced 2024-12-23 17:40:23 +03:00
Added tests for new visits settings
This commit is contained in:
parent
fee62484b5
commit
426d000a59
2 changed files with 92 additions and 0 deletions
66
test/settings/Visits.test.tsx
Normal file
66
test/settings/Visits.test.tsx
Normal file
|
@ -0,0 +1,66 @@
|
||||||
|
import { shallow, ShallowWrapper } from 'enzyme';
|
||||||
|
import { Mock } from 'ts-mockery';
|
||||||
|
import { Settings } from '../../src/settings/reducers/settings';
|
||||||
|
import { Visits } from '../../src/settings/Visits';
|
||||||
|
import { SimpleCard } from '../../src/utils/SimpleCard';
|
||||||
|
import { DateIntervalSelector } from '../../src/utils/dates/DateIntervalSelector';
|
||||||
|
|
||||||
|
describe('<Visits />', () => {
|
||||||
|
let wrapper: ShallowWrapper;
|
||||||
|
const setVisitsSettings = jest.fn();
|
||||||
|
const createWrapper = (settings: Partial<Settings> = {}) => {
|
||||||
|
wrapper = shallow(<Visits settings={Mock.of<Settings>(settings)} setVisitsSettings={setVisitsSettings} />);
|
||||||
|
|
||||||
|
return wrapper;
|
||||||
|
};
|
||||||
|
|
||||||
|
afterEach(jest.clearAllMocks);
|
||||||
|
afterEach(() => wrapper?.unmount());
|
||||||
|
|
||||||
|
it('renders expected components', () => {
|
||||||
|
const wrapper = createWrapper();
|
||||||
|
|
||||||
|
expect(wrapper.find(SimpleCard).prop('title')).toEqual('Visits');
|
||||||
|
expect(wrapper.find('label').prop('children')).toEqual('Default interval to load on visits sections:');
|
||||||
|
expect(wrapper.find(DateIntervalSelector)).toHaveLength(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
[ Mock.all<Settings>(), 'last30Days' ],
|
||||||
|
[ Mock.of<Settings>({ visits: {} }), 'last30Days' ],
|
||||||
|
[
|
||||||
|
Mock.of<Settings>({
|
||||||
|
visits: {
|
||||||
|
defaultInterval: 'last7Days',
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
'last7Days',
|
||||||
|
],
|
||||||
|
[
|
||||||
|
Mock.of<Settings>({
|
||||||
|
visits: {
|
||||||
|
defaultInterval: 'today',
|
||||||
|
},
|
||||||
|
}),
|
||||||
|
'today',
|
||||||
|
],
|
||||||
|
])('sets expected interval as active', (settings, expectedInterval) => {
|
||||||
|
const wrapper = createWrapper(settings);
|
||||||
|
|
||||||
|
expect(wrapper.find(DateIntervalSelector).prop('active')).toEqual(expectedInterval);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('invokes setVisitsSettings when interval changes', () => {
|
||||||
|
const wrapper = createWrapper();
|
||||||
|
const selector = wrapper.find(DateIntervalSelector);
|
||||||
|
|
||||||
|
selector.simulate('change', 'last7Days');
|
||||||
|
selector.simulate('change', 'last180days');
|
||||||
|
selector.simulate('change', 'yesterday');
|
||||||
|
|
||||||
|
expect(setVisitsSettings).toHaveBeenCalledTimes(3);
|
||||||
|
expect(setVisitsSettings).toHaveBeenNthCalledWith(1, { defaultInterval: 'last7Days' });
|
||||||
|
expect(setVisitsSettings).toHaveBeenNthCalledWith(2, { defaultInterval: 'last180days' });
|
||||||
|
expect(setVisitsSettings).toHaveBeenNthCalledWith(3, { defaultInterval: 'yesterday' });
|
||||||
|
});
|
||||||
|
});
|
26
test/utils/dates/DateIntervalSelector.test.tsx
Normal file
26
test/utils/dates/DateIntervalSelector.test.tsx
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
import { shallow, ShallowWrapper } from 'enzyme';
|
||||||
|
import { DateInterval, rangeOrIntervalToString } from '../../../src/utils/dates/types';
|
||||||
|
import { DateIntervalSelector } from '../../../src/utils/dates/DateIntervalSelector';
|
||||||
|
import { DateIntervalDropdownItems } from '../../../src/utils/dates/DateIntervalDropdownItems';
|
||||||
|
import { DropdownBtn } from '../../../src/utils/DropdownBtn';
|
||||||
|
|
||||||
|
describe('<DateIntervalSelector />', () => {
|
||||||
|
let wrapper: ShallowWrapper;
|
||||||
|
const activeInterval: DateInterval = 'last7Days';
|
||||||
|
const onChange = jest.fn();
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
wrapper = shallow(<DateIntervalSelector active={activeInterval} onChange={onChange} />);
|
||||||
|
});
|
||||||
|
afterEach(() => wrapper?.unmount());
|
||||||
|
|
||||||
|
test('props are passed down to nested DateIntervalDropdownItems', () => {
|
||||||
|
const items = wrapper.find(DateIntervalDropdownItems);
|
||||||
|
const dropdown = wrapper.find(DropdownBtn);
|
||||||
|
|
||||||
|
expect(dropdown.prop('text')).toEqual(rangeOrIntervalToString(activeInterval));
|
||||||
|
expect(items).toHaveLength(1);
|
||||||
|
expect(items.prop('onChange')).toEqual(onChange);
|
||||||
|
expect(items.prop('active')).toEqual(activeInterval);
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in a new issue