usePreviewData.spec.tsx 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import {OrganizationFixture} from 'sentry-fixture/organization';
  2. import {BillingConfigFixture} from 'getsentry-test/fixtures/billingConfig';
  3. import {PlanDetailsLookupFixture} from 'getsentry-test/fixtures/planDetailsLookup';
  4. import {SubscriptionFixture} from 'getsentry-test/fixtures/subscription';
  5. import {makeTestQueryClient} from 'sentry-test/queryClient';
  6. import {renderHook, waitFor} from 'sentry-test/reactTestingLibrary';
  7. import {QueryClientProvider} from 'sentry/utils/queryClient';
  8. import {PreviewDataFixture} from 'getsentry/__fixtures__/previewData';
  9. import {PlanTier} from 'getsentry/types';
  10. import type {Reservations} from './types';
  11. import usePreviewData from './usePreviewData';
  12. const mockReservations: Reservations = {
  13. reservedErrors: 50000,
  14. reservedReplays: 500,
  15. reservedAttachments: 1,
  16. reservedMonitorSeats: 1,
  17. reservedTransactions: 100000,
  18. reservedUptime: 1,
  19. };
  20. const mockPreview = PreviewDataFixture({});
  21. describe('usePreviewData', () => {
  22. const organization = OrganizationFixture({
  23. access: ['org:billing'],
  24. });
  25. it('should fetch a preview of a new AM2 plan, based on the current reservations', async () => {
  26. const teamPlan = PlanDetailsLookupFixture('am2_team');
  27. const subscription = SubscriptionFixture({
  28. organization,
  29. plan: 'am2_team',
  30. });
  31. const mockAM2BillingConfig = BillingConfigFixture(PlanTier.AM2);
  32. MockApiClient.addMockResponse({
  33. url: `/customers/${organization.slug}/billing-config/`,
  34. method: 'GET',
  35. body: mockAM2BillingConfig,
  36. });
  37. const previewRequest = MockApiClient.addMockResponse({
  38. url: `/customers/${organization.slug}/subscription/preview/`,
  39. method: 'GET',
  40. body: mockPreview,
  41. });
  42. const {result} = renderHook(usePreviewData, {
  43. initialProps: {
  44. organization,
  45. subscription,
  46. },
  47. wrapper: ({children}) => (
  48. <QueryClientProvider client={makeTestQueryClient()}>
  49. {children}
  50. </QueryClientProvider>
  51. ),
  52. });
  53. await waitFor(() =>
  54. expect(result.current).toStrictEqual({
  55. loading: false,
  56. error: false,
  57. plan: teamPlan,
  58. reservations: mockReservations,
  59. previewData: mockPreview,
  60. })
  61. );
  62. expect(previewRequest).toHaveBeenCalledTimes(1);
  63. });
  64. });