projectAlertRuleDetails.spec.jsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import React from 'react';
  2. import {mount} from 'enzyme';
  3. import {browserHistory} from 'react-router';
  4. import {Client} from 'app/api';
  5. import ProjectAlertRuleDetails from 'app/views/projectAlertRuleDetails';
  6. jest.mock('jquery');
  7. describe('ProjectAlertRuleDetails', function() {
  8. let sandbox, replaceState;
  9. beforeEach(function() {
  10. sandbox = sinon.sandbox.create();
  11. Client.clearMockResponses();
  12. MockApiClient.addMockResponse({
  13. url: '/projects/org-slug/project-slug/rules/configuration/',
  14. method: 'GET',
  15. body: TestStubs.ProjectAlertRuleConfiguration(),
  16. });
  17. Client.addMockResponse({
  18. url: '/projects/org-slug/project-slug/rules/1/',
  19. method: 'GET',
  20. body: TestStubs.ProjectAlertRule(),
  21. });
  22. replaceState = sandbox.stub(browserHistory, 'replace');
  23. });
  24. afterEach(function() {
  25. sandbox.restore();
  26. });
  27. describe('New alert rule', function() {
  28. let wrapper, mock;
  29. beforeEach(function() {
  30. mock = Client.addMockResponse({
  31. url: '/projects/org-slug/project-slug/rules/',
  32. method: 'POST',
  33. body: TestStubs.ProjectAlertRule(),
  34. });
  35. wrapper = mount(
  36. <ProjectAlertRuleDetails
  37. params={{orgId: 'org-slug', projectId: 'project-slug'}}
  38. />,
  39. {
  40. context: {
  41. project: TestStubs.Project(),
  42. organization: TestStubs.Organization(),
  43. },
  44. }
  45. );
  46. });
  47. it('renders', function() {
  48. expect(wrapper).toMatchSnapshot();
  49. });
  50. it('sets defaults', function() {
  51. let selects = wrapper.find('Select2Field');
  52. expect(selects.first().props().value).toBe('all');
  53. expect(selects.last().props().value).toBe(30);
  54. });
  55. // TODO: Rewrite the rule editor to not use ReactDOM.findDOMNode so this can be tested
  56. xdescribe('update', function() {
  57. let name;
  58. beforeEach(function() {
  59. name = wrapper.find('input').first();
  60. name.value = 'My rule';
  61. name.simulate('change');
  62. wrapper.find('form').simulate('submit');
  63. });
  64. it('sends create request on save', function() {
  65. expect(mock).toHaveBeenCalled();
  66. expect(mock.mock.calls[0][1]).toMatchObject({
  67. data: {
  68. name: 'My rule',
  69. },
  70. });
  71. });
  72. it('updates URL', function() {
  73. let url = '/org-slug/project-slug/settings/alerts/rules/1/';
  74. expect(replaceState.calledWith(url)).toBe(true);
  75. });
  76. });
  77. });
  78. describe('Edit alert rule', function() {
  79. let wrapper, mock;
  80. beforeEach(function() {
  81. mock = Client.addMockResponse({
  82. url: '/projects/org-slug/project-slug/rules/',
  83. method: 'PUT',
  84. body: TestStubs.ProjectAlertRule(),
  85. });
  86. wrapper = mount(
  87. <ProjectAlertRuleDetails
  88. params={{orgId: 'org-slug', projectId: 'project-slug'}}
  89. />,
  90. {
  91. context: {
  92. project: TestStubs.Project(),
  93. organization: TestStubs.Organization(),
  94. },
  95. }
  96. );
  97. });
  98. it('renders', function() {
  99. expect(wrapper).toMatchSnapshot();
  100. });
  101. // TODO: Rewrite the rule editor to not use ReactDOM.findDOMNode so this can be tested
  102. xit('updates', function() {
  103. let name = wrapper.find('input').first();
  104. name.value = 'My rule';
  105. name.simulate('change');
  106. wrapper.find('form').simulate('submit');
  107. expect(mock).toHaveBeenCalled();
  108. });
  109. });
  110. });