eventVitals.spec.jsx 2.4 KB

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