import {MetricRuleFixture} from 'sentry-fixture/metricRule';
import {OrganizationFixture} from 'sentry-fixture/organization';
import {ProjectFixture} from 'sentry-fixture/project';
import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import {Dataset} from 'sentry/views/alerts/rules/metric/types';
import {ErrorMigrationWarning} from './errorMigrationWarning';
describe('ErrorMigrationWarning', () => {
const project = ProjectFixture();
const organization = OrganizationFixture({features: ['metric-alert-ignore-archived']});
afterEach(() => {
MockApiClient.clearMockResponses();
});
it('renders migration message for filtering archived issues', async () => {
const rule = MetricRuleFixture({
projects: [project.slug],
latestIncident: null,
dataset: Dataset.ERRORS,
query: '',
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/prompts-activity/`,
body: {},
});
render(, {
organization,
});
expect(
await screen.findByRole('button', {name: 'Exclude archived issues'})
).toBeInTheDocument();
});
it('dismisses migration message', async () => {
const rule = MetricRuleFixture({
projects: [project.slug],
latestIncident: null,
dataset: Dataset.ERRORS,
query: '',
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/prompts-activity/`,
body: {},
});
const dismissMock = MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/prompts-activity/`,
method: 'PUT',
body: {},
});
const {container} = render(, {
organization,
});
await userEvent.click(await screen.findByRole('button', {name: 'Dismiss Alert'}));
expect(container).toBeEmptyDOMElement();
expect(dismissMock).toHaveBeenCalledTimes(1);
});
it('renders nothing if the alert was created after the `is:unresolved` feature became available', () => {
const rule = MetricRuleFixture({
projects: [project.slug],
latestIncident: null,
dataset: Dataset.ERRORS,
query: '',
dateCreated: '2024-01-01T00:00:00Z',
});
const promptApi = MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/prompts-activity/`,
body: {},
});
const {container} = render(, {
organization,
});
expect(container).toBeEmptyDOMElement();
expect(promptApi).not.toHaveBeenCalled();
});
});