From 8618519b6be99083cf006fdce41802207c812f1a Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sat, 23 Oct 2021 10:55:52 +0200 Subject: [PATCH] Created ManageServersRowDropdown test --- .eslintrc | 3 +- test/common/AppUpdateBanner.test.tsx | 2 +- .../helpers/EditDomainRedirectsModal.test.tsx | 2 +- .../servers/ManageServersRowDropdown.test.tsx | 84 +++++++++++++++++++ test/settings/Settings.test.tsx | 2 +- test/short-urls/ShortUrlsList.test.tsx | 2 +- test/tags/TagsCards.test.tsx | 2 +- test/tags/TagsTableRow.test.tsx | 4 +- 8 files changed, 93 insertions(+), 8 deletions(-) create mode 100644 test/servers/ManageServersRowDropdown.test.tsx diff --git a/.eslintrc b/.eslintrc index 78ada1c2..48aab946 100644 --- a/.eslintrc +++ b/.eslintrc @@ -16,6 +16,7 @@ }, "ignorePatterns": ["src/service*.ts"], "rules": { - "complexity": "off" + "complexity": "off", + "@typescript-eslint/no-unnecessary-type-assertion": "off" } } diff --git a/test/common/AppUpdateBanner.test.tsx b/test/common/AppUpdateBanner.test.tsx index b03458b8..6231e8e4 100644 --- a/test/common/AppUpdateBanner.test.tsx +++ b/test/common/AppUpdateBanner.test.tsx @@ -24,7 +24,7 @@ describe('', () => { }); it('invokes toggle when alert is toggled', () => { - (wrapper.prop('toggle') as Function)(); // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion + (wrapper.prop('toggle') as Function)(); expect(toggle).toHaveBeenCalled(); }); diff --git a/test/domains/helpers/EditDomainRedirectsModal.test.tsx b/test/domains/helpers/EditDomainRedirectsModal.test.tsx index 2293a807..067f5f3b 100644 --- a/test/domains/helpers/EditDomainRedirectsModal.test.tsx +++ b/test/domains/helpers/EditDomainRedirectsModal.test.tsx @@ -42,7 +42,7 @@ describe('', () => { it('has different handlers to toggle the modal', () => { expect(toggle).not.toHaveBeenCalled(); - (wrapper.prop('toggle') as Function)(); // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion + (wrapper.prop('toggle') as Function)(); (wrapper.find(ModalHeader).prop('toggle') as Function)(); wrapper.find(Button).first().simulate('click'); diff --git a/test/servers/ManageServersRowDropdown.test.tsx b/test/servers/ManageServersRowDropdown.test.tsx new file mode 100644 index 00000000..e8dd609a --- /dev/null +++ b/test/servers/ManageServersRowDropdown.test.tsx @@ -0,0 +1,84 @@ +import { shallow, ShallowWrapper } from 'enzyme'; +import { Mock } from 'ts-mockery'; +import { DropdownItem } from 'reactstrap'; +import { ServerWithId } from '../../src/servers/data'; +import { ManageServersRowDropdown as createManageServersRowDropdown } from '../../src/servers/ManageServersRowDropdown'; + +describe('', () => { + const DeleteServerModal = () => null; + const ManageServersRowDropdown = createManageServersRowDropdown(DeleteServerModal); + const setAutoConnect = jest.fn(); + let wrapper: ShallowWrapper; + const createWrapper = (autoConnect = false) => { + const server = Mock.of({ id: 'abc123', autoConnect }); + + wrapper = shallow(); + + return wrapper; + }; + + afterEach(jest.clearAllMocks); + + it('renders expected amount of dropdown items', () => { + const wrapper = createWrapper(); + const items = wrapper.find(DropdownItem); + + expect(items).toHaveLength(5); + expect(items.find('[divider]')).toHaveLength(1); + expect(items.at(0).prop('to')).toEqual('/server/abc123'); + expect(items.at(1).prop('to')).toEqual('/server/abc123/edit'); + }); + + it('allows toggling auto-connect', () => { + const wrapper = createWrapper(); + + expect(setAutoConnect).not.toHaveBeenCalled(); + wrapper.find(DropdownItem).at(2).simulate('click'); + expect(setAutoConnect).toHaveBeenCalledWith(expect.objectContaining({ id: 'abc123' }), true); + }); + + it('renders a modal', () => { + const wrapper = createWrapper(); + const modal = wrapper.find(DeleteServerModal); + + expect(modal).toHaveLength(1); + expect(modal.prop('redirectHome')).toEqual(false); + expect(modal.prop('server')).toEqual(expect.objectContaining({ id: 'abc123' })); + expect(modal.prop('isOpen')).toEqual(false); + }); + + it('allows toggling the modal', () => { + const wrapper = createWrapper(); + const modalToggle = wrapper.find(DropdownItem).last(); + + expect(wrapper.find(DeleteServerModal).prop('isOpen')).toEqual(false); + + modalToggle.simulate('click'); + expect(wrapper.find(DeleteServerModal).prop('isOpen')).toEqual(true); + + (wrapper.find(DeleteServerModal).prop('toggle') as Function)(); + expect(wrapper.find(DeleteServerModal).prop('isOpen')).toEqual(false); + }); + + it('can be toggled', () => { + const wrapper = createWrapper(); + + expect(wrapper.prop('isOpen')).toEqual(false); + + (wrapper.prop('toggle') as Function)(); + expect(wrapper.prop('isOpen')).toEqual(true); + + (wrapper.prop('toggle') as Function)(); + expect(wrapper.prop('isOpen')).toEqual(false); + }); + + it.each([ + [ true, 'Do not auto-connect' ], + [ false, 'Auto-connect' ], + ])('shows different auto-connect toggle text depending on current server status', (autoConnect, expectedText) => { + const wrapper = createWrapper(autoConnect); + const item = wrapper.find(DropdownItem).at(2); + + expect(item.html()).toContain(expectedText); + }); +}); diff --git a/test/settings/Settings.test.tsx b/test/settings/Settings.test.tsx index cd718662..1f34137d 100644 --- a/test/settings/Settings.test.tsx +++ b/test/settings/Settings.test.tsx @@ -13,6 +13,6 @@ describe('', () => { expect(layout).toHaveLength(1); expect(sections).toHaveLength(1); - expect((sections.prop('items') as any[]).flat()).toHaveLength(4); // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion + expect((sections.prop('items') as any[]).flat()).toHaveLength(4); }); }); diff --git a/test/short-urls/ShortUrlsList.test.tsx b/test/short-urls/ShortUrlsList.test.tsx index cc0406ce..f7286649 100644 --- a/test/short-urls/ShortUrlsList.test.tsx +++ b/test/short-urls/ShortUrlsList.test.tsx @@ -77,7 +77,7 @@ describe('', () => { it('invokes order icon rendering', () => { const renderIcon = (field: OrderableFields) => - (wrapper.find(ShortUrlsTable).prop('renderOrderIcon') as (field: OrderableFields) => ReactElement | null)(field); // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion + (wrapper.find(ShortUrlsTable).prop('renderOrderIcon') as (field: OrderableFields) => ReactElement | null)(field); expect(renderIcon('visits')).toEqual(null); diff --git a/test/tags/TagsCards.test.tsx b/test/tags/TagsCards.test.tsx index 0ef3fed9..8b5d8db3 100644 --- a/test/tags/TagsCards.test.tsx +++ b/test/tags/TagsCards.test.tsx @@ -31,7 +31,7 @@ describe('', () => { const card = () => wrapper.find(TagCard).at(5); expect(card().prop('displayed')).toEqual(false); - (card().prop('toggle') as Function)(); // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion + (card().prop('toggle') as Function)(); expect(card().prop('displayed')).toEqual(true); }); }); diff --git a/test/tags/TagsTableRow.test.tsx b/test/tags/TagsTableRow.test.tsx index b5ae6a2d..9787fbf9 100644 --- a/test/tags/TagsTableRow.test.tsx +++ b/test/tags/TagsTableRow.test.tsx @@ -68,11 +68,11 @@ describe('', () => { const wrapper = createWrapper(); expect(wrapper.find(EditTagModal).prop('isOpen')).toEqual(false); - (wrapper.find(EditTagModal).prop('toggle') as Function)(); // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion + (wrapper.find(EditTagModal).prop('toggle') as Function)(); expect(wrapper.find(EditTagModal).prop('isOpen')).toEqual(true); expect(wrapper.find(DeleteTagConfirmModal).prop('isOpen')).toEqual(false); - (wrapper.find(DeleteTagConfirmModal).prop('toggle') as Function)(); // eslint-disable-line @typescript-eslint/no-unnecessary-type-assertion + (wrapper.find(DeleteTagConfirmModal).prop('toggle') as Function)(); expect(wrapper.find(DeleteTagConfirmModal).prop('isOpen')).toEqual(true); }); });