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