analyticsArea.spec.tsx 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. import {OrganizationFixture} from 'sentry-fixture/organization';
  2. import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
  3. import AnalyticsArea, {useAnalyticsArea} from 'sentry/components/analyticsArea';
  4. import type {Organization} from 'sentry/types/organization';
  5. import * as analytics from 'sentry/utils/analytics';
  6. function TestButton({org}: {org: Organization}) {
  7. const area = useAnalyticsArea();
  8. return (
  9. <button
  10. data-test-id="my-button"
  11. onClick={() => {
  12. analytics.trackAnalytics('button-clicked', {
  13. organization: org,
  14. area,
  15. });
  16. }}
  17. />
  18. );
  19. }
  20. describe('AnalyticsAreaProvider', function () {
  21. const organization = OrganizationFixture();
  22. const analyticsSpy = jest.spyOn(analytics, 'trackAnalytics');
  23. it('Appends names when nested', async function () {
  24. render(
  25. <AnalyticsArea name="feedback">
  26. <AnalyticsArea name="details">
  27. <AnalyticsArea name="activity">
  28. <TestButton org={organization} />
  29. </AnalyticsArea>
  30. </AnalyticsArea>
  31. </AnalyticsArea>
  32. );
  33. const button = screen.getByTestId('my-button');
  34. await userEvent.click(button);
  35. expect(analyticsSpy).toHaveBeenCalledWith('button-clicked', {
  36. organization,
  37. area: 'feedback.details.activity',
  38. });
  39. });
  40. it('Overrides parent area when specified', async function () {
  41. render(
  42. <AnalyticsArea name="feedback">
  43. <AnalyticsArea name="details">
  44. <AnalyticsArea name="my-modal" overrideParent>
  45. <TestButton org={organization} />
  46. </AnalyticsArea>
  47. </AnalyticsArea>
  48. </AnalyticsArea>
  49. );
  50. const button = screen.getByTestId('my-button');
  51. await userEvent.click(button);
  52. expect(analyticsSpy).toHaveBeenCalledWith('button-clicked', {
  53. organization,
  54. area: 'my-modal',
  55. });
  56. });
  57. });