utils.spec.tsx 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. import {LocationFixture} from 'sentry-fixture/locationFixture';
  2. import {OrganizationFixture} from 'sentry-fixture/organization';
  3. import {UserFixture} from 'sentry-fixture/user';
  4. import {act, renderHook} from 'sentry-test/reactTestingLibrary';
  5. import ConfigStore from 'sentry/stores/configStore';
  6. import {useLocation} from 'sentry/utils/useLocation';
  7. import useOrganization from 'sentry/utils/useOrganization';
  8. import {useHasStreamlinedUI} from 'sentry/views/issueDetails/utils';
  9. jest.mock('sentry/utils/useLocation');
  10. jest.mock('sentry/utils/useOrganization');
  11. describe('useHasStreamlinedUI', () => {
  12. it("respects the 'streamline' query param", () => {
  13. jest.mocked(useOrganization).mockReturnValue(OrganizationFixture());
  14. const location = LocationFixture({query: {streamline: '1'}});
  15. jest.mocked(useLocation).mockReturnValue(location);
  16. const {result: queryParamEnabled} = renderHook(useHasStreamlinedUI);
  17. expect(queryParamEnabled.current).toBe(true);
  18. location.query.streamline = '0';
  19. jest.mocked(useLocation).mockReturnValue(location);
  20. const {result: queryParamDisabled} = renderHook(useHasStreamlinedUI);
  21. expect(queryParamDisabled.current).toBe(false);
  22. });
  23. it('respects the user preferences', () => {
  24. ConfigStore.init();
  25. const user = UserFixture();
  26. user.options.prefersIssueDetailsStreamlinedUI = true;
  27. act(() => ConfigStore.set('user', user));
  28. jest.mocked(useLocation).mockReturnValue(LocationFixture());
  29. const {result: userPrefersStreamline} = renderHook(useHasStreamlinedUI);
  30. expect(userPrefersStreamline.current).toBe(true);
  31. user.options.prefersIssueDetailsStreamlinedUI = false;
  32. act(() => ConfigStore.set('user', user));
  33. const {result: userPrefersLegacy} = renderHook(useHasStreamlinedUI);
  34. expect(userPrefersLegacy.current).toBe(false);
  35. });
  36. it('values query param above user preferences and organization flags', () => {
  37. const enforceOrg = OrganizationFixture({
  38. features: ['issue-details-streamline-enforce'],
  39. });
  40. jest.mocked(useOrganization).mockReturnValue(enforceOrg);
  41. ConfigStore.init();
  42. const user = UserFixture();
  43. user.options.prefersIssueDetailsStreamlinedUI = false;
  44. act(() => ConfigStore.set('user', user));
  45. const location = LocationFixture({query: {streamline: '1'}});
  46. jest.mocked(useLocation).mockReturnValue(location);
  47. const {result: prefersLegacyButQueryParamEnabled} = renderHook(useHasStreamlinedUI);
  48. expect(prefersLegacyButQueryParamEnabled.current).toBe(true);
  49. user.options.prefersIssueDetailsStreamlinedUI = true;
  50. act(() => ConfigStore.set('user', user));
  51. location.query.streamline = '0';
  52. const {result: prefersStreamlineButQueryParamDisabled} =
  53. renderHook(useHasStreamlinedUI);
  54. expect(prefersStreamlineButQueryParamDisabled.current).toBe(false);
  55. });
  56. it('ignores preferences if enforce flag is set', () => {
  57. const enforceOrg = OrganizationFixture({
  58. features: ['issue-details-streamline-enforce'],
  59. });
  60. jest.mocked(useOrganization).mockReturnValue(enforceOrg);
  61. ConfigStore.init();
  62. const user = UserFixture();
  63. user.options.prefersIssueDetailsStreamlinedUI = false;
  64. act(() => ConfigStore.set('user', user));
  65. jest.mocked(useLocation).mockReturnValue(LocationFixture());
  66. const {result} = renderHook(useHasStreamlinedUI);
  67. expect(result.current).toBe(true);
  68. });
  69. it('ignores preferences if organization option is set', () => {
  70. jest.mocked(useLocation).mockReturnValue(LocationFixture());
  71. const streamlineOrg = OrganizationFixture({streamlineOnly: true});
  72. jest.mocked(useOrganization).mockReturnValue(streamlineOrg);
  73. ConfigStore.init();
  74. const user = UserFixture();
  75. user.options.prefersIssueDetailsStreamlinedUI = false;
  76. act(() => ConfigStore.set('user', user));
  77. const {result: streamlineResult} = renderHook(useHasStreamlinedUI);
  78. expect(streamlineResult.current).toBe(true);
  79. const legacyOrg = OrganizationFixture({streamlineOnly: false});
  80. jest.mocked(useOrganization).mockReturnValue(legacyOrg);
  81. user.options.prefersIssueDetailsStreamlinedUI = true;
  82. act(() => ConfigStore.set('user', user));
  83. const {result: legacyResult} = renderHook(useHasStreamlinedUI);
  84. expect(legacyResult.current).toBe(false);
  85. });
  86. it('ignores the option if unset', () => {
  87. jest.mocked(useLocation).mockReturnValue(LocationFixture());
  88. jest
  89. .mocked(useOrganization)
  90. .mockReturnValue(OrganizationFixture({streamlineOnly: null}));
  91. ConfigStore.init();
  92. const user = UserFixture();
  93. user.options.prefersIssueDetailsStreamlinedUI = true;
  94. act(() => ConfigStore.set('user', user));
  95. const {result: result} = renderHook(useHasStreamlinedUI);
  96. expect(result.current).toBe(true);
  97. });
  98. });