hydrateBreadcrumbs.spec.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. import {ReplayConsoleFrameFixture} from 'sentry-fixture/replay/replayBreadcrumbFrameData';
  2. import {ReplayRecordFixture} from 'sentry-fixture/replayRecord';
  3. import hydrateBreadcrumbs, {
  4. replayInitBreadcrumb,
  5. } from 'sentry/utils/replays/hydrateBreadcrumbs';
  6. import {BreadcrumbFrame} from 'sentry/utils/replays/types';
  7. const ONE_DAY_MS = 60 * 60 * 24 * 1000;
  8. const mockRRWebFrames = []; // This is only needed for replay.hydrate-error breadcrumbs.
  9. describe('hydrateBreadcrumbs', () => {
  10. const replayRecord = ReplayRecordFixture({started_at: new Date('2023/12/23')});
  11. it('should set the timestampMs and offsetMs for each breadcrumb in the list', () => {
  12. const breadcrumbs = [
  13. ReplayConsoleFrameFixture({timestamp: new Date('2023/12/23')}),
  14. ReplayConsoleFrameFixture({timestamp: new Date('2023/12/24')}),
  15. ReplayConsoleFrameFixture({timestamp: new Date('2023/12/25')}),
  16. ];
  17. expect(hydrateBreadcrumbs(replayRecord, breadcrumbs, mockRRWebFrames)).toStrictEqual([
  18. {
  19. category: 'console',
  20. data: {logger: 'unknown'},
  21. level: 'fatal',
  22. message: '',
  23. type: 'debug',
  24. timestamp: new Date('2023/12/23'),
  25. timestampMs: 1703307600000,
  26. offsetMs: 0,
  27. },
  28. {
  29. category: 'console',
  30. data: {logger: 'unknown'},
  31. level: 'fatal',
  32. message: '',
  33. type: 'debug',
  34. timestamp: new Date('2023/12/24'),
  35. timestampMs: 1703307600000 + ONE_DAY_MS,
  36. offsetMs: ONE_DAY_MS,
  37. },
  38. {
  39. category: 'console',
  40. data: {logger: 'unknown'},
  41. level: 'fatal',
  42. message: '',
  43. type: 'debug',
  44. timestamp: new Date('2023/12/25'),
  45. timestampMs: 1703307600000 + ONE_DAY_MS * 2,
  46. offsetMs: ONE_DAY_MS * 2,
  47. },
  48. ]);
  49. });
  50. it('should drop breadcrumbs that cannot be parsed', () => {
  51. const breadcrumbs = [{foo: 'bar'}];
  52. // @ts-expect-error: Explicitly test invalid input
  53. expect(hydrateBreadcrumbs(replayRecord, breadcrumbs)).toStrictEqual([]);
  54. });
  55. });
  56. describe('replayInitBreadcrumb', () => {
  57. it('should return a RecordingFrame', () => {
  58. const replayRecord = ReplayRecordFixture({});
  59. const frame: BreadcrumbFrame = replayInitBreadcrumb(replayRecord);
  60. expect(frame).toStrictEqual({
  61. category: 'replay.init',
  62. message: 'http://localhost:3000/',
  63. offsetMs: 0,
  64. timestamp: replayRecord.started_at,
  65. timestampMs: 1663865919000,
  66. type: 'init',
  67. });
  68. });
  69. });