index.spec.tsx 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import {OrganizationFixture} from 'sentry-fixture/organization';
  2. import {ProjectFixture} from 'sentry-fixture/project';
  3. import {ProjectKeysFixture} from 'sentry-fixture/projectKeys';
  4. import {initializeOrg} from 'sentry-test/initializeOrg';
  5. import {
  6. render,
  7. renderGlobalModal,
  8. screen,
  9. userEvent,
  10. } from 'sentry-test/reactTestingLibrary';
  11. import type {Organization} from 'sentry/types/organization';
  12. import type {Project, ProjectKey} from 'sentry/types/project';
  13. import ProjectKeyDetails from 'sentry/views/settings/project/projectKeys/details';
  14. describe('ProjectKeyDetails', function () {
  15. const {routerProps} = initializeOrg();
  16. let org: Organization;
  17. let project: Project;
  18. let deleteMock: jest.Mock;
  19. let statsMock: jest.Mock;
  20. let putMock: jest.Mock;
  21. let projectKeys: ProjectKey[];
  22. function renderProjectKeyDetails() {
  23. render(
  24. <ProjectKeyDetails
  25. {...routerProps}
  26. organization={org}
  27. project={project}
  28. params={{
  29. keyId: projectKeys[0]!.id,
  30. projectId: project.slug,
  31. }}
  32. />
  33. );
  34. }
  35. beforeEach(function () {
  36. org = OrganizationFixture();
  37. project = ProjectFixture();
  38. projectKeys = ProjectKeysFixture();
  39. MockApiClient.clearMockResponses();
  40. MockApiClient.addMockResponse({
  41. url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0]!.id}/`,
  42. method: 'GET',
  43. body: projectKeys[0],
  44. });
  45. putMock = MockApiClient.addMockResponse({
  46. url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0]!.id}/`,
  47. method: 'PUT',
  48. });
  49. statsMock = MockApiClient.addMockResponse({
  50. url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0]!.id}/stats/`,
  51. method: 'GET',
  52. body: [
  53. {filtered: 0, accepted: 0, total: 0, ts: 1517270400, dropped: 0},
  54. {filtered: 0, accepted: 0, total: 0, ts: 1517356800, dropped: 0},
  55. {filtered: 0, accepted: 0, total: 0, ts: 1517443200, dropped: 0},
  56. {filtered: 0, accepted: 0, total: 0, ts: 1517529600, dropped: 0},
  57. {filtered: 0, accepted: 0, total: 0, ts: 1517616000, dropped: 0},
  58. {filtered: 0, accepted: 0, total: 0, ts: 1517702400, dropped: 0},
  59. {filtered: 0, accepted: 0, total: 0, ts: 1517788800, dropped: 0},
  60. {filtered: 0, accepted: 0, total: 0, ts: 1517875200, dropped: 0},
  61. {filtered: 0, accepted: 0, total: 0, ts: 1517961600, dropped: 0},
  62. {filtered: 0, accepted: 0, total: 0, ts: 1518048000, dropped: 0},
  63. {filtered: 0, accepted: 0, total: 0, ts: 1518134400, dropped: 0},
  64. {filtered: 0, accepted: 0, total: 0, ts: 1518220800, dropped: 0},
  65. {filtered: 0, accepted: 0, total: 0, ts: 1518307200, dropped: 0},
  66. {filtered: 0, accepted: 0, total: 0, ts: 1518393600, dropped: 0},
  67. {filtered: 0, accepted: 0, total: 0, ts: 1518480000, dropped: 0},
  68. {filtered: 0, accepted: 0, total: 0, ts: 1518566400, dropped: 0},
  69. {filtered: 0, accepted: 0, total: 0, ts: 1518652800, dropped: 0},
  70. {filtered: 0, accepted: 0, total: 0, ts: 1518739200, dropped: 0},
  71. {filtered: 0, accepted: 0, total: 0, ts: 1518825600, dropped: 0},
  72. {filtered: 0, accepted: 0, total: 0, ts: 1518912000, dropped: 0},
  73. {filtered: 0, accepted: 0, total: 0, ts: 1518998400, dropped: 0},
  74. {filtered: 0, accepted: 0, total: 0, ts: 1519084800, dropped: 0},
  75. {filtered: 0, accepted: 0, total: 0, ts: 1519171200, dropped: 0},
  76. {filtered: 0, accepted: 0, total: 0, ts: 1519257600, dropped: 0},
  77. {filtered: 0, accepted: 0, total: 0, ts: 1519344000, dropped: 0},
  78. {filtered: 0, accepted: 0, total: 0, ts: 1519430400, dropped: 0},
  79. {filtered: 0, accepted: 0, total: 0, ts: 1519516800, dropped: 0},
  80. {filtered: 0, accepted: 0, total: 0, ts: 1519603200, dropped: 0},
  81. {filtered: 0, accepted: 0, total: 0, ts: 1519689600, dropped: 0},
  82. {filtered: 0, accepted: 5, total: 12, ts: 1519776000, dropped: 7},
  83. {filtered: 0, accepted: 14, total: 14, ts: 1519862400, dropped: 0},
  84. ],
  85. });
  86. deleteMock = MockApiClient.addMockResponse({
  87. url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0]!.id}/`,
  88. method: 'DELETE',
  89. });
  90. });
  91. it('has stats box', async function () {
  92. renderProjectKeyDetails();
  93. expect(await screen.findByText('Key Details')).toBeInTheDocument();
  94. expect(statsMock).toHaveBeenCalled();
  95. });
  96. it('changes name', async function () {
  97. renderProjectKeyDetails();
  98. await userEvent.clear(await screen.findByRole('textbox', {name: 'Name'}));
  99. await userEvent.type(await screen.findByRole('textbox', {name: 'Name'}), 'New Name');
  100. await userEvent.tab();
  101. expect(putMock).toHaveBeenCalledWith(
  102. `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0]!.id}/`,
  103. expect.objectContaining({
  104. data: {
  105. name: 'New Name',
  106. },
  107. })
  108. );
  109. });
  110. it('disable and enables key', async function () {
  111. renderProjectKeyDetails();
  112. await userEvent.click(await screen.findByRole('checkbox', {name: 'Enabled'}));
  113. expect(putMock).toHaveBeenCalledWith(
  114. `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0]!.id}/`,
  115. expect.objectContaining({
  116. data: {isActive: false},
  117. })
  118. );
  119. await userEvent.click(await screen.findByRole('checkbox', {name: 'Enabled'}));
  120. expect(putMock).toHaveBeenCalledWith(
  121. `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0]!.id}/`,
  122. expect.objectContaining({
  123. data: {isActive: false},
  124. })
  125. );
  126. });
  127. it('revokes a key', async function () {
  128. renderProjectKeyDetails();
  129. await userEvent.click(await screen.findByRole('button', {name: 'Revoke Key'}));
  130. renderGlobalModal();
  131. await userEvent.click(await screen.findByTestId('confirm-button'));
  132. expect(deleteMock).toHaveBeenCalled();
  133. });
  134. });