import {IncidentFixture} from 'sentry-fixture/incident';
import {initializeOrg} from 'sentry-test/initializeOrg';
import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import {feedbackClient} from 'sentry/components/featureFeedback/feedbackModal';
import * as analytics from 'sentry/utils/analytics';
import AnomalyDetectionFeedbackBanner from './anomalyDetectionFeedbackBanner';
describe('AnomalyDetectionFeedbackBanner', () => {
const initialData = initializeOrg({
organization: {
features: [
'metric-alert-threshold-period',
'change-alerts',
'anomaly-detection-alerts',
'anomaly-detection-rollout',
],
},
});
const organization = initialData.organization;
const project = initialData.project;
const mockIncident = IncidentFixture({projects: [project.slug]});
const mockIncident2 = IncidentFixture({id: '6702'});
const analyticsSpy = jest.spyOn(analytics, 'trackAnalytics');
it('submits anomaly detection feedback (yes)', async () => {
const {container} = render(
);
expect(screen.getByText(/Was the anomaly correctly identified?/)).toBeInTheDocument();
await userEvent.click(screen.getByRole('button', {name: 'Yes'}));
expect(analyticsSpy).toHaveBeenCalledWith(
'anomaly-detection.feedback-submitted',
expect.objectContaining({
choice_selected: true,
organization,
incident_id: mockIncident.id,
})
);
expect(feedbackClient.captureEvent).toHaveBeenCalledWith({
message: 'Anomaly Detection Alerts Banner Feedback',
level: 'info',
tags: {
featureName: 'anomaly-detection-alerts-feedback',
choice_selected: true,
incident_id: mockIncident.id,
alert_rule_id: mockIncident.alertRule.id,
metric: mockIncident.alertRule.query,
sensitivity: mockIncident.alertRule.sensitivity,
direction: mockIncident.alertRule.thresholdType,
time_window: mockIncident.alertRule.timeWindow,
},
request: expect.anything(),
user: expect.anything(),
});
expect(container).toBeEmptyDOMElement();
});
it('submits anomaly detection feedback (no)', async () => {
const {container} = render(
);
expect(screen.getByText(/Was the anomaly correctly identified?/)).toBeInTheDocument();
await userEvent.click(screen.getByRole('button', {name: 'No'}));
expect(analyticsSpy).toHaveBeenCalledWith(
'anomaly-detection.feedback-submitted',
expect.objectContaining({
choice_selected: false,
organization,
incident_id: mockIncident2.id,
})
);
expect(feedbackClient.captureEvent).toHaveBeenCalledWith({
message: 'Anomaly Detection Alerts Banner Feedback',
level: 'info',
tags: {
featureName: 'anomaly-detection-alerts-feedback',
choice_selected: false,
incident_id: mockIncident2.id,
alert_rule_id: mockIncident2.alertRule.id,
metric: mockIncident2.alertRule.query,
sensitivity: mockIncident2.alertRule.sensitivity,
direction: mockIncident2.alertRule.thresholdType,
time_window: mockIncident2.alertRule.timeWindow,
},
request: expect.anything(),
user: expect.anything(),
});
expect(container).toBeEmptyDOMElement();
});
});