index.spec.jsx 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. import * as PropTypes from 'prop-types';
  2. import {mountWithTheme} from 'sentry-test/enzyme';
  3. import {mountGlobalModal} from 'sentry-test/modal';
  4. import ProjectKeyDetails from 'sentry/views/settings/project/projectKeys/details';
  5. describe('ProjectKeyDetails', function () {
  6. let org;
  7. let project;
  8. let wrapper;
  9. let deleteMock;
  10. let statsMock;
  11. let putMock;
  12. let projectKeys;
  13. beforeEach(function () {
  14. org = TestStubs.Organization();
  15. project = TestStubs.Project();
  16. projectKeys = TestStubs.ProjectKeys();
  17. MockApiClient.clearMockResponses();
  18. MockApiClient.addMockResponse({
  19. url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
  20. method: 'GET',
  21. body: projectKeys[0],
  22. });
  23. putMock = MockApiClient.addMockResponse({
  24. url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
  25. method: 'PUT',
  26. });
  27. statsMock = MockApiClient.addMockResponse({
  28. url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/stats/`,
  29. method: 'GET',
  30. body: [
  31. {filtered: 0, accepted: 0, total: 0, ts: 1517270400, dropped: 0},
  32. {filtered: 0, accepted: 0, total: 0, ts: 1517356800, dropped: 0},
  33. {filtered: 0, accepted: 0, total: 0, ts: 1517443200, dropped: 0},
  34. {filtered: 0, accepted: 0, total: 0, ts: 1517529600, dropped: 0},
  35. {filtered: 0, accepted: 0, total: 0, ts: 1517616000, dropped: 0},
  36. {filtered: 0, accepted: 0, total: 0, ts: 1517702400, dropped: 0},
  37. {filtered: 0, accepted: 0, total: 0, ts: 1517788800, dropped: 0},
  38. {filtered: 0, accepted: 0, total: 0, ts: 1517875200, dropped: 0},
  39. {filtered: 0, accepted: 0, total: 0, ts: 1517961600, dropped: 0},
  40. {filtered: 0, accepted: 0, total: 0, ts: 1518048000, dropped: 0},
  41. {filtered: 0, accepted: 0, total: 0, ts: 1518134400, dropped: 0},
  42. {filtered: 0, accepted: 0, total: 0, ts: 1518220800, dropped: 0},
  43. {filtered: 0, accepted: 0, total: 0, ts: 1518307200, dropped: 0},
  44. {filtered: 0, accepted: 0, total: 0, ts: 1518393600, dropped: 0},
  45. {filtered: 0, accepted: 0, total: 0, ts: 1518480000, dropped: 0},
  46. {filtered: 0, accepted: 0, total: 0, ts: 1518566400, dropped: 0},
  47. {filtered: 0, accepted: 0, total: 0, ts: 1518652800, dropped: 0},
  48. {filtered: 0, accepted: 0, total: 0, ts: 1518739200, dropped: 0},
  49. {filtered: 0, accepted: 0, total: 0, ts: 1518825600, dropped: 0},
  50. {filtered: 0, accepted: 0, total: 0, ts: 1518912000, dropped: 0},
  51. {filtered: 0, accepted: 0, total: 0, ts: 1518998400, dropped: 0},
  52. {filtered: 0, accepted: 0, total: 0, ts: 1519084800, dropped: 0},
  53. {filtered: 0, accepted: 0, total: 0, ts: 1519171200, dropped: 0},
  54. {filtered: 0, accepted: 0, total: 0, ts: 1519257600, dropped: 0},
  55. {filtered: 0, accepted: 0, total: 0, ts: 1519344000, dropped: 0},
  56. {filtered: 0, accepted: 0, total: 0, ts: 1519430400, dropped: 0},
  57. {filtered: 0, accepted: 0, total: 0, ts: 1519516800, dropped: 0},
  58. {filtered: 0, accepted: 0, total: 0, ts: 1519603200, dropped: 0},
  59. {filtered: 0, accepted: 0, total: 0, ts: 1519689600, dropped: 0},
  60. {filtered: 0, accepted: 5, total: 12, ts: 1519776000, dropped: 7},
  61. {filtered: 0, accepted: 14, total: 14, ts: 1519862400, dropped: 0},
  62. ],
  63. });
  64. deleteMock = MockApiClient.addMockResponse({
  65. url: `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
  66. method: 'DELETE',
  67. });
  68. wrapper = mountWithTheme(
  69. <ProjectKeyDetails
  70. routes={[]}
  71. params={{
  72. keyId: projectKeys[0].id,
  73. orgId: org.slug,
  74. projectId: project.slug,
  75. }}
  76. />,
  77. {
  78. context: {
  79. project: TestStubs.Project(),
  80. },
  81. childContextTypes: {
  82. project: PropTypes.object,
  83. },
  84. }
  85. );
  86. });
  87. it('has stats box', function () {
  88. expect(wrapper.find('KeyStats')).toHaveLength(1);
  89. expect(statsMock).toHaveBeenCalled();
  90. });
  91. it('changes name', function () {
  92. wrapper
  93. .find('input[name="name"]')
  94. .simulate('change', {target: {value: 'New Name'}})
  95. .simulate('blur');
  96. expect(putMock).toHaveBeenCalledWith(
  97. `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
  98. expect.objectContaining({
  99. data: {
  100. name: 'New Name',
  101. },
  102. })
  103. );
  104. });
  105. it('disable and enables key', function () {
  106. wrapper.find('Switch[name="isActive"]').simulate('click');
  107. expect(putMock).toHaveBeenCalledWith(
  108. `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
  109. expect.objectContaining({
  110. data: {isActive: false},
  111. })
  112. );
  113. wrapper.find('Switch[name="isActive"]').simulate('click');
  114. expect(putMock).toHaveBeenCalledWith(
  115. `/projects/${org.slug}/${project.slug}/keys/${projectKeys[0].id}/`,
  116. expect.objectContaining({
  117. data: {isActive: false},
  118. })
  119. );
  120. });
  121. it('revokes a key', async function () {
  122. wrapper
  123. .find('Button[priority="danger"]')
  124. .simulate('click', {preventDefault: () => {}});
  125. const modal = await mountGlobalModal();
  126. modal.find('Button[priority="danger"]').simulate('click');
  127. expect(deleteMock).toHaveBeenCalled();
  128. });
  129. });