utils.spec.jsx 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. import {filterBreadcrumbs} from 'sentry/views/replays/detail/console/utils';
  2. const breadcrumbs = [
  3. {
  4. type: 'default',
  5. timestamp: '2022-05-11T23:00:45.094000Z',
  6. level: 'info',
  7. message: 'longtask - does not exist [object PerformanceLongTaskTiming]',
  8. category: 'console',
  9. data: {
  10. arguments: [
  11. 'longtask - does not exist',
  12. {
  13. attribution: ['[object TaskAttributionTiming]'],
  14. duration: 76,
  15. entryType: 'longtask',
  16. name: 'self',
  17. startTime: 3741,
  18. },
  19. ],
  20. logger: 'console',
  21. },
  22. event_id: null,
  23. },
  24. {
  25. type: 'default',
  26. timestamp: '2022-05-11T23:00:45.093000Z',
  27. level: 'info',
  28. message: 'event - does not exist [object PerformanceEventTiming]',
  29. category: 'console',
  30. data: {
  31. arguments: [
  32. 'event - does not exist',
  33. {
  34. cancelable: true,
  35. duration: 160,
  36. entryType: 'event',
  37. name: 'keyup',
  38. processingEnd: 505,
  39. processingStart: 505,
  40. startTime: 347.90000009536743,
  41. },
  42. ],
  43. logger: 'console',
  44. },
  45. event_id: null,
  46. },
  47. {
  48. type: 'default',
  49. timestamp: '2022-05-11T23:04:27.576000Z',
  50. level: 'error',
  51. message:
  52. 'The above error occurred in the <TestButton> component:\n\n at TestButton (webpack-internal:///./app/views/userFeedback/index.tsx:224:76)\n at div\n at eval (webpack-internal:///../node_modules/@emotion/react/dist/emotion-element-a8309070.browser.esm.js:45:66)\n at ButtonBar (webpack-internal:///./app/components/buttonBar.tsx:30:5)\n at div\n at eval (webpack-internal:///../node_modules/@emotion/react/dist/emotion-element-a8309070.browser.esm.js:45:66)\n at ErrorBoundary (webpack-internal:///./app/components/errorBoundary.tsx:45:5)\n at div\n at NoProjectMessage (webpack-internal:///./app/components/noProjectMessage.tsx:45:5)\n at div\n at eval (webpack-internal:///../node_modules/@emotion/react/dist/emotion-element-a8309070.browser.esm.js:45:66)\n at Container (webpack-internal:///./app/components/organizations/pageFilters/container.tsx:66:5)\n at eval (webpack-internal:///../node_modules/create-react-class/factory.js:821:37)\n at _class (webpack-internal:///./app/utils/withOrganization.tsx:24:19)\n at DocumentTitle\n at SideEffect (webpack-internal:///../node_modules/react-side-effect/lib/index.js:74:27)\n at SentryDocumentTitle (webpack-internal:///./app/components/sentryDocumentTitle.tsx:22:5)\n at OrganizationUserFeedback (webpack-internal:///./app/views/userFeedback/index.tsx:73:1)\n at Profiler (webpack-internal:///../node_modules/@sentry/react/esm/profiler.js:83:28)\n at profiler(OrganizationUserFeedback)\n at _class (webpack-internal:///./app/utils/withOrganization.tsx:24:19)\n at LazyLoad (webpack-internal:///./app/components/lazyLoad.tsx:39:5)\n at ErrorHandler (webpack-internal:///./app/utils/errorHandler.tsx:24:7)\n at ErrorBoundary (webpack-internal:///./app/components/errorBoundary.tsx:45:5)\n at OrganizationDetailsBody (webpack-internal:///./app/views/organizationDetails/body.tsx:131:5)\n at _class (webpack-internal:///./app/utils/withOrganization.tsx:24:19)\n at div\n at DocumentTitle\n at SideEffect (webpack-internal:///../node_modules/react-side-effect/lib/index.js:74:27)\n at SentryDocumentTitle (webpack-internal:///./app/components/sentryDocumentTitle.tsx:22:5)\n at OrganizationContextContainer (webpack-internal:///./app/views/organizationContextContainer.tsx:157:5)\n at Profiler (webpack-internal:///../node_modules/@sentry/react/esm/profiler.js:83:28)\n at profiler(OrganizationContextContainer)\n at WithOrganizations (webpack-internal:///./app/utils/withOrganizations.tsx:27:7)\n at WithApi (webpack-internal:///./app/utils/withApi.tsx:35:12)\n at OrganizationDetails (webpack-internal:///./app/views/organizationDetails/index.tsx:27:5)\n at ErrorHandler (webpack-internal:///./app/utils/errorHandler.tsx:24:7)\n at ErrorBoundary (webpack-internal:///./app/components/errorBoundary.tsx:45:5)\n at div\n at eval (webpack-internal:///../node_modules/@emotion/react/dist/emotion-element-a8309070.browser.esm.js:45:66)\n at App (webpack-internal:///./app/views/app/index.tsx:72:5)\n at ErrorHandler (webpack-internal:///./app/utils/errorHandler.tsx:24:7)\n at eval (webpack-internal:///../node_modules/create-react-class/factory.js:821:37)\n at eval (webpack-internal:///../node_modules/create-react-class/factory.js:821:37)\n at PersistedStoreProvider (webpack-internal:///./app/stores/persistedStore.tsx:59:76)\n at ThemeProvider (webpack-internal:///../node_modules/@emotion/react/dist/emotion-element-a8309070.browser.esm.js:79:64)\n at ThemeAndStyleProvider (webpack-internal:///./app/components/themeAndStyleProvider.tsx:45:5)\n at Main\n\nReact will try to recreate this component tree from scratch using the error boundary you provided, ErrorBoundary.',
  53. category: 'console',
  54. data: {
  55. arguments: [
  56. 'The above error occurred in the <TestButton> component:\n\n at TestButton (webpack-internal:///./app/views/userFeedback/index.tsx:224:76)\n at div\n at eval (webpack-internal:///../node_modules/@emotion/react/dist/emotion-element-a8309070.browser.esm.js:45:66)\n at ButtonBar (webpack-internal:///./app/components/buttonBar.tsx:30:5)\n at div\n at eval (webpack-internal:///../node_modules/@emotion/react/dist/emotion-element-a8309070.browser.esm.js:45:66)\n at ErrorBoundary (webpack-internal:///./app/components/errorBoundary.tsx:45:5)\n at div\n at NoProjectMessage (webpack-internal:///./app/components/noProjectMessage.tsx:45:5)\n at div\n at eval (webpack-internal:///../node_modules/@emotion/react/dist/emotion-element-a8309070.browser.esm.js:45:66)\n at Container (webpack-internal:///./app/components/organizations/pageFilters/container.tsx:66:5)\n at eval (webpack-internal:///../node_modules/create-react-class/factory.js:821:37)\n at _class (webpack-internal:///./app/utils/withOrganization.tsx:24:19)\n at DocumentTitle\n at SideEffect (webpack-internal:///../node_modules/react-side-effect/lib/index.js:74:27)\n at SentryDocumentTitle (webpack-internal:///./app/components/sentryDocumentTitle.tsx:22:5)\n at OrganizationUserFeedback (webpack-internal:///./app/views/userFeedback/index.tsx:73:1)\n at Profiler (webpack-internal:///../node_modules/@sentry/react/esm/profiler.js:83:28)\n at profiler(OrganizationUserFeedback)\n at _class (webpack-internal:///./app/utils/withOrganization.tsx:24:19)\n at LazyLoad (webpack-internal:///./app/components/lazyLoad.tsx:39:5)\n at ErrorHandler (webpack-internal:///./app/utils/errorHandler.tsx:24:7)\n at ErrorBoundary (webpack-internal:///./app/components/errorBoundary.tsx:45:5)\n at OrganizationDetailsBody (webpack-internal:///./app/views/organizationDetails/body.tsx:131:5)\n at _class (webpack-internal:///./app/utils/withOrganization.tsx:24:19)\n at div\n at DocumentTitle\n at SideEffect (webpack-internal:///../node_modules/...',
  57. ],
  58. },
  59. event_id: null,
  60. },
  61. {
  62. type: 'default',
  63. timestamp: '2022-05-11T23:05:51.531000Z',
  64. level: 'warning',
  65. message:
  66. 'Warning: componentWillMount has been renamed, and is not recommended for use. See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\n* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n\nPlease update the following components: %s Router, RouterContext',
  67. category: 'console',
  68. data: {
  69. arguments: [
  70. 'Warning: componentWillMount has been renamed, and is not recommended for use. See https://reactjs.org/link/unsafe-component-lifecycles for details.\n\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\n* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run `npx react-codemod rename-unsafe-lifecycles` in your project source folder.\n\nPlease update the following components: %s',
  71. 'Router, RouterContext',
  72. 'find me',
  73. ],
  74. logger: 'console',
  75. },
  76. event_id: null,
  77. },
  78. ];
  79. describe('replays/details/console', () => {
  80. it('filters console breadcrumbs by log level', () => {
  81. const result = filterBreadcrumbs(breadcrumbs, '', ['error', 'warning']);
  82. expect(result.length).toEqual(2);
  83. });
  84. it('filters console breadcrumbs by search term', () => {
  85. const result = filterBreadcrumbs(breadcrumbs, 'comp', []);
  86. expect(result.length).toEqual(2);
  87. });
  88. it('filters console breadcrumbs by search term where match is within data.arguments', () => {
  89. const result = filterBreadcrumbs(breadcrumbs, 'find me', []);
  90. expect(result.length).toEqual(1);
  91. });
  92. it('filters console breadcrumbs by search term and log level', () => {
  93. const result = filterBreadcrumbs(breadcrumbs, 'tEs', ['error']);
  94. expect(result.length).toEqual(1);
  95. });
  96. it('does not filter if no searchTerm or logLevel filters are present', () => {
  97. const result = filterBreadcrumbs(breadcrumbs, '', []);
  98. expect(result.length).toEqual(4);
  99. });
  100. });