1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- import {EventAttachmentFixture} from 'sentry-fixture/eventAttachment';
- import {OrganizationFixture} from 'sentry-fixture/organization';
- import {ProjectFixture} from 'sentry-fixture/project';
- import {initializeOrg} from 'sentry-test/initializeOrg';
- import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
- import {openModal} from 'sentry/actionCreators/modal';
- import GroupStore from 'sentry/stores/groupStore';
- import ProjectsStore from 'sentry/stores/projectsStore';
- import GroupEventAttachments, {MAX_SCREENSHOTS_PER_PAGE} from './groupEventAttachments';
- jest.mock('sentry/actionCreators/modal');
- describe('GroupEventAttachments > Screenshots', function () {
- const {organization, routerContext} = initializeOrg({
- organization: OrganizationFixture(),
- router: {
- params: {orgId: 'org-slug', groupId: 'group-id'},
- location: {query: {types: 'event.screenshot'}},
- },
- } as Parameters<typeof initializeOrg>[0]);
- let project;
- let getAttachmentsMock;
- beforeEach(function () {
- project = ProjectFixture({platform: 'apple-ios'});
- ProjectsStore.loadInitialData([project]);
- GroupStore.init();
- getAttachmentsMock = MockApiClient.addMockResponse({
- url: '/organizations/org-slug/issues/group-id/attachments/',
- body: [EventAttachmentFixture()],
- });
- });
- afterEach(() => {});
- function renderGroupEventAttachments() {
- return render(<GroupEventAttachments project={project} />, {
- context: routerContext,
- organization,
- });
- }
- it('calls attachments api with screenshot filter', async function () {
- renderGroupEventAttachments();
- expect(screen.getByRole('radio', {name: 'Screenshots'})).toBeInTheDocument();
- await userEvent.click(screen.getByRole('radio', {name: 'Screenshots'}));
- expect(getAttachmentsMock).toHaveBeenCalledWith(
- '/organizations/org-slug/issues/group-id/attachments/',
- expect.objectContaining({
- query: {per_page: MAX_SCREENSHOTS_PER_PAGE, screenshot: 1, types: undefined},
- })
- );
- });
- it('does not render screenshots tab if not mobile platform', function () {
- project.platform = 'javascript';
- renderGroupEventAttachments();
- expect(screen.queryByText('Screenshots')).not.toBeInTheDocument();
- });
- it('calls opens modal when clicking on panel body', async function () {
- renderGroupEventAttachments();
- await userEvent.click(await screen.findByTestId('screenshot-1'));
- expect(openModal).toHaveBeenCalled();
- });
- it('links event id to event detail', async function () {
- renderGroupEventAttachments();
- expect(
- (await screen.findByText('12345678901234567890123456789012')).closest('a')
- ).toHaveAttribute(
- 'href',
- '/organizations/org-slug/issues/group-id/events/12345678901234567890123456789012/'
- );
- });
- it('links to the download URL', async function () {
- renderGroupEventAttachments();
- await userEvent.click(await screen.findByLabelText('Actions'));
- expect(screen.getByText('Download').closest('a')).toHaveAttribute(
- 'href',
- '/api/0/projects/org-slug/project-slug/events/12345678901234567890123456789012/attachments/1/?download=1'
- );
- });
- it('displays an error message when request fails', async function () {
- MockApiClient.addMockResponse({
- url: '/organizations/org-slug/issues/group-id/attachments/',
- statusCode: 500,
- });
- renderGroupEventAttachments();
- expect(await screen.findByText(/error loading/i)).toBeInTheDocument();
- });
- });
|