import React from 'react';
import moment from 'moment';
import {mount} from 'enzyme';
import EventCauseEmpty from 'app/components/events/eventCauseEmpty';
import {trackAdhocEvent, trackAnalyticsEvent} from 'app/utils/analytics';
jest.mock('app/utils/analytics');
describe('EventCauseEmpty', function() {
let putMock;
const routerContext = TestStubs.routerContext();
const organization = TestStubs.Organization();
const project = TestStubs.Project({platform: 'javascript'});
beforeEach(function() {
MockApiClient.clearMockResponses();
MockApiClient.addMockResponse({
url: '/projects/org-slug/project-slug/releases/completion/',
body: [{step: 'commit', complete: false}],
});
MockApiClient.addMockResponse({
method: 'GET',
url: '/promptsactivity/',
body: {},
});
putMock = MockApiClient.addMockResponse({
method: 'PUT',
url: '/promptsactivity/',
});
});
it('renders', async function() {
const wrapper = mount(
,
routerContext
);
await tick();
wrapper.update();
expect(wrapper.find('ExampleCommitPanel').exists()).toBe(true);
expect(trackAdhocEvent).toHaveBeenCalledWith({
eventKey: 'event_cause.viewed',
org_id: parseInt(organization.id, 10),
project_id: parseInt(project.id, 10),
platform: project.platform,
});
});
it('can be snoozed', async function() {
const wrapper = mount(
,
routerContext
);
await tick();
wrapper.update();
wrapper
.find('[data-test-id="snoozed"]')
.first()
.simulate('click');
expect(putMock).toHaveBeenCalledWith(
'/promptsactivity/',
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(trackAnalyticsEvent).toHaveBeenCalledWith({
eventKey: 'event_cause.snoozed',
eventName: 'Event Cause Snoozed',
organization_id: parseInt(organization.id, 10),
project_id: parseInt(project.id, 10),
platform: project.platform,
});
});
it('does not render when snoozed', async function() {
const snoozed_ts = moment()
.subtract(1, 'day')
.unix();
MockApiClient.addMockResponse({
method: 'GET',
url: '/promptsactivity/',
body: {data: {snoozed_ts}},
});
const wrapper = mount(
,
routerContext
);
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: '/promptsactivity/',
body: {data: {snoozed_ts}},
});
const wrapper = mount(
,
routerContext
);
await tick();
wrapper.update();
expect(wrapper.find('ExampleCommitPanel').exists()).toBe(true);
});
it('can be dismissed', async function() {
const wrapper = mount(
,
routerContext
);
await tick();
wrapper.update();
wrapper
.find('[data-test-id="dismissed"]')
.first()
.simulate('click');
expect(putMock).toHaveBeenCalledWith(
'/promptsactivity/',
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(trackAnalyticsEvent).toHaveBeenCalledWith({
eventKey: 'event_cause.dismissed',
eventName: 'Event Cause Dismissed',
organization_id: parseInt(organization.id, 10),
project_id: parseInt(project.id, 10),
platform: project.platform,
});
});
it('does not render when dismissed', async function() {
MockApiClient.addMockResponse({
method: 'GET',
url: '/promptsactivity/',
body: {data: {dismissed_ts: moment().unix()}},
});
const wrapper = mount(
,
routerContext
);
await tick();
wrapper.update();
expect(wrapper.find('ExampleCommitPanel').exists()).toBe(false);
});
it('can capture analytics on docs click', async function() {
const wrapper = mount(
,
routerContext
);
await tick();
wrapper.update();
wrapper
.find('[data-test-id="read-the-docs"]')
.first()
.simulate('click');
expect(trackAnalyticsEvent).toHaveBeenCalledWith({
eventKey: 'event_cause.docs_clicked',
eventName: 'Event Cause Docs Clicked',
organization_id: parseInt(organization.id, 10),
project_id: parseInt(project.id, 10),
platform: project.platform,
});
});
});