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);
});
});