import {EventFixture} from 'sentry-fixture/event'; import {GroupFixture} from 'sentry-fixture/group'; import {OrganizationFixture} from 'sentry-fixture/organization'; import {ProjectFixture} from 'sentry-fixture/project'; import {render, screen} from 'sentry-test/reactTestingLibrary'; import {IssueCategory, IssueType} from 'sentry/types/group'; import {IssueDetailsContext} from 'sentry/views/issueDetails/streamline/context'; import { DetectorSection, getDetectorDetails, } from 'sentry/views/issueDetails/streamline/sidebar/detectorSection'; describe('DetectorSection', () => { const detectorId = '123'; const organization = OrganizationFixture(); const project = ProjectFixture(); const issueDetailsContext = { sectionData: {}, detectorDetails: {}, isSidebarOpen: true, navScrollMargin: 0, eventCount: 0, dispatch: jest.fn(), }; it('does not display detector details when no detector is found', () => { const event = EventFixture(); const group = GroupFixture(); const detectorDetails = getDetectorDetails({event, organization, project}); const {container} = render( ); expect(container).toBeEmptyDOMElement(); }); it('displays the detector details for a metric issue', () => { const event = EventFixture({ contexts: { metric_alert: { alert_rule_id: '123', }, }, }); const group = GroupFixture({ issueCategory: IssueCategory.METRIC_ALERT, issueType: IssueType.METRIC_ISSUE_POC, }); const detectorDetails = getDetectorDetails({event, organization, project}); render( ); expect(screen.getByText('Metric Alert Detector')).toBeInTheDocument(); const link = screen.getByRole('button', {name: 'View detector details'}); expect(link).toHaveAttribute( 'href', `/organizations/${organization.slug}/alerts/rules/details/${detectorId}/` ); expect( screen.getByText( 'This issue was created by a metric alert detector. View the detector details to learn more.' ) ).toBeInTheDocument(); }); it('displays the detector details for a cron monitor', () => { const event = EventFixture({ tags: [ { key: 'monitor.slug', value: detectorId, }, ], }); const group = GroupFixture({ issueCategory: IssueCategory.CRON, issueType: IssueType.MONITOR_CHECK_IN_FAILURE, }); const detectorDetails = getDetectorDetails({event, organization, project}); render( ); expect(screen.getByText('Cron Monitor')).toBeInTheDocument(); const link = screen.getByRole('button', {name: 'View monitor details'}); expect(link).toHaveAttribute( 'href', `/organizations/${organization.slug}/alerts/rules/crons/${project.slug}/${detectorId}/details/` ); expect( screen.getByText( 'This issue was created by a cron monitor. View the monitor details to learn more.' ) ).toBeInTheDocument(); }); it('displays the detector details for an uptime monitor', () => { const event = EventFixture({ tags: [ { key: 'uptime_rule', value: detectorId, }, ], }); const group = GroupFixture({ issueCategory: IssueCategory.UPTIME, issueType: IssueType.UPTIME_DOMAIN_FAILURE, }); const detectorDetails = getDetectorDetails({event, organization, project}); render( ); expect(screen.getByText('Uptime Monitor')).toBeInTheDocument(); const link = screen.getByRole('button', {name: 'View alert details'}); expect(link).toHaveAttribute( 'href', `/organizations/${organization.slug}/alerts/rules/uptime/${project.slug}/${detectorId}/details/` ); expect( screen.getByText( 'This issue was created by an uptime monitoring alert rule after detecting 3 consecutive failed checks.' ) ).toBeInTheDocument(); }); });