groupEventDetailsContainer.spec.jsx 3.2 KB

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