123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110 |
- import {LocationFixture} from 'sentry-fixture/locationFixture';
- import {OrganizationFixture} from 'sentry-fixture/organization';
- import {RouterFixture} from 'sentry-fixture/routerFixture';
- import {ProjectFixture} from 'getsentry-test/fixtures/project';
- import {renderHook} from 'sentry-test/reactTestingLibrary';
- import type {ButtonProps} from 'sentry/components/core/button';
- import {OrganizationContext} from 'sentry/views/organizationContext';
- import {TestRouteContext} from 'sentry/views/routeContext';
- import useButtonTracking from 'getsentry/hooks/useButtonTracking';
- import rawTrackAnalyticsEvent from 'getsentry/utils/rawTrackAnalyticsEvent';
- jest.mock('getsentry/utils/rawTrackAnalyticsEvent');
- describe('buttonTracking', function () {
- const organization = OrganizationFixture();
- const project = ProjectFixture({organization});
- const router = {
- location: LocationFixture({
- pathname: `/settings/${organization.slug}/${project.slug}/`,
- }),
- params: {orgId: organization.slug},
- routes: [
- {path: '/'},
- {path: '/settings/'},
- {path: ':orgId/'},
- {path: 'projects/:projectId/'},
- ],
- router: RouterFixture(),
- };
- const wrapper = ({children}: ButtonProps) => (
- <OrganizationContext.Provider value={organization}>
- <TestRouteContext.Provider value={router}>{children}</TestRouteContext.Provider>
- </OrganizationContext.Provider>
- );
- afterEach(function () {
- (rawTrackAnalyticsEvent as jest.Mock).mockClear();
- });
- it('calls rawTrackAnalyticsEvent with default values', function () {
- const {result} = renderHook(useButtonTracking, {
- initialProps: {'aria-label': 'Create Alert'},
- wrapper,
- });
- result.current();
- expect(rawTrackAnalyticsEvent).toHaveBeenCalledWith({
- eventName: null,
- eventKey: 'button_click.settings.:org_id.projects.:project_id',
- organization: expect.objectContaining(organization),
- parameterized_path: 'settings.:org_id.projects.:project_id',
- text: 'Create Alert',
- });
- expect(rawTrackAnalyticsEvent).toHaveBeenCalledTimes(1);
- });
- it('calls rawTrackAnalyticsEvent with data', function () {
- const {result} = renderHook(useButtonTracking, {
- initialProps: {
- 'aria-label': 'Create Alert',
- analyticsEventKey: 'settings.create_alert',
- analyticsEventName: 'Settings: Create Alert',
- analyticsParams: {priority: 'primary', href: 'sentry.io/settings/create_alert'},
- },
- wrapper,
- });
- result.current();
- expect(rawTrackAnalyticsEvent).toHaveBeenCalledWith({
- eventName: 'Settings: Create Alert',
- eventKey: 'settings.create_alert',
- organization: expect.objectContaining(organization),
- parameterized_path: 'settings.:org_id.projects.:project_id',
- text: 'Create Alert',
- priority: 'primary',
- href: 'sentry.io/settings/create_alert',
- });
- expect(rawTrackAnalyticsEvent).toHaveBeenCalledTimes(1);
- });
- it('calls rawTrackAnalyticsEvent with new event names', function () {
- const {result} = renderHook(useButtonTracking, {
- initialProps: {
- 'aria-label': 'Create Alert',
- analyticsEventKey: 'settings.create_alert',
- analyticsEventName: 'Settings: Create Alert',
- },
- wrapper,
- });
- result.current();
- expect(rawTrackAnalyticsEvent).toHaveBeenCalledWith({
- eventName: 'Settings: Create Alert',
- eventKey: 'settings.create_alert',
- organization: expect.objectContaining(organization),
- parameterized_path: 'settings.:org_id.projects.:project_id',
- text: 'Create Alert',
- });
- expect(rawTrackAnalyticsEvent).toHaveBeenCalledTimes(1);
- });
- });
|