eventVitals.spec.tsx 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. import {render, screen} from 'sentry-test/reactTestingLibrary';
  2. import EventVitals from 'sentry/components/events/eventVitals';
  3. import {Event} from 'sentry/types';
  4. function makeEvent(measurements = {}, sdk = {version: '5.27.3'}): Event {
  5. const formattedMeasurements = {};
  6. for (const [name, value] of Object.entries(measurements)) {
  7. formattedMeasurements[name] = {value};
  8. }
  9. const event = TestStubs.Event({measurements: formattedMeasurements});
  10. if (sdk !== null) {
  11. event.sdk = sdk;
  12. }
  13. return event;
  14. }
  15. describe('EventVitals', function () {
  16. it('should not render anything', function () {
  17. const event = makeEvent({});
  18. const {container} = render(<EventVitals event={event} />);
  19. expect(container).toBeEmptyDOMElement();
  20. });
  21. it('should not render non web vitals', function () {
  22. const event = makeEvent({
  23. 'mark.stuff': 123,
  24. 'op.more.stuff': 123,
  25. });
  26. const {container} = render(<EventVitals event={event} />);
  27. expect(container).toBeEmptyDOMElement();
  28. });
  29. it('should render some web vitals with a header', function () {
  30. const event = makeEvent({
  31. fp: 1,
  32. fcp: 2,
  33. lcp: 3,
  34. fid: 4,
  35. cls: 0.1,
  36. ttfb: 5,
  37. 'ttfb.requesttime': 6,
  38. });
  39. render(<EventVitals event={event} />);
  40. expect(screen.getByText('Web Vitals')).toBeInTheDocument();
  41. [
  42. 'Cumulative Layout Shift',
  43. 'First Contentful Paint',
  44. 'First Input Delay',
  45. 'First Paint',
  46. 'Largest Contentful Paint',
  47. 'Time to First Byte',
  48. 'Request Time',
  49. ].forEach(vital => expect(screen.getByText(vital)).toBeInTheDocument());
  50. });
  51. it('should render some web vitals with a heading and a sdk warning', function () {
  52. const event = makeEvent({fp: 1}, {version: '5.26.0'});
  53. render(<EventVitals event={event} />);
  54. [
  55. 'Cumulative Layout Shift',
  56. 'First Contentful Paint',
  57. 'First Input Delay',
  58. 'Largest Contentful Paint',
  59. 'Time to First Byte',
  60. 'Request Time',
  61. ].forEach(vital => expect(screen.queryByText(vital)).not.toBeInTheDocument());
  62. expect(screen.getByTestId('outdated-sdk-warning')).toBeInTheDocument();
  63. });
  64. it('should show fire icon if vital failed threshold', function () {
  65. const event = makeEvent({
  66. fp: 5000,
  67. fcp: 5000,
  68. lcp: 5000,
  69. fid: 4,
  70. cls: 0.1,
  71. ttfb: 5,
  72. 'ttfb.requesttime': 6,
  73. });
  74. render(<EventVitals event={event} />);
  75. expect(screen.getAllByTestId('threshold-failed-warning')[0]).toBeInTheDocument();
  76. });
  77. });