import { screen } from '@testing-library/react'; import { formatISO } from 'date-fns'; import { MemoryRouter } from 'react-router-dom'; import { Mock } from 'ts-mockery'; import type { ReportExporter } from '../../src/common/services/ReportExporter'; import type { MercureBoundProps } from '../../src/mercure/helpers/boundToMercureHub'; import type { Settings } from '../../src/settings/reducers/settings'; import { DomainVisits as createDomainVisits } from '../../src/visits/DomainVisits'; import type { DomainVisits } from '../../src/visits/reducers/domainVisits'; import type { Visit } from '../../src/visits/types'; import { renderWithEvents } from '../__helpers__/setUpTest'; jest.mock('react-router-dom', () => ({ ...jest.requireActual('react-router-dom'), useParams: jest.fn().mockReturnValue({ domain: 'foo.com_DEFAULT' }), })); describe('', () => { const exportVisits = jest.fn(); const getDomainVisits = jest.fn(); const cancelGetDomainVisits = jest.fn(); const domainVisits = Mock.of({ visits: [Mock.of({ date: formatISO(new Date()) })] }); const DomainVisits = createDomainVisits(Mock.of({ exportVisits })); const setUp = () => renderWithEvents( ({ mercureInfo: {} })} getDomainVisits={getDomainVisits} cancelGetDomainVisits={cancelGetDomainVisits} domainVisits={domainVisits} settings={Mock.all()} /> , ); it('wraps visits stats and header', () => { setUp(); expect(screen.getByRole('heading', { name: '"foo.com" visits' })).toBeInTheDocument(); expect(getDomainVisits).toHaveBeenCalledWith(expect.objectContaining({ domain: 'DEFAULT' })); }); 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('domain_foo.com_visits.csv', expect.anything()); }); });