releasesProvider.spec.tsx 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import {Release} from 'fixtures/js-stubs/release';
  2. import {initializeOrg} from 'sentry-test/initializeOrg';
  3. import {render, screen} from 'sentry-test/reactTestingLibrary';
  4. import {PageFilters} from 'sentry/types';
  5. import {ReleasesProvider, useReleases} from 'sentry/utils/releases/releasesProvider';
  6. function TestComponent({other}: {other: string}) {
  7. const {releases, loading} = useReleases();
  8. return (
  9. <div>
  10. <span>{other}</span>
  11. {releases &&
  12. releases.map(release => <em key={release.version}>{release.version}</em>)}
  13. {`loading: ${loading}`}
  14. </div>
  15. );
  16. }
  17. describe('useReleases', function () {
  18. const {organization} = initializeOrg();
  19. const selection = {
  20. projects: [1],
  21. environments: ['prod'],
  22. datetime: {
  23. period: '14d',
  24. start: null,
  25. end: null,
  26. utc: false,
  27. },
  28. } as PageFilters;
  29. it("fetches releases and save values in the context's state", async function () {
  30. const mockReleases = MockApiClient.addMockResponse({
  31. url: '/organizations/org-slug/releases/',
  32. body: [
  33. Release({
  34. shortVersion: 'sentry-android-shop@1.2.0',
  35. version: 'sentry-android-shop@1.2.0',
  36. }),
  37. Release({
  38. shortVersion: 'sentry-android-shop@1.3.0',
  39. version: 'sentry-android-shop@1.3.0',
  40. }),
  41. Release({
  42. shortVersion: 'sentry-android-shop@1.4.0',
  43. version: 'sentry-android-shop@1.4.0',
  44. }),
  45. ],
  46. });
  47. render(
  48. <ReleasesProvider organization={organization} selection={selection}>
  49. <TestComponent other="value" />
  50. </ReleasesProvider>
  51. );
  52. // Should forward prop
  53. expect(screen.getByText('value')).toBeInTheDocument();
  54. expect(mockReleases).toHaveBeenCalledTimes(1);
  55. expect(await screen.findByText('loading: false')).toBeInTheDocument();
  56. expect(screen.getByText('sentry-android-shop@1.2.0')).toBeInTheDocument();
  57. expect(screen.getByText('sentry-android-shop@1.3.0')).toBeInTheDocument();
  58. });
  59. });