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',
})
);
});
});