shlink-web-client/test/visits/ShortUrlVisitsHeader.test.tsx

52 lines
2 KiB
TypeScript
Raw Normal View History

import { screen, waitFor } from '@testing-library/react';
2023-04-13 23:47:13 +03:00
import { fromPartial } from '@total-typescript/shoehorn';
import { formatDistance, parseISO } from 'date-fns';
import type { ShortUrlDetail } from '../../src/shlink-web-component/short-urls/reducers/shortUrlDetail';
import type { ShortUrlVisits } from '../../src/shlink-web-component/visits/reducers/shortUrlVisits';
import { ShortUrlVisitsHeader } from '../../src/shlink-web-component/visits/ShortUrlVisitsHeader';
2022-07-10 20:44:49 +03:00
import { renderWithEvents } from '../__helpers__/setUpTest';
describe('<ShortUrlVisitsHeader />', () => {
const dateCreated = '2018-01-01T10:00:00+00:00';
2021-03-05 17:44:15 +03:00
const longUrl = 'https://foo.bar/bar/foo';
2023-04-13 23:47:13 +03:00
const shortUrlVisits = fromPartial<ShortUrlVisits>({
visits: [{}, {}, {}],
2020-09-05 09:49:18 +03:00
});
2023-05-27 12:57:26 +03:00
const goBack = vi.fn();
const setUp = (title?: string | null) => {
2023-04-13 23:47:13 +03:00
const shortUrlDetail = fromPartial<ShortUrlDetail>({
2021-03-05 17:44:15 +03:00
shortUrl: {
shortUrl: 'https://s.test/abc123',
2021-03-05 17:44:15 +03:00
longUrl,
dateCreated,
title,
},
loading: false,
});
return renderWithEvents(
<ShortUrlVisitsHeader shortUrlDetail={shortUrlDetail} shortUrlVisits={shortUrlVisits} goBack={goBack} />,
);
2021-03-05 17:44:15 +03:00
};
it('shows when the URL was created', async () => {
const { user } = setUp();
const dateElement = screen.getByText(`${formatDistance(new Date(), parseISO(dateCreated))} ago`);
expect(dateElement).toBeInTheDocument();
expect(screen.queryByRole('tooltip')).not.toBeInTheDocument();
await user.hover(dateElement);
await waitFor(() => expect(screen.getByRole('tooltip')).toHaveTextContent('2018-01-01 10:00'));
});
2021-03-05 17:44:15 +03:00
it.each([
[null, `Long URL: ${longUrl}`],
[undefined, `Long URL: ${longUrl}`],
['My cool title', 'Title: My cool title'],
2021-03-05 17:44:15 +03:00
])('shows the long URL and title', (title, expectedContent) => {
const { container } = setUp(title);
expect(container.querySelector('.long-url-container')).toHaveTextContent(expectedContent);
expect(screen.getByRole('link', { name: title ?? longUrl })).toHaveAttribute('href', longUrl);
});
});