import {ApiApplicationFixture} from 'sentry-fixture/apiApplication'; import {initializeOrg} from 'sentry-test/initializeOrg'; import { render, screen, userEvent, waitFor, waitForElementToBeRemoved, } from 'sentry-test/reactTestingLibrary'; import ApiApplications from 'sentry/views/settings/account/apiApplications'; describe('ApiApplications', function () { const {routerProps, router} = initializeOrg({router: {params: {}}}); beforeEach(function () { MockApiClient.clearMockResponses(); }); it('renders empty', async function () { MockApiClient.addMockResponse({ url: '/api-applications/', body: [], }); render(); await waitForElementToBeRemoved(() => screen.queryByTestId('loading-indicator')); expect( screen.getByText("You haven't created any applications yet.") ).toBeInTheDocument(); }); it('renders', async function () { const requestMock = MockApiClient.addMockResponse({ url: '/api-applications/', body: [ApiApplicationFixture()], }); render(); await waitForElementToBeRemoved(() => screen.queryByTestId('loading-indicator')); expect(requestMock).toHaveBeenCalled(); expect(screen.getByText('Adjusted Shrimp')).toBeInTheDocument(); }); it('creates application', async function () { MockApiClient.addMockResponse({ url: '/api-applications/', body: [], }); const createApplicationRequest = MockApiClient.addMockResponse({ url: '/api-applications/', body: ApiApplicationFixture({ id: '234', }), method: 'POST', }); render(); await waitForElementToBeRemoved(() => screen.queryByTestId('loading-indicator')); await userEvent.click(screen.getByLabelText('Create New Application')); expect(createApplicationRequest).toHaveBeenCalledWith( '/api-applications/', expect.objectContaining({method: 'POST'}) ); await waitFor(() => { expect(router.push).toHaveBeenLastCalledWith( '/settings/account/api/applications/234/' ); }); }); it('deletes application', async function () { MockApiClient.addMockResponse({ url: '/api-applications/', body: [ApiApplicationFixture({id: '123'})], }); const deleteApplicationRequest = MockApiClient.addMockResponse({ url: '/api-applications/123/', method: 'DELETE', }); render(); await waitForElementToBeRemoved(() => screen.queryByTestId('loading-indicator')); await userEvent.click(screen.getByLabelText('Remove')); expect(deleteApplicationRequest).toHaveBeenCalledWith( '/api-applications/123/', expect.objectContaining({method: 'DELETE'}) ); await waitFor(() => { expect( screen.getByText("You haven't created any applications yet.") ).toBeInTheDocument(); }); }); });