import { screen } from '@testing-library/react'; import { fromPartial } from '@total-typescript/shoehorn'; import { formatISO } from 'date-fns'; import { identity } from 'ramda'; import { MemoryRouter } from 'react-router-dom'; import type { MercureBoundProps } from '../../shlink-web-component/mercure/helpers/boundToMercureHub'; import type { ShortUrlVisits as ShortUrlVisitsState } from '../../shlink-web-component/visits/reducers/shortUrlVisits'; import type { ShortUrlVisitsProps } from '../../shlink-web-component/visits/ShortUrlVisits'; import { ShortUrlVisits as createShortUrlVisits } from '../../shlink-web-component/visits/ShortUrlVisits'; import { renderWithEvents } from '../__helpers__/setUpTest'; describe('', () => { const getShortUrlVisitsMock = vi.fn(); const exportVisits = vi.fn(); const shortUrlVisits = fromPartial({ visits: [{ date: formatISO(new Date()) }] }); const ShortUrlVisits = createShortUrlVisits(fromPartial({ exportVisits })); const setUp = () => renderWithEvents( ({})} {...fromPartial({ mercureInfo: {} })} getShortUrlDetail={identity} getShortUrlVisits={getShortUrlVisitsMock} shortUrlVisits={shortUrlVisits} shortUrlDetail={fromPartial({})} settings={fromPartial({})} cancelGetShortUrlVisits={() => {}} /> , ); it('wraps visits stats and header', () => { setUp(); expect(screen.getAllByRole('heading')[0]).toHaveTextContent('Visits for'); expect(getShortUrlVisitsMock).toHaveBeenCalled(); }); it('exports visits when clicking the button', async () => { const { user } = setUp(); const btn = screen.getByRole('button', { name: 'Export (1)' }); expect(exportVisits).not.toHaveBeenCalled(); expect(btn).toBeInTheDocument(); await user.click(btn); expect(exportVisits).toHaveBeenCalledWith('short-url_undefined_visits.csv', expect.anything()); }); });