useProjectSdkNeedsUpdate.spec.tsx 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. import type {ReactNode} from 'react';
  2. import {OrganizationFixture} from 'sentry-fixture/organization';
  3. import {ProjectFixture} from 'sentry-fixture/project';
  4. import {makeTestQueryClient} from 'sentry-test/queryClient';
  5. import {reactHooks} from 'sentry-test/reactTestingLibrary';
  6. import {QueryClientProvider} from 'sentry/utils/queryClient';
  7. import useProjectSdkNeedsUpdate from 'sentry/utils/useProjectSdkNeedsUpdate';
  8. const MOCK_ORG = OrganizationFixture();
  9. const MOCK_PROJECT = ProjectFixture();
  10. function wrapper({children}: {children?: ReactNode}) {
  11. return (
  12. <QueryClientProvider client={makeTestQueryClient()}>{children}</QueryClientProvider>
  13. );
  14. }
  15. function mockCurrentVersion(
  16. mockUpdates: Array<{
  17. projectId: string;
  18. sdkVersion: string;
  19. }>
  20. ) {
  21. MockApiClient.addMockResponse({
  22. url: `/organizations/${MOCK_ORG.slug}/sdk-updates/`,
  23. method: 'GET',
  24. body: mockUpdates.map(({projectId, sdkVersion}) => ({
  25. projectId,
  26. sdkName: 'javascript',
  27. sdkVersion,
  28. suggestions: [],
  29. })),
  30. });
  31. }
  32. describe('useProjectSdkNeedsUpdate', () => {
  33. it('should not need an update if the sdk version is above the min version', async () => {
  34. mockCurrentVersion([
  35. {
  36. projectId: MOCK_PROJECT.id,
  37. sdkVersion: '3.0.0',
  38. },
  39. ]);
  40. const {result, waitFor} = reactHooks.renderHook(useProjectSdkNeedsUpdate, {
  41. wrapper,
  42. initialProps: {
  43. minVersion: '1.0.0',
  44. organization: MOCK_ORG,
  45. projectId: [MOCK_PROJECT.id],
  46. },
  47. });
  48. await waitFor(() => {
  49. expect(result.current.isError).toBeFalsy();
  50. expect(result.current.isFetching).toBeFalsy();
  51. expect(result.current.needsUpdate).toBeFalsy();
  52. });
  53. });
  54. it('should be updated it the sdk version is too low', async () => {
  55. mockCurrentVersion([
  56. {
  57. projectId: MOCK_PROJECT.id,
  58. sdkVersion: '3.0.0',
  59. },
  60. ]);
  61. const {result, waitFor} = reactHooks.renderHook(useProjectSdkNeedsUpdate, {
  62. wrapper,
  63. initialProps: {
  64. minVersion: '8.0.0',
  65. organization: MOCK_ORG,
  66. projectId: [MOCK_PROJECT.id],
  67. },
  68. });
  69. await waitFor(() => {
  70. expect(result.current.isError).toBeFalsy();
  71. expect(result.current.isFetching).toBeFalsy();
  72. expect(result.current.needsUpdate).toBeTruthy();
  73. });
  74. });
  75. it('should return needsUpdate if multiple projects', async () => {
  76. mockCurrentVersion([
  77. {
  78. projectId: '1',
  79. sdkVersion: '3.0.0',
  80. },
  81. {
  82. projectId: '2',
  83. sdkVersion: '3.0.0',
  84. },
  85. ]);
  86. const {result, waitFor} = reactHooks.renderHook(useProjectSdkNeedsUpdate, {
  87. wrapper,
  88. initialProps: {
  89. minVersion: '8.0.0',
  90. organization: MOCK_ORG,
  91. projectId: ['1', '2'],
  92. },
  93. });
  94. await waitFor(() => {
  95. expect(result.current.isError).toBeFalsy();
  96. expect(result.current.isFetching).toBeFalsy();
  97. expect(result.current.needsUpdate).toBeTruthy();
  98. });
  99. });
  100. it('should not return needsUpdate if some projects meet minSdk', async () => {
  101. mockCurrentVersion([
  102. {
  103. projectId: '1',
  104. sdkVersion: '8.0.0',
  105. },
  106. {
  107. projectId: '2',
  108. sdkVersion: '3.0.0',
  109. },
  110. ]);
  111. const {result, waitFor} = reactHooks.renderHook(useProjectSdkNeedsUpdate, {
  112. wrapper,
  113. initialProps: {
  114. minVersion: '8.0.0',
  115. organization: MOCK_ORG,
  116. projectId: ['1', '2'],
  117. },
  118. });
  119. await waitFor(() => {
  120. expect(result.current.isError).toBeFalsy();
  121. expect(result.current.isFetching).toBeFalsy();
  122. expect(result.current.needsUpdate).toBeFalsy();
  123. });
  124. });
  125. });