eventOrGroupHeader.spec.tsx 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. import {Event} from 'fixtures/js-stubs/event';
  2. import {Group} from 'fixtures/js-stubs/group';
  3. import {initializeOrg} from 'sentry-test/initializeOrg';
  4. import {render, screen} from 'sentry-test/reactTestingLibrary';
  5. import {textWithMarkupMatcher} from 'sentry-test/utils';
  6. import EventOrGroupHeader from 'sentry/components/eventOrGroupHeader';
  7. import {EventOrGroupType} from 'sentry/types';
  8. import {OrganizationContext} from 'sentry/views/organizationContext';
  9. const group = Group({
  10. level: 'error',
  11. metadata: {
  12. type: 'metadata type',
  13. directive: 'metadata directive',
  14. uri: 'metadata uri',
  15. value: 'metadata value',
  16. message: 'metadata message',
  17. },
  18. culprit: 'culprit',
  19. });
  20. const event = Event({
  21. id: 'id',
  22. eventID: 'eventID',
  23. groupID: 'groupID',
  24. culprit: undefined,
  25. metadata: {
  26. type: 'metadata type',
  27. directive: 'metadata directive',
  28. uri: 'metadata uri',
  29. value: 'metadata value',
  30. message: 'metadata message',
  31. },
  32. });
  33. describe('EventOrGroupHeader', function () {
  34. const {organization, router} = initializeOrg({
  35. router: {orgId: 'orgId'},
  36. } as Parameters<typeof initializeOrg>[0]);
  37. describe('Group', function () {
  38. it('renders with `type = error`', function () {
  39. const {container} = render(
  40. <OrganizationContext.Provider value={organization}>
  41. <EventOrGroupHeader organization={organization} data={group} {...router} />
  42. </OrganizationContext.Provider>
  43. );
  44. expect(container).toSnapshot();
  45. });
  46. it('renders with `type = csp`', function () {
  47. const {container} = render(
  48. <OrganizationContext.Provider value={organization}>
  49. <EventOrGroupHeader
  50. organization={organization}
  51. data={{
  52. ...group,
  53. type: EventOrGroupType.CSP,
  54. }}
  55. {...router}
  56. />
  57. </OrganizationContext.Provider>
  58. );
  59. expect(container).toSnapshot();
  60. });
  61. it('renders with `type = default`', function () {
  62. const {container} = render(
  63. <OrganizationContext.Provider value={organization}>
  64. <EventOrGroupHeader
  65. organization={organization}
  66. data={{
  67. ...group,
  68. type: EventOrGroupType.DEFAULT,
  69. metadata: {
  70. ...group.metadata,
  71. title: 'metadata title',
  72. },
  73. }}
  74. {...router}
  75. />
  76. </OrganizationContext.Provider>
  77. );
  78. expect(container).toSnapshot();
  79. });
  80. it('renders metadata values in message for error events', function () {
  81. render(
  82. <OrganizationContext.Provider value={organization}>
  83. <EventOrGroupHeader
  84. organization={organization}
  85. data={{
  86. ...group,
  87. type: EventOrGroupType.ERROR,
  88. }}
  89. {...router}
  90. />
  91. </OrganizationContext.Provider>
  92. );
  93. expect(screen.getByText('metadata value')).toBeInTheDocument();
  94. });
  95. it('renders location', function () {
  96. render(
  97. <OrganizationContext.Provider value={organization}>
  98. <EventOrGroupHeader
  99. organization={organization}
  100. data={{
  101. ...group,
  102. metadata: {
  103. filename: 'path/to/file.swift',
  104. },
  105. platform: 'swift',
  106. type: EventOrGroupType.ERROR,
  107. }}
  108. {...router}
  109. />
  110. </OrganizationContext.Provider>
  111. );
  112. expect(
  113. screen.getByText(textWithMarkupMatcher('in path/to/file.swift'))
  114. ).toBeInTheDocument();
  115. });
  116. });
  117. describe('Event', function () {
  118. it('renders with `type = error`', function () {
  119. const {container} = render(
  120. <OrganizationContext.Provider value={organization}>
  121. <EventOrGroupHeader
  122. organization={organization}
  123. data={{
  124. ...event,
  125. type: EventOrGroupType.ERROR,
  126. }}
  127. {...router}
  128. />
  129. </OrganizationContext.Provider>
  130. );
  131. expect(container).toSnapshot();
  132. });
  133. it('renders with `type = csp`', function () {
  134. const {container} = render(
  135. <OrganizationContext.Provider value={organization}>
  136. <EventOrGroupHeader
  137. organization={organization}
  138. data={{
  139. ...event,
  140. type: EventOrGroupType.CSP,
  141. }}
  142. {...router}
  143. />
  144. </OrganizationContext.Provider>
  145. );
  146. expect(container).toSnapshot();
  147. });
  148. it('renders with `type = default`', function () {
  149. const {container} = render(
  150. <OrganizationContext.Provider value={organization}>
  151. <EventOrGroupHeader
  152. organization={organization}
  153. data={{
  154. ...event,
  155. type: EventOrGroupType.DEFAULT,
  156. metadata: {
  157. ...event.metadata,
  158. title: 'metadata title',
  159. },
  160. }}
  161. {...router}
  162. />
  163. </OrganizationContext.Provider>
  164. );
  165. expect(container).toSnapshot();
  166. });
  167. it('hides level tag', function () {
  168. const {container} = render(
  169. <OrganizationContext.Provider value={organization}>
  170. <EventOrGroupHeader
  171. projectId="projectId"
  172. hideLevel
  173. organization={organization}
  174. data={{
  175. ...event,
  176. type: EventOrGroupType.DEFAULT,
  177. metadata: {
  178. ...event.metadata,
  179. title: 'metadata title',
  180. },
  181. }}
  182. {...router}
  183. />
  184. </OrganizationContext.Provider>
  185. );
  186. expect(container).toSnapshot();
  187. });
  188. it('keeps sort in link when query has sort', function () {
  189. render(
  190. <OrganizationContext.Provider value={organization}>
  191. <EventOrGroupHeader
  192. organization={organization}
  193. data={{
  194. ...event,
  195. type: EventOrGroupType.DEFAULT,
  196. }}
  197. {...router}
  198. location={{
  199. ...router.location,
  200. query: {
  201. ...router.location.query,
  202. sort: 'freq',
  203. },
  204. }}
  205. />
  206. </OrganizationContext.Provider>
  207. );
  208. expect(screen.getByRole('link')).toHaveAttribute(
  209. 'href',
  210. '/organizations/org-slug/issues/groupID/events/eventID/?_allp=1&sort=freq'
  211. );
  212. });
  213. it('lack of project adds allp parameter', function () {
  214. render(
  215. <OrganizationContext.Provider value={organization}>
  216. <EventOrGroupHeader
  217. organization={organization}
  218. data={{
  219. ...event,
  220. type: EventOrGroupType.DEFAULT,
  221. }}
  222. {...router}
  223. location={{
  224. ...router.location,
  225. query: {},
  226. }}
  227. />
  228. </OrganizationContext.Provider>
  229. );
  230. expect(screen.getByRole('link')).toHaveAttribute(
  231. 'href',
  232. '/organizations/org-slug/issues/groupID/events/eventID/?_allp=1'
  233. );
  234. });
  235. });
  236. });