diff --git a/src/pages/LoginPage/LoginButton.test.jsx b/src/pages/LoginPage/LoginButton.test.jsx index 88d3d97b4f..3644ca49b8 100644 --- a/src/pages/LoginPage/LoginButton.test.jsx +++ b/src/pages/LoginPage/LoginButton.test.jsx @@ -1,10 +1,13 @@ -import { render, screen } from '@testing-library/react' +import { act, render, screen } from '@testing-library/react' import { MemoryRouter, Route } from 'react-router-dom' +import { eventTracker } from 'services/events/events' import { ThemeContextProvider } from 'shared/ThemeContext' import LoginButton from './LoginButton' +vi.mock('services/events/events') + const wrapper = ({ initialEntries, path }) => ({ children }) => ( @@ -73,4 +76,27 @@ describe('LoginButton', () => { expect(sentry).toBeInTheDocument() }) }) + + it('emits event on click', () => { + render(, { + wrapper: wrapper({ + initialEntries: '/login/gh', + path: '/login/:provider', + }), + }) + + const github = screen.getByText(/Login with GitHub/i) + expect(github).toBeInTheDocument() + + act(() => github.click()) + + expect(eventTracker().track).toHaveBeenCalledWith({ + type: 'Button Clicked', + properties: { + buttonName: 'Login', + buttonLocation: 'Login Page', + loginProvider: 'GitHub', + }, + }) + }) }) diff --git a/src/pages/SyncProviderPage/SyncButton.test.tsx b/src/pages/SyncProviderPage/SyncButton.test.tsx index 3cfa88fd37..7d3c0038e6 100644 --- a/src/pages/SyncProviderPage/SyncButton.test.tsx +++ b/src/pages/SyncProviderPage/SyncButton.test.tsx @@ -1,8 +1,12 @@ -import { render, screen } from '@testing-library/react' +import { act, render, screen } from '@testing-library/react' import { MemoryRouter, Route } from 'react-router-dom' +import { eventTracker } from 'services/events/events' + import SyncButton from './SyncButton' +vi.mock('services/events/events') + const wrapper: React.FC = ({ children }) => ( {children} @@ -87,4 +91,22 @@ describe('SyncButton', () => { expect(link).toHaveAttribute('href', `/login/bbs?to=${expectedRedirect}`) }) }) + + it('emits event on click', () => { + console.error = () => {} // silence error about navigation on click + render(, { wrapper }) + + const link = screen.getByRole('link', { name: /Sync with GitHub/ }) + + act(() => link.click()) + + expect(eventTracker().track).toHaveBeenCalledWith({ + type: 'Button Clicked', + properties: { + buttonName: 'Sync', + buttonLocation: 'Sync Provider Page', + loginProvider: 'GitHub', + }, + }) + }) }) diff --git a/src/pages/TermsOfService/TermsOfService.test.tsx b/src/pages/TermsOfService/TermsOfService.test.tsx index fd68f26516..c4406a96d9 100644 --- a/src/pages/TermsOfService/TermsOfService.test.tsx +++ b/src/pages/TermsOfService/TermsOfService.test.tsx @@ -11,11 +11,13 @@ import config from 'config' import { SentryBugReporter } from 'sentry' +import { eventTracker } from 'services/events/events' import { InternalUserData } from 'services/user/useInternalUser' import TermsOfService from './TermsOfService' vi.mock('config') +vi.mock('services/events/events') const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false } }, @@ -228,7 +230,7 @@ describe('TermsOfService', () => { // Into the realm of testing implementation details, but I want to make sure // that the correct inputs are being sent to the server. - it('Sign TOS, sends the correct inputs to the server', async () => { + it('Sign TOS, sends the correct inputs to the server, emits event', async () => { const { user, mockMutationVariables } = setup({ internalUserData: { email: 'personal@cr.com', @@ -264,6 +266,14 @@ describe('TermsOfService', () => { }, }) ) + + expect(eventTracker().track).toHaveBeenCalledWith({ + type: 'Button Clicked', + properties: { + buttonName: 'Continue', + buttonLocation: 'Terms of Service', + }, + }) }) })