import {initializeOrg} from 'sentry-test/initializeOrg';
import {render, screen, waitFor} from 'sentry-test/reactTestingLibrary';
import type {PageFilters} from 'sentry/types/core';
import {ProjectAnrScoreCard} from 'sentry/views/projectDetail/projectScoreCards/projectAnrScoreCard';
describe('ProjectDetail > ProjectAnr', function () {
let endpointMock: jest.Mock;
let endpointMockPreviousPeriod: jest.Mock;
const {organization, router} = initializeOrg({
router: {
location: {
query: {project: '1', statsPeriod: '7d'},
},
},
});
const selection = {
projects: [1],
environments: [],
datetime: {
period: '7d',
start: null,
end: null,
utc: false,
},
} as PageFilters;
beforeEach(function () {
endpointMock = MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/sessions/`,
match: [MockApiClient.matchQuery({statsPeriod: '7d'})],
body: {
groups: [
{
by: {},
totals: {
'anr_rate()': 0.11561866125760649,
},
},
],
},
status: 200,
});
endpointMockPreviousPeriod = MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/sessions/`,
match: [MockApiClient.matchQuery({start: '2017-10-03T02:41:20.000'})], // setup mocks a constant current date, so this works
body: {
groups: [
{
by: {},
totals: {
'anr_rate()': 0.08558558558558559,
},
},
],
},
status: 200,
});
});
afterEach(function () {
MockApiClient.clearMockResponses();
});
it('calls api with anr rate', async function () {
render(
);
expect(endpointMock).toHaveBeenCalledWith(
`/organizations/${organization.slug}/sessions/`,
expect.objectContaining({
query: {
environment: [],
field: ['anr_rate()'],
includeSeries: '0',
includeTotals: '1',
interval: '1h',
project: [1],
query: 'release:abc',
statsPeriod: '7d',
},
})
);
expect(endpointMockPreviousPeriod).toHaveBeenCalledWith(
`/organizations/${organization.slug}/sessions/`,
expect.objectContaining({
query: {
end: '2017-10-10T02:41:20.000',
environment: [],
field: ['anr_rate()'],
includeSeries: '0',
includeTotals: '1',
interval: '1h',
project: [1],
query: 'release:abc',
start: '2017-10-03T02:41:20.000',
},
})
);
await waitFor(() => expect(screen.getByText('11.56%')).toBeInTheDocument());
await waitFor(() => expect(screen.getByText('3%')).toBeInTheDocument());
});
it('renders open in issues CTA', async function () {
organization.features = ['discover-basic'];
render(
,
{
router,
}
);
await waitFor(() => expect(screen.getByText('11.56%')).toBeInTheDocument());
expect(screen.getByRole('button', {name: 'View Issues'})).toHaveAttribute(
'href',
'/organizations/org-slug/issues/?project=1&query=mechanism%3A%5BANR%2CAppExitInfo%5D%20release%3Aabc&sort=freq&statsPeriod=7d'
);
});
});