diff --git a/config/jest/setupTests.ts b/config/jest/setupTests.ts index cb16c9d4..5893b1ca 100644 --- a/config/jest/setupTests.ts +++ b/config/jest/setupTests.ts @@ -4,3 +4,4 @@ import ResizeObserver from 'resize-observer-polyfill'; (global as any).ResizeObserver = ResizeObserver; (global as any).scrollTo = () => {}; +(global as any).matchMedia = (media: string) => ({ matches: false, media }); diff --git a/test/domains/DomainRow.test.tsx b/test/domains/DomainRow.test.tsx index 387c4164..15c176b7 100644 --- a/test/domains/DomainRow.test.tsx +++ b/test/domains/DomainRow.test.tsx @@ -1,4 +1,4 @@ -import { shallow, ShallowWrapper } from 'enzyme'; +import { render, screen } from '@testing-library/react'; import { Mock } from 'ts-mockery'; import { ShlinkDomainRedirects } from '../../src/api/types'; import { DomainRow } from '../../src/domains/DomainRow'; @@ -6,42 +6,71 @@ import { SelectedServer } from '../../src/servers/data'; import { Domain } from '../../src/domains/data'; describe('', () => { - let wrapper: ShallowWrapper; - const createWrapper = (domain: Domain, selectedServer = Mock.all()) => { - wrapper = shallow( - , - ); - - return wrapper; - }; - - afterEach(() => wrapper?.unmount()); - - it.each([ - [undefined, 3], - [Mock.of(), 3], - [Mock.of({ baseUrlRedirect: 'foo' }), 2], - [Mock.of({ invalidShortUrlRedirect: 'foo' }), 2], - [Mock.of({ baseUrlRedirect: 'foo', regular404Redirect: 'foo' }), 1], + const redirectsCombinations = [ + [Mock.of({ baseUrlRedirect: 'foo' })], + [Mock.of({ invalidShortUrlRedirect: 'bar' })], + [Mock.of({ baseUrlRedirect: 'baz', regular404Redirect: 'foo' })], [ Mock.of( - { baseUrlRedirect: 'foo', regular404Redirect: 'foo', invalidShortUrlRedirect: 'foo' }, + { baseUrlRedirect: 'baz', regular404Redirect: 'bar', 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'); + ]; + const setUp = (domain: Domain, defaultRedirects?: ShlinkDomainRedirects) => render( + ()} + editDomainRedirects={jest.fn()} + checkDomainHealth={jest.fn()} + />, + ); - 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); + it.each(redirectsCombinations)('shows expected redirects', (redirects) => { + setUp(Mock.of({ domain: '', isDefault: true, redirects })); + const cells = screen.getAllByRole('cell'); + + redirects?.baseUrlRedirect && expect(cells[1]).toHaveTextContent(redirects.baseUrlRedirect); + redirects?.regular404Redirect && expect(cells[2]).toHaveTextContent(redirects.regular404Redirect); + redirects?.invalidShortUrlRedirect && expect(cells[3]).toHaveTextContent(redirects.invalidShortUrlRedirect); + expect(screen.queryByText('(as fallback)')).not.toBeInTheDocument(); + }); + + it.each([ + [undefined], + [Mock.of()], + ])('shows expected "no redirects"', (redirects) => { + setUp(Mock.of({ domain: '', isDefault: true, redirects })); + const cells = screen.getAllByRole('cell'); + + expect(cells[1]).toHaveTextContent('No redirect'); + expect(cells[2]).toHaveTextContent('No redirect'); + expect(cells[3]).toHaveTextContent('No redirect'); + expect(screen.queryByText('(as fallback)')).not.toBeInTheDocument(); + }); + + it.each(redirectsCombinations)('shows expected fallback redirects', (fallbackRedirects) => { + setUp(Mock.of({ domain: '', isDefault: true }), fallbackRedirects); + const cells = screen.getAllByRole('cell'); + + fallbackRedirects?.baseUrlRedirect && expect(cells[1]).toHaveTextContent( + `${fallbackRedirects.baseUrlRedirect} (as fallback)`, + ); + fallbackRedirects?.regular404Redirect && expect(cells[2]).toHaveTextContent( + `${fallbackRedirects.regular404Redirect} (as fallback)`, + ); + fallbackRedirects?.invalidShortUrlRedirect && expect(cells[3]).toHaveTextContent( + `${fallbackRedirects.invalidShortUrlRedirect} (as fallback)`, + ); + }); + + it.each([[true], [false]])('shows icon on default domain only', (isDefault) => { + const { container } = setUp(Mock.of({ domain: '', isDefault })); + + if (isDefault) { + expect(container.querySelector('#defaultDomainIcon')).toBeInTheDocument(); + } else { + expect(container.querySelector('#defaultDomainIcon')).not.toBeInTheDocument(); + } }); });