import moment from 'moment'; import {mountWithTheme} from 'sentry-test/enzyme'; import EventCauseEmpty from 'sentry/components/events/eventCauseEmpty'; import {trackAnalyticsEventV2} from 'sentry/utils/analytics'; jest.mock('sentry/utils/analytics'); describe('EventCauseEmpty', function () { let putMock; const organization = TestStubs.Organization(); const project = TestStubs.Project({ platform: 'javascript', firstEvent: '2020-01-01T23:54:33.831199Z', }); const event = TestStubs.Event(); beforeEach(function () { jest.clearAllMocks(); MockApiClient.clearMockResponses(); MockApiClient.addMockResponse({ url: '/projects/org-slug/project-slug/releases/completion/', body: [{step: 'commit', complete: false}], }); MockApiClient.addMockResponse({ method: 'GET', url: '/prompts-activity/', body: {}, }); putMock = MockApiClient.addMockResponse({ method: 'PUT', url: '/prompts-activity/', }); }); it('renders', async function () { const wrapper = mountWithTheme( ); await tick(); wrapper.update(); expect(wrapper.find('ExampleCommitPanel').exists()).toBe(true); expect(trackAnalyticsEventV2).toHaveBeenCalledWith({ eventKey: 'event_cause.viewed', eventName: null, organization, project_id: project.id, platform: project.platform, }); }); /** * Want to alternate between showing the configure suspect commits prompt and * the show configure distributed tracing prompt. */ it('doesnt render when event id starts with even char', async function () { const newEvent = { ...event, id: 'A', eventID: 'ABCDEFABCDEFABCDEFABCDEFABCDEFAB', }; const wrapper = mountWithTheme( ); await tick(); wrapper.update(); expect(wrapper.find('ExampleCommitPanel').exists()).toBe(false); expect(trackAnalyticsEventV2).not.toHaveBeenCalled(); }); it('can be snoozed', async function () { const wrapper = mountWithTheme( ); await tick(); wrapper.update(); wrapper.find('button[aria-label="Snooze"]').first().simulate('click'); await tick(); wrapper.update(); expect(putMock).toHaveBeenCalledWith( '/prompts-activity/', expect.objectContaining({ method: 'PUT', data: { organization_id: organization.id, project_id: project.id, feature: 'suspect_commits', status: 'snoozed', }, }) ); expect(wrapper.find('ExampleCommitPanel').exists()).toBe(false); expect(trackAnalyticsEventV2).toHaveBeenCalledWith({ eventKey: 'event_cause.snoozed', eventName: 'Event Cause Snoozed', organization, project_id: project.id, platform: project.platform, }); }); it('does not render when snoozed', async function () { const snoozed_ts = moment().subtract(1, 'day').unix(); MockApiClient.addMockResponse({ method: 'GET', url: '/prompts-activity/', body: {data: {snoozed_ts}}, }); const wrapper = mountWithTheme( ); await tick(); wrapper.update(); expect(wrapper.find('ExampleCommitPanel').exists()).toBe(false); }); it('renders when snoozed more than 7 days ago', async function () { const snoozed_ts = moment().subtract(9, 'day').unix(); MockApiClient.addMockResponse({ method: 'GET', url: '/prompts-activity/', body: {data: {snoozed_ts}}, }); const wrapper = mountWithTheme( ); await tick(); wrapper.update(); expect(wrapper.find('ExampleCommitPanel').exists()).toBe(true); }); it('can be dismissed', async function () { const wrapper = mountWithTheme( ); await tick(); wrapper.update(); wrapper.find('button[aria-label="Dismiss"]').first().simulate('click'); await tick(); wrapper.update(); expect(putMock).toHaveBeenCalledWith( '/prompts-activity/', expect.objectContaining({ method: 'PUT', data: { organization_id: organization.id, project_id: project.id, feature: 'suspect_commits', status: 'dismissed', }, }) ); expect(wrapper.find('ExampleCommitPanel').exists()).toBe(false); expect(trackAnalyticsEventV2).toHaveBeenCalledWith({ eventKey: 'event_cause.dismissed', eventName: 'Event Cause Dismissed', organization, project_id: project.id, platform: project.platform, }); }); it('does not render when dismissed', async function () { MockApiClient.addMockResponse({ method: 'GET', url: '/prompts-activity/', body: {data: {dismissed_ts: moment().unix()}}, }); const wrapper = mountWithTheme( ); await tick(); wrapper.update(); expect(wrapper.find('ExampleCommitPanel').exists()).toBe(false); }); it('can capture analytics on docs click', async function () { const wrapper = mountWithTheme( ); await tick(); wrapper.update(); wrapper.find('[aria-label="Read the docs"]').first().simulate('click'); expect(trackAnalyticsEventV2).toHaveBeenCalledWith({ eventKey: 'event_cause.docs_clicked', eventName: 'Event Cause Docs Clicked', organization, project_id: project.id, platform: project.platform, }); }); });