import { shallow, ShallowWrapper } from 'enzyme'; import { Mock } from 'ts-mockery'; import { History } from 'history'; import createServerConstruct from '../../src/servers/CreateServer'; import { ServerForm } from '../../src/servers/helpers/ServerForm'; import { ServerWithId } from '../../src/servers/data'; import { DuplicatedServerModal } from '../../src/servers/helpers/DuplicatedServerModal'; describe('', () => { let wrapper: ShallowWrapper; const ImportServersBtn = () => null; const createServerMock = jest.fn(); const push = jest.fn(); const goBack = jest.fn(); const historyMock = Mock.of({ push, goBack }); const servers = { foo: Mock.all() }; const createWrapper = (serversImported = false, importFailed = false) => { const useStateFlagTimeout = jest.fn() .mockReturnValueOnce([ serversImported, () => '' ]) .mockReturnValueOnce([ importFailed, () => '' ]) .mockReturnValue([]); const CreateServer = createServerConstruct(ImportServersBtn, useStateFlagTimeout); wrapper = shallow(); return wrapper; }; beforeEach(jest.clearAllMocks); afterEach(() => wrapper?.unmount()); it('renders components', () => { const wrapper = createWrapper(); expect(wrapper.find(ServerForm)).toHaveLength(1); expect(wrapper.find('ImportResult')).toHaveLength(0); }); it('shows success message when imported is true', () => { const wrapper = createWrapper(true); const result = wrapper.find('ImportResult'); expect(result).toHaveLength(1); expect(result.prop('type')).toEqual('success'); }); it('shows error message when import failed', () => { const wrapper = createWrapper(false, true); const result = wrapper.find('ImportResult'); expect(result).toHaveLength(1); expect(result.prop('type')).toEqual('error'); }); it('creates server data form is submitted', () => { const wrapper = createWrapper(); const form = wrapper.find(ServerForm); expect(wrapper.find(DuplicatedServerModal).prop('serverData')).not.toBeDefined(); form.simulate('submit', {}); expect(wrapper.find(DuplicatedServerModal).prop('serverData')).toEqual({}); }); it('saves server and redirects on modal save', () => { const wrapper = createWrapper(); wrapper.find(ServerForm).simulate('submit', {}); wrapper.find(DuplicatedServerModal).simulate('save'); expect(createServerMock).toHaveBeenCalledTimes(1); expect(push).toHaveBeenCalledTimes(1); }); it('goes back on modal discard', () => { const wrapper = createWrapper(); wrapper.find(DuplicatedServerModal).simulate('discard'); expect(goBack).toHaveBeenCalledTimes(1); }); });