import React from 'react'; import { render, cleanup, fireEvent } from '@testing-library/react'; import mockDate from 'mockdate'; import { NewsletterPuffLink } from '../NewsletterPuffLink'; import { TrackingContextProvider } from '../../../../helpers/tracking/TrackingContextProvider'; import FakeIntersectionObserver from '../../../../test-utils/FakeIntersectionObserver'; describe('NewsletterPuffLink', () => { let oldIntersectionObserver: typeof IntersectionObserver; beforeEach(() => { mockDate.set(1620000000000); oldIntersectionObserver = window.IntersectionObserver; // @ts-ignore window.IntersectionObserver = FakeIntersectionObserver; }); afterEach(() => { mockDate.reset(); window.IntersectionObserver = oldIntersectionObserver; jest.clearAllMocks(); cleanup(); }); it('should track link viewed in analytics', () => { const mockedAnalyticsStream = jest.fn(); const mockedOnPress = jest.fn(); const component = render( ); FakeIntersectionObserver.intersect(); expect(component.getByText('Explore our newsletters')!); expect(mockedAnalyticsStream).toHaveBeenCalledWith({ object: 'NewsletterPuffLink', action: 'Scrolled', attrs: { context: 'value', eventTime: '2021-05-03T00:00:00.000Z', event_navigation_browsing_method: 'automated', event_navigation_name: 'widget : puff : manage preferences here : displayed' } }); }); it('should track link viewed and clicked in analytics', async () => { const mockedAnalyticsStream = jest.fn(); const mockedOnPress = jest.fn(); const component = render( ); fireEvent.click(await component.queryByRole('link')!); expect(mockedAnalyticsStream).toHaveBeenCalledWith({ action: 'Clicked', component: 'ArticleSkeleton', object: 'NewsletterPuffLink', attrs: { context: 'value', eventTime: '2021-05-03T00:00:00.000Z', event_navigation_browsing_method: 'click', event_navigation_name: 'widget : puff : manage preferences here' } }); }); });