withMetricsMeta.spec.tsx 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import {act, render, screen} from 'sentry-test/reactTestingLibrary';
  2. import MetricsMetaStore from 'sentry/stores/metricsMetaStore';
  3. import withMetricsMeta, {InjectedMetricsMetaProps} from 'sentry/utils/withMetricsMeta';
  4. interface MyComponentProps extends InjectedMetricsMetaProps {
  5. other: string;
  6. }
  7. describe('withMetricsMeta HoC', function () {
  8. beforeEach(() => {
  9. MetricsMetaStore.reset();
  10. });
  11. it('works', function () {
  12. jest.spyOn(MetricsMetaStore, 'trigger');
  13. const MyComponent = (props: MyComponentProps) => {
  14. return (
  15. <div>
  16. <span>{props.other}</span>
  17. {props.metricsMeta &&
  18. Object.entries(props.metricsMeta).map(([key, meta]) => (
  19. <em key={key}>{meta.name}</em>
  20. ))}
  21. </div>
  22. );
  23. };
  24. const Container = withMetricsMeta(MyComponent);
  25. render(<Container other="value" />);
  26. // Should forward props.
  27. expect(screen.getByText('value')).toBeInTheDocument();
  28. act(() => {
  29. MetricsMetaStore.loadSuccess([
  30. {
  31. name: 'sentry.sessions.session',
  32. type: 'counter',
  33. operations: ['sum'],
  34. },
  35. {
  36. name: 'sentry.sessions.session.error',
  37. type: 'set',
  38. operations: ['count_unique'],
  39. },
  40. ]);
  41. });
  42. // Should forward prop
  43. expect(screen.getByText('value')).toBeInTheDocument();
  44. expect(MetricsMetaStore.trigger).toHaveBeenCalledTimes(1);
  45. expect(screen.getByText('sentry.sessions.session')).toBeInTheDocument();
  46. expect(screen.getByText('sentry.sessions.session.error')).toBeInTheDocument();
  47. });
  48. });