import {ApiTokenFixture} from 'sentry-fixture/apiToken'; import { render, renderGlobalModal, screen, userEvent, } from 'sentry-test/reactTestingLibrary'; import {ApiTokens} from 'sentry/views/settings/account/apiTokens'; describe('ApiTokens', function () { beforeEach(function () { MockApiClient.clearMockResponses(); }); it('renders empty result', async function () { MockApiClient.addMockResponse({ url: '/api-tokens/', body: null, }); render(); expect( await screen.findByText("You haven't created any authentication tokens yet.") ).toBeInTheDocument(); }); it('renders with result', async function () { const token1 = ApiTokenFixture({id: '1', name: 'token1'}); const token2 = ApiTokenFixture({id: '2', name: 'token2'}); MockApiClient.addMockResponse({ url: '/api-tokens/', body: [token1, token2], }); render(); expect(await screen.findByText('token1')).toBeInTheDocument(); expect(screen.getByText('token2')).toBeInTheDocument(); }); it('can delete token', async function () { MockApiClient.addMockResponse({ url: '/api-tokens/', body: [ApiTokenFixture()], }); const deleteTokenMock = MockApiClient.addMockResponse({ url: '/api-tokens/', method: 'DELETE', }); render(); renderGlobalModal(); const removeButton = await screen.findByRole('button', {name: 'Remove'}); expect(removeButton).toBeInTheDocument(); expect(deleteTokenMock).not.toHaveBeenCalled(); // mock response for refetch after delete MockApiClient.addMockResponse({ url: '/api-tokens/', body: [], }); await userEvent.click(removeButton); // Confirm modal await userEvent.click(screen.getByRole('button', {name: 'Confirm'})); // Wait for list to update expect( await screen.findByText("You haven't created any authentication tokens yet.") ).toBeInTheDocument(); // Should have called delete expect(deleteTokenMock).toHaveBeenCalledTimes(1); expect(deleteTokenMock).toHaveBeenCalledWith( '/api-tokens/', expect.objectContaining({ method: 'DELETE', }) ); }); });