getCurrentScreenName.spec.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import {ReplayNavFrameFixture} from 'sentry-fixture/replay/replayBreadcrumbFrameData';
  2. import {ReplayRecordFixture} from 'sentry-fixture/replayRecord';
  3. import getCurrentScreenName from 'sentry/utils/replays/getCurrentScreenName';
  4. import hydrateBreadcrumbs, {
  5. replayInitBreadcrumb,
  6. } from 'sentry/utils/replays/hydrateBreadcrumbs';
  7. const START_DATE = new Date('2022-06-15T00:40:00.111Z');
  8. const NAVIGATION_DATE_1 = new Date('2022-06-15T00:46:00.333Z');
  9. const NAVIGATION_DATE_2 = new Date('2022-06-15T00:48:00.444Z');
  10. const END_DATE = new Date('2022-06-15T00:50:00.555Z');
  11. const replayRecord = ReplayRecordFixture({
  12. started_at: START_DATE,
  13. finished_at: END_DATE,
  14. });
  15. const PAGELOAD_FRAME = replayInitBreadcrumb(replayRecord);
  16. const [NAV_FRAME_1, NAV_FRAME_2] = hydrateBreadcrumbs(replayRecord, [
  17. ReplayNavFrameFixture({
  18. data: {to: 'MainActivityScreen'},
  19. timestamp: NAVIGATION_DATE_1,
  20. }),
  21. ReplayNavFrameFixture({
  22. data: {to: 'ConfirmPayment'},
  23. timestamp: NAVIGATION_DATE_2,
  24. }),
  25. ]);
  26. describe('getCurrentScreenName', () => {
  27. it('should return the screen name based on the closest navigation crumb', () => {
  28. const frames = [PAGELOAD_FRAME, NAV_FRAME_1, NAV_FRAME_2];
  29. const offsetMS = 0; // at the beginning
  30. const screenName = getCurrentScreenName(
  31. ReplayRecordFixture({urls: ['MainActivityScreen', 'ConfirmPayment']}),
  32. frames,
  33. offsetMS
  34. );
  35. expect(screenName).toBe('MainActivityScreen');
  36. const offsetMS2 = Number(NAVIGATION_DATE_1) - Number(START_DATE) + 3;
  37. const screenName2 = getCurrentScreenName(replayRecord, frames, offsetMS2);
  38. expect(screenName2).toBe('MainActivityScreen');
  39. const offsetMS3 = Number(NAVIGATION_DATE_2) - Number(START_DATE) + 1;
  40. const screenName3 = getCurrentScreenName(replayRecord, frames, offsetMS3);
  41. expect(screenName3).toBe('ConfirmPayment');
  42. });
  43. });