groupEventDetailsContainer.spec.jsx 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import React from 'react';
  2. import {mount} from 'sentry-test/enzyme';
  3. import OrganizationEnvironmentsStore from 'app/stores/organizationEnvironmentsStore';
  4. import GroupEventDetailsContainer from 'app/views/organizationGroupDetails/groupEventDetails';
  5. jest.mock(
  6. 'app/views/organizationGroupDetails/groupEventDetails/groupEventDetails',
  7. () => () => <div>GroupEventDetails</div>
  8. );
  9. describe('groupEventDetailsContainer', () => {
  10. const org = TestStubs.Organization();
  11. beforeEach(() => {
  12. OrganizationEnvironmentsStore.init();
  13. });
  14. it('fetches environments', async function() {
  15. const environmentsCall = MockApiClient.addMockResponse({
  16. url: `/organizations/${org.slug}/environments/`,
  17. body: TestStubs.Environments(),
  18. });
  19. const wrapper = mount(<GroupEventDetailsContainer organization={org} />);
  20. // should be in loading state
  21. expect(wrapper.find('LoadingIndicator').exists()).toBe(true);
  22. await tick();
  23. await tick();
  24. wrapper.update();
  25. // should be loaded
  26. expect(wrapper.find('LoadingIndicator').exists()).toBe(false);
  27. expect(wrapper.text('GroupEventDetails')).toBe('GroupEventDetails');
  28. // remounting will not rerender
  29. const wrapper2 = mount(<GroupEventDetailsContainer organization={org} />);
  30. expect(wrapper2.find('LoadingIndicator').exists()).toBe(false);
  31. expect(wrapper.text('GroupEventDetails')).toBe('GroupEventDetails');
  32. expect(environmentsCall).toHaveBeenCalledTimes(1);
  33. });
  34. it('displays an error on error', async function() {
  35. const environmentsCall = MockApiClient.addMockResponse({
  36. url: `/organizations/${org.slug}/environments/`,
  37. statusCode: 400,
  38. });
  39. const wrapper = mount(<GroupEventDetailsContainer organization={org} />);
  40. expect(wrapper.find('LoadingIndicator').exists()).toBe(true);
  41. await tick();
  42. await tick();
  43. wrapper.update();
  44. expect(wrapper.find('LoadingIndicator').exists()).toBe(false);
  45. expect(wrapper.find('LoadingError').exists()).toBe(true);
  46. expect(environmentsCall).toHaveBeenCalledTimes(1);
  47. });
  48. it('displays an error on falsey environment', async function() {
  49. const environmentsCall = MockApiClient.addMockResponse({
  50. url: `/organizations/${org.slug}/environments/`,
  51. body: null,
  52. });
  53. const wrapper = mount(<GroupEventDetailsContainer organization={org} />);
  54. expect(wrapper.find('LoadingIndicator').exists()).toBe(true);
  55. await tick();
  56. await tick();
  57. wrapper.update();
  58. expect(wrapper.find('LoadingIndicator').exists()).toBe(false);
  59. expect(wrapper.find('LoadingError').exists()).toBe(true);
  60. expect(environmentsCall).toHaveBeenCalledTimes(1);
  61. });
  62. it('unsubscribes on unmount', async function() {
  63. const unsubscribeMock = jest.fn();
  64. jest
  65. .spyOn(OrganizationEnvironmentsStore, 'listen')
  66. .mockImplementation(() => unsubscribeMock);
  67. MockApiClient.addMockResponse({
  68. url: `/organizations/${org.slug}/environments/`,
  69. body: TestStubs.Environments(),
  70. });
  71. const wrapper = mount(<GroupEventDetailsContainer organization={org} />);
  72. expect(wrapper.find('LoadingIndicator').exists()).toBe(true);
  73. wrapper.unmount();
  74. expect(unsubscribeMock).toHaveBeenCalled();
  75. });
  76. });