import {UptimeRuleFixture} from 'sentry-fixture/uptimeRule';
import {initializeOrg} from 'sentry-test/initializeOrg';
import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import UptimeAlertDetails from './details';
describe('UptimeAlertDetails', function () {
const {organization, project, routerProps} = initializeOrg();
beforeEach(function () {
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/projects/`,
body: [project],
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/users/`,
body: [],
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/issues/?limit=20&project=${project.id}&query=issue.category%3Auptime%20tags%5Buptime_rule%5D%3A1&statsPeriod=14d`,
body: [],
});
});
it('renders', async function () {
MockApiClient.addMockResponse({
url: `/projects/${organization.slug}/${project.slug}/uptime/1/`,
body: UptimeRuleFixture({name: 'Uptime Test Rule'}),
});
render(
,
{organization}
);
expect(await screen.findByText('Uptime Test Rule')).toBeInTheDocument();
});
it('shows a message for invalid uptime alert', async function () {
MockApiClient.addMockResponse({
url: `/projects/${organization.slug}/${project.slug}/uptime/2/`,
statusCode: 404,
});
render(
,
{organization}
);
expect(
await screen.findByText('The uptime alert rule you were looking for was not found.')
).toBeInTheDocument();
});
it('disables and enables the rule', async function () {
MockApiClient.addMockResponse({
url: `/projects/${organization.slug}/${project.slug}/uptime/2/`,
statusCode: 404,
});
MockApiClient.addMockResponse({
url: `/projects/${organization.slug}/${project.slug}/uptime/1/`,
body: UptimeRuleFixture({name: 'Uptime Test Rule'}),
});
render(
,
{organization}
);
await screen.findByText('Uptime Test Rule');
const disableMock = MockApiClient.addMockResponse({
url: `/projects/${organization.slug}/${project.slug}/uptime/1/`,
method: 'PUT',
body: UptimeRuleFixture({name: 'Uptime Test Rule', status: 'disabled'}),
});
await userEvent.click(
await screen.findByRole('button', {
name: 'Disable this uptime rule and stop performing checks',
})
);
expect(disableMock).toHaveBeenCalledWith(
expect.anything(),
expect.objectContaining({data: {status: 'disabled'}})
);
const enableMock = MockApiClient.addMockResponse({
url: `/projects/${organization.slug}/${project.slug}/uptime/1/`,
method: 'PUT',
body: UptimeRuleFixture({name: 'Uptime Test Rule', status: 'active'}),
});
// Button now re-enables the monitor
await userEvent.click(
await screen.findByRole('button', {name: 'Enable this uptime rule'})
);
expect(enableMock).toHaveBeenCalledWith(
expect.anything(),
expect.objectContaining({data: {status: 'active'}})
);
});
});