import {DebugFileFixture} from 'sentry-fixture/debugFile'; import {initializeOrg} from 'sentry-test/initializeOrg'; import { render, renderGlobalModal, screen, userEvent, } from 'sentry-test/reactTestingLibrary'; import ProjectDebugFiles from 'sentry/views/settings/projectDebugFiles'; describe('ProjectDebugFiles', function () { const {organization, project, router} = initializeOrg(); const props = { organization, project, params: {projectId: project.slug}, location: { ...router.location, query: { query: '', }, }, route: {}, router, routes: [], routeParams: {}, }; const endpoint = `/projects/${organization.slug}/${project.slug}/files/dsyms/`; beforeEach(function () { MockApiClient.addMockResponse({ url: endpoint, body: [DebugFileFixture()], }); MockApiClient.addMockResponse({ url: `/organizations/${organization.slug}/builtin-symbol-sources/`, method: 'GET', body: [], }); }); it('renders', async function () { render(); expect(screen.getByText('Debug Information Files')).toBeInTheDocument(); // Uploaded debug files content expect( await screen.findByText('Uploaded debug information files') ).toBeInTheDocument(); expect(screen.getByText('libS.so')).toBeInTheDocument(); }); it('renders empty', async function () { MockApiClient.addMockResponse({ url: endpoint, body: [], }); render(); // Uploaded debug files content expect( await screen.findByText('There are no debug symbols for this project.') ).toBeInTheDocument(); }); it('deletes the file', async function () { const deleteMock = MockApiClient.addMockResponse({ method: 'DELETE', url: `/projects/${organization.slug}/${project.slug}/files/dsyms/?id=${ DebugFileFixture().id }`, }); render(); renderGlobalModal(); // Delete button await userEvent.click(await screen.findByTestId('delete-dif')); // Confirm Modal await screen.findByRole('dialog'); await userEvent.click(screen.getByTestId('confirm-button')); expect(deleteMock).toHaveBeenCalled(); }); it('display error if request for dsyms fails', async function () { MockApiClient.addMockResponse({ url: endpoint, body: [DebugFileFixture()], statusCode: 400, }); render(); expect(await screen.findByText(/There was an error/)).toBeInTheDocument(); expect(screen.getByRole('button', {name: 'Retry'})).toBeInTheDocument(); }); it('display error if request for symbol sources fails', async function () { MockApiClient.addMockResponse({ url: `/organizations/${organization.slug}/builtin-symbol-sources/`, method: 'GET', body: [], statusCode: 400, }); render( ); expect(await screen.findByText(/There was an error/)).toBeInTheDocument(); expect(screen.getByRole('button', {name: 'Retry'})).toBeInTheDocument(); }); });