projectKeyDetails.spec.jsx 5.4 KB

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