import { render, screen } from '@testing-library/react'; import { fromPartial } from '@total-typescript/shoehorn'; import { createMemoryHistory } from 'history'; import { Router } from 'react-router-dom'; import type { MainProps } from '../src/Main'; import { Main as createMain } from '../src/Main'; import { FeaturesProvider } from '../src/utils/features'; type SetUpOptions = { currentPath: string createNotFound?: MainProps['createNotFound']; domainVisitsSupported?: boolean; }; describe('
', () => { const Main = createMain( () => <>TagsList, () => <>ShortUrlsList, () => <>CreateShortUrl, () => <>ShortUrlVisits, () => <>TagVisits, () => <>DomainVisits, () => <>OrphanVisits, () => <>NonOrphanVisits, () => <>OverviewRoute, () => <>EditShortUrl, () => <>ManageDomains, ); const setUp = ({ createNotFound, currentPath, domainVisitsSupported = true }: SetUpOptions) => { const history = createMemoryHistory(); history.push(currentPath); return render(
, ); }; it.each([ ['/overview', 'OverviewRoute'], ['/list-short-urls/1', 'ShortUrlsList'], ['/create-short-url', 'CreateShortUrl'], ['/short-code/abc123/visits/foo', 'ShortUrlVisits'], ['/short-code/abc123/edit', 'EditShortUrl'], ['/tag/foo/visits/foo', 'TagVisits'], ['/orphan-visits/foo', 'OrphanVisits'], ['/manage-tags', 'TagsList'], ['/domain/domain.com/visits/foo', 'DomainVisits'], ['/non-orphan-visits/foo', 'NonOrphanVisits'], ['/manage-domains', 'ManageDomains'], ])( 'renders expected component based on location and server version', (currentPath, expectedContent) => { setUp({ currentPath }); expect(screen.getByText(expectedContent)).toBeInTheDocument(); }, ); it.each([ ['/domain/domain.com/visits/foo', false], ['/foo/bar/baz', true], ])('renders not-found when trying to navigate to invalid route', (currentPath, domainVisitsSupported) => { const createNotFound = () => <>Oops! Route not found.; setUp({ currentPath, domainVisitsSupported, createNotFound }); expect(screen.getByText('Oops! Route not found.')).toBeInTheDocument(); }); });