mirror of
https://github.com/hanzoai/sentinel.git
synced 2026-10-30 14:49:14 +00:00
156 lines
5.8 KiB
TypeScript
156 lines
5.8 KiB
TypeScript
import {OrganizationFixture} from 'sentry-fixture/organization';
|
|
import {ProjectFixture} from 'sentry-fixture/project';
|
|
import {ProjectKeysFixture} from 'sentry-fixture/projectKeys';
|
|
|
|
import {initializeOrg} from 'sentry-test/initializeOrg';
|
|
import {
|
|
render,
|
|
renderGlobalModal,
|
|
screen,
|
|
userEvent,
|
|
} from 'sentry-test/reactTestingLibrary';
|
|
|
|
import {SentryPropTypeValidators} from 'sentry/sentryPropTypeValidators';
|
|
import type {Organization as TOrganization, Project, ProjectKey} from 'sentry/types';
|
|
import ProjectKeyDetails from 'sentry/views/settings/project/projectKeys/details';
|
|
|
|
describe('ProjectKeyDetails', function () {
|
|
const {routerProps} = initializeOrg();
|
|
|
|
let org: TOrganization;
|
|
let project: Project;
|
|
let deleteMock: jest.Mock;
|
|
let statsMock: jest.Mock;
|
|
let putMock: jest.Mock;
|
|
let projectKeys: ProjectKey[];
|
|
|
|
beforeEach(function () {
|
|
org = OrganizationFixture();
|
|
project = ProjectFixture();
|
|
projectKeys = ProjectKeysFixture();
|
|
|
|
MockApiClient.clearMockResponses();
|
|
MockApiClient.addMockResponse({
|
|
url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
|
|
method: 'GET',
|
|
body: projectKeys[0],
|
|
});
|
|
putMock = MockApiClient.addMockResponse({
|
|
url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
|
|
method: 'PUT',
|
|
});
|
|
statsMock = MockApiClient.addMockResponse({
|
|
url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/stats/`,
|
|
method: 'GET',
|
|
body: [
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1517270400, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1517356800, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1517443200, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1517529600, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1517616000, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1517702400, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1517788800, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1517875200, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1517961600, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518048000, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518134400, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518220800, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518307200, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518393600, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518480000, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518566400, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518652800, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518739200, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518825600, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518912000, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1518998400, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1519084800, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1519171200, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1519257600, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1519344000, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1519430400, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1519516800, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1519603200, dropped: 0},
|
|
{filtered: 0, accepted: 0, total: 0, ts: 1519689600, dropped: 0},
|
|
{filtered: 0, accepted: 5, total: 12, ts: 1519776000, dropped: 7},
|
|
{filtered: 0, accepted: 14, total: 14, ts: 1519862400, dropped: 0},
|
|
],
|
|
});
|
|
deleteMock = MockApiClient.addMockResponse({
|
|
url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
|
|
method: 'DELETE',
|
|
});
|
|
|
|
const context = {
|
|
context: {
|
|
project: ProjectFixture(),
|
|
},
|
|
childContextTypes: {
|
|
project: SentryPropTypeValidators.isObject,
|
|
},
|
|
};
|
|
|
|
render(
|
|
<ProjectKeyDetails
|
|
{...routerProps}
|
|
organization={org}
|
|
project={project}
|
|
params={{
|
|
keyId: projectKeys[0].id,
|
|
projectId: project.slug,
|
|
}}
|
|
/>,
|
|
{
|
|
context,
|
|
}
|
|
);
|
|
});
|
|
|
|
it('has stats box', async function () {
|
|
expect(await screen.findByText('Key Details')).toBeInTheDocument();
|
|
expect(statsMock).toHaveBeenCalled();
|
|
});
|
|
|
|
it('changes name', async function () {
|
|
await userEvent.clear(await screen.findByRole('textbox', {name: 'Name'}));
|
|
await userEvent.type(await screen.findByRole('textbox', {name: 'Name'}), 'New Name');
|
|
await userEvent.tab();
|
|
|
|
expect(putMock).toHaveBeenCalledWith(
|
|
`/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
|
|
expect.objectContaining({
|
|
data: {
|
|
name: 'New Name',
|
|
},
|
|
})
|
|
);
|
|
});
|
|
|
|
it('disable and enables key', async function () {
|
|
await userEvent.click(await screen.findByRole('checkbox', {name: 'Enabled'}));
|
|
|
|
expect(putMock).toHaveBeenCalledWith(
|
|
`/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
|
|
expect.objectContaining({
|
|
data: {isActive: false},
|
|
})
|
|
);
|
|
|
|
await userEvent.click(await screen.findByRole('checkbox', {name: 'Enabled'}));
|
|
|
|
expect(putMock).toHaveBeenCalledWith(
|
|
`/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
|
|
expect.objectContaining({
|
|
data: {isActive: false},
|
|
})
|
|
);
|
|
});
|
|
|
|
it('revokes a key', async function () {
|
|
await userEvent.click(await screen.findByRole('button', {name: 'Revoke Key'}));
|
|
renderGlobalModal();
|
|
await userEvent.click(await screen.findByTestId('confirm-button'));
|
|
expect(deleteMock).toHaveBeenCalled();
|
|
});
|
|
});
|