import {GroupFixture} from 'sentry-fixture/group';
import {LocationFixture} from 'sentry-fixture/locationFixture';
import {OrganizationFixture} from 'sentry-fixture/organization';
import {ProjectFixture} from 'sentry-fixture/project';
import {RouterFixture} from 'sentry-fixture/routerFixture';
import {TeamFixture} from 'sentry-fixture/team';
import {render, screen} from 'sentry-test/reactTestingLibrary';
import {IssueCategory} from 'sentry/types/group';
import {formatAbbreviatedNumber} from 'sentry/utils/formatters';
import StreamlinedGroupHeader from 'sentry/views/issueDetails/streamline/header';
import {ReprocessingStatus} from 'sentry/views/issueDetails/utils';
describe('StreamlinedGroupHeader', () => {
const baseUrl = 'BASE_URL/';
const organization = OrganizationFixture();
const project = ProjectFixture({
platform: 'javascript',
teams: [TeamFixture()],
});
const group = GroupFixture({issueCategory: IssueCategory.ERROR, isUnhandled: true});
const router = RouterFixture({
location: LocationFixture({query: {streamline: '1'}}),
});
describe('JS Project Error Issue', () => {
const defaultProps = {
organization,
baseUrl,
groupReprocessingStatus: ReprocessingStatus.NO_STATUS,
project,
};
beforeEach(() => {
MockApiClient.addMockResponse({
url: '/organizations/org-slug/replay-count/',
body: {},
});
MockApiClient.addMockResponse({
url: `/organizations/org-slug/repos/`,
body: {},
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/issues/${group.id}/attachments/`,
body: [],
});
MockApiClient.addMockResponse({
url: `/organizations/${organization.slug}/users/`,
body: [],
});
});
it('shows all elements of header', async () => {
render(
,
{
organization,
router,
}
);
expect(screen.getByText('RequestError')).toBeInTheDocument();
expect(screen.getByText('Unhandled')).toBeInTheDocument();
expect(await screen.findByRole('link', {name: 'View events'})).toBeInTheDocument();
expect(screen.getByText(formatAbbreviatedNumber(group.count))).toBeInTheDocument();
expect(
await screen.findByRole('link', {name: 'View affected users'})
).toBeInTheDocument();
expect(
screen.getByText(formatAbbreviatedNumber(group.userCount))
).toBeInTheDocument();
expect(
screen.getByRole('button', {name: 'Modify issue priority'})
).toBeInTheDocument();
expect(
screen.getByRole('button', {name: 'Modify issue assignee'})
).toBeInTheDocument();
expect(
screen.queryByRole('button', {name: 'Switch to the old issue experience'})
).not.toBeInTheDocument();
expect(screen.getByRole('button', {name: 'Resolve'})).toBeInTheDocument();
expect(screen.getByRole('button', {name: 'Archive'})).toBeInTheDocument();
});
it('displays new experience button if flag is set', async () => {
const flaggedOrganization = OrganizationFixture({
features: ['issue-details-streamline'],
});
render(
,
{
organization: flaggedOrganization,
router,
}
);
expect(
await screen.findByRole('button', {name: 'Switch to the old issue experience'})
).toBeInTheDocument();
});
it('displays share icon if issue has been shared', async () => {
render(
,
{
organization,
router,
}
);
expect(
await screen.findByRole('button', {name: 'View issue share settings'})
).toBeInTheDocument();
});
});
});