eventOrGroupHeader.spec.tsx 7.0 KB

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