eventOrGroupTitle.spec.tsx 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151
  1. import {Organization} from 'sentry-fixture/organization';
  2. import {render, screen} from 'sentry-test/reactTestingLibrary';
  3. import EventOrGroupTitle from 'sentry/components/eventOrGroupTitle';
  4. import {BaseGroup, EventOrGroupType, IssueCategory} from 'sentry/types';
  5. describe('EventOrGroupTitle', function () {
  6. const data = {
  7. metadata: {
  8. type: 'metadata type',
  9. directive: 'metadata directive',
  10. uri: 'metadata uri',
  11. },
  12. culprit: 'culprit',
  13. };
  14. it('renders with subtitle when `type = error`', function () {
  15. render(
  16. <EventOrGroupTitle
  17. data={
  18. {
  19. ...data,
  20. ...{
  21. type: EventOrGroupType.ERROR,
  22. },
  23. } as BaseGroup
  24. }
  25. />
  26. );
  27. });
  28. it('renders with subtitle when `type = csp`', function () {
  29. render(
  30. <EventOrGroupTitle
  31. data={
  32. {
  33. ...data,
  34. ...{
  35. type: EventOrGroupType.CSP,
  36. },
  37. } as BaseGroup
  38. }
  39. />
  40. );
  41. });
  42. it('renders with no subtitle when `type = default`', function () {
  43. render(
  44. <EventOrGroupTitle
  45. data={
  46. {
  47. ...data,
  48. type: EventOrGroupType.DEFAULT,
  49. metadata: {
  50. ...data.metadata,
  51. title: 'metadata title',
  52. },
  53. } as BaseGroup
  54. }
  55. />
  56. );
  57. });
  58. it('renders with title override', function () {
  59. const routerContext = TestStubs.routerContext([{organization: Organization()}]);
  60. render(
  61. <EventOrGroupTitle
  62. data={
  63. {
  64. ...data,
  65. type: EventOrGroupType.ERROR,
  66. metadata: {
  67. ...data.metadata,
  68. title: 'metadata title',
  69. },
  70. } as BaseGroup
  71. }
  72. />,
  73. {context: routerContext}
  74. );
  75. expect(screen.getByText('metadata title')).toBeInTheDocument();
  76. });
  77. it('does not render stack trace when issueCategory is performance', () => {
  78. render(
  79. <EventOrGroupTitle
  80. data={
  81. {
  82. ...data,
  83. issueCategory: IssueCategory.PERFORMANCE,
  84. } as BaseGroup
  85. }
  86. withStackTracePreview
  87. />
  88. );
  89. expect(screen.queryByTestId('stacktrace-preview')).not.toBeInTheDocument();
  90. });
  91. it('does not render stacktrace preview when data is a tombstone', () => {
  92. render(
  93. <EventOrGroupTitle
  94. data={{
  95. id: '123',
  96. level: 'error',
  97. message: 'numTabItems is not defined ReferenceError something',
  98. culprit:
  99. 'useOverflowTabs(webpack-internal:///./app/components/tabs/tabList.tsx)',
  100. type: EventOrGroupType.ERROR,
  101. metadata: {
  102. value: 'numTabItems is not defined',
  103. type: 'ReferenceError',
  104. filename: 'webpack-internal:///./app/components/tabs/tabList.tsx',
  105. function: 'useOverflowTabs',
  106. display_title_with_tree_label: false,
  107. },
  108. actor: TestStubs.User(),
  109. isTombstone: true,
  110. }}
  111. withStackTracePreview
  112. />
  113. );
  114. expect(screen.queryByTestId('stacktrace-preview')).not.toBeInTheDocument();
  115. expect(screen.getByText('ReferenceError')).toBeInTheDocument();
  116. });
  117. describe('performance issue list', () => {
  118. const perfData = {
  119. title: 'Hello',
  120. type: EventOrGroupType.TRANSACTION,
  121. issueCategory: IssueCategory.PERFORMANCE,
  122. metadata: {
  123. title: 'N+1 Query',
  124. },
  125. culprit: 'transaction name',
  126. } as BaseGroup;
  127. it('should correctly render title', () => {
  128. const routerContext = TestStubs.routerContext([{organization: Organization()}]);
  129. render(<EventOrGroupTitle data={perfData} />, {context: routerContext});
  130. expect(screen.getByText('N+1 Query')).toBeInTheDocument();
  131. expect(screen.getByText('transaction name')).toBeInTheDocument();
  132. });
  133. });
  134. });