useCustomMeasurements.spec.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import {initializeOrg} from 'sentry-test/initializeOrg';
  2. import {render, screen} from 'sentry-test/reactTestingLibrary';
  3. import {CustomMeasurementsProvider} from 'sentry/utils/customMeasurements/customMeasurementsProvider';
  4. import useCustomMeasurements from 'sentry/utils/useCustomMeasurements';
  5. function TestComponent({other}: {other: string}) {
  6. const {customMeasurements} = useCustomMeasurements();
  7. return (
  8. <div>
  9. <span>{other}</span>
  10. {customMeasurements &&
  11. Object.keys(customMeasurements).map(customMeasurement => (
  12. <em key={customMeasurement}>{customMeasurement}</em>
  13. ))}
  14. </div>
  15. );
  16. }
  17. function mockMeasurementsMeta() {
  18. return MockApiClient.addMockResponse({
  19. url: `/organizations/org-slug/measurements-meta/`,
  20. body: {
  21. 'measurements.custom.measurement': {
  22. functions: ['p99'],
  23. },
  24. 'measurements.another.custom.measurement': {
  25. functions: ['p99'],
  26. },
  27. },
  28. });
  29. }
  30. describe('useCustomMeasurements', function () {
  31. it('provides customMeasurements from the custom measurements context', async function () {
  32. const {organization} = initializeOrg({
  33. organization: {features: ['dashboards-mep']},
  34. projects: [],
  35. router: {},
  36. });
  37. const measurementsMetaMock = mockMeasurementsMeta();
  38. render(
  39. <CustomMeasurementsProvider organization={organization}>
  40. <TestComponent other="value" />
  41. </CustomMeasurementsProvider>
  42. );
  43. // Should forward prop
  44. expect(screen.getByText('value')).toBeInTheDocument();
  45. expect(measurementsMetaMock).toHaveBeenCalledTimes(1);
  46. // Renders custom measurements
  47. expect(
  48. await screen.findByText('measurements.custom.measurement')
  49. ).toBeInTheDocument();
  50. expect(
  51. screen.getByText('measurements.another.custom.measurement')
  52. ).toBeInTheDocument();
  53. });
  54. });