withMetricsMeta.spec.tsx 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. import {mountWithTheme, 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. mountWithTheme(<Container other="value" />);
  26. // Should forward props.
  27. expect(screen.getByText('value')).toBeInTheDocument();
  28. MetricsMetaStore.onLoadSuccess([
  29. {
  30. name: 'sentry.sessions.session',
  31. type: 'counter',
  32. operations: ['sum'],
  33. },
  34. {
  35. name: 'sentry.sessions.session.error',
  36. type: 'set',
  37. operations: ['count_unique'],
  38. },
  39. ]);
  40. // Should forward prop
  41. expect(screen.getByText('value')).toBeInTheDocument();
  42. expect(MetricsMetaStore.trigger).toHaveBeenCalledTimes(1);
  43. expect(screen.getByText('sentry.sessions.session')).toBeInTheDocument();
  44. expect(screen.getByText('sentry.sessions.session.error')).toBeInTheDocument();
  45. });
  46. });