From ead5f2033bb59a68f64207ca6ed6622d84e9143a Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Tue, 24 Aug 2021 19:53:28 +0200 Subject: [PATCH] Created DomainRow test --- test/domains/DomainRow.test.tsx | 57 ++++++++++++++++++++++++ test/servers/helpers/ServerForm.test.tsx | 3 +- test/utils/InfoTooltip.test.tsx | 2 +- 3 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 test/domains/DomainRow.test.tsx diff --git a/test/domains/DomainRow.test.tsx b/test/domains/DomainRow.test.tsx new file mode 100644 index 00000000..6fdc3923 --- /dev/null +++ b/test/domains/DomainRow.test.tsx @@ -0,0 +1,57 @@ +import { shallow, ShallowWrapper } from 'enzyme'; +import { Mock } from 'ts-mockery'; +import { Button, UncontrolledTooltip } from 'reactstrap'; +import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; +import { faBan as forbiddenIcon, faEdit as editIcon } from '@fortawesome/free-solid-svg-icons'; +import { ShlinkDomain, ShlinkDomainRedirects } from '../../src/api/types'; +import { DomainRow } from '../../src/domains/DomainRow'; + +describe('', () => { + let wrapper: ShallowWrapper; + const createWrapper = (domain: ShlinkDomain) => { + wrapper = shallow(); + + return wrapper; + }; + + afterEach(() => wrapper?.unmount()); + + it.each([ + [ Mock.of({ domain: '', isDefault: true }), 1 ], + [ Mock.of({ domain: '', isDefault: false }), 0 ], + ])('shows proper components based on the fact that provided domain is default or not', (domain, expectedComps) => { + const wrapper = createWrapper(domain); + const defaultDomainComp = wrapper.find('td').first().find('DefaultDomain'); + const tooltip = wrapper.find(UncontrolledTooltip); + const button = wrapper.find(Button); + const icon = wrapper.find(FontAwesomeIcon); + + expect(defaultDomainComp).toHaveLength(expectedComps); + expect(tooltip).toHaveLength(expectedComps); + expect(button.prop('disabled')).toEqual(domain.isDefault); + expect(icon.prop('icon')).toEqual(domain.isDefault ? forbiddenIcon : editIcon); + }); + + it.each([ + [ undefined, 3 ], + [ Mock.of(), 3 ], + [ Mock.of({ baseUrlRedirect: 'foo' }), 2 ], + [ Mock.of({ invalidShortUrlRedirect: 'foo' }), 2 ], + [ Mock.of({ baseUrlRedirect: 'foo', regular404Redirect: 'foo' }), 1 ], + [ + Mock.of( + { baseUrlRedirect: 'foo', regular404Redirect: 'foo', invalidShortUrlRedirect: 'foo' }, + ), + 0, + ], + ])('shows expected redirects', (redirects, expectedNoRedirects) => { + const wrapper = createWrapper(Mock.of({ domain: '', isDefault: true, redirects })); + const noRedirects = wrapper.find('Nr'); + const cells = wrapper.find('td'); + + expect(noRedirects).toHaveLength(expectedNoRedirects); + redirects?.baseUrlRedirect && expect(cells.at(1).html()).toContain(redirects.baseUrlRedirect); + redirects?.regular404Redirect && expect(cells.at(2).html()).toContain(redirects.regular404Redirect); + redirects?.invalidShortUrlRedirect && expect(cells.at(3).html()).toContain(redirects.invalidShortUrlRedirect); + }); +}); diff --git a/test/servers/helpers/ServerForm.test.tsx b/test/servers/helpers/ServerForm.test.tsx index 3c40ed48..a891fe00 100644 --- a/test/servers/helpers/ServerForm.test.tsx +++ b/test/servers/helpers/ServerForm.test.tsx @@ -1,6 +1,5 @@ import { shallow, ShallowWrapper } from 'enzyme'; import { ServerForm } from '../../../src/servers/helpers/ServerForm'; -import { FormGroupContainer } from '../../../src/utils/FormGroupContainer'; describe('', () => { let wrapper: ShallowWrapper; @@ -14,7 +13,7 @@ describe('', () => { afterEach(jest.resetAllMocks); it('renders components', () => { - expect(wrapper.find(FormGroupContainer)).toHaveLength(3); + expect(wrapper.find('FormGroup')).toHaveLength(3); expect(wrapper.find('span')).toHaveLength(1); }); diff --git a/test/utils/InfoTooltip.test.tsx b/test/utils/InfoTooltip.test.tsx index 32881ae6..aacd574c 100644 --- a/test/utils/InfoTooltip.test.tsx +++ b/test/utils/InfoTooltip.test.tsx @@ -1,7 +1,7 @@ import { shallow } from 'enzyme'; import { UncontrolledTooltip } from 'reactstrap'; -import { InfoTooltip } from '../../src/utils/InfoTooltip'; import Popper from 'popper.js'; +import { InfoTooltip } from '../../src/utils/InfoTooltip'; describe('', () => { it.each([