projectIssues.spec.jsx 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import {mountWithTheme} from 'sentry-test/enzyme';
  2. import {initializeOrg} from 'sentry-test/initializeOrg';
  3. import ProjectIssues from 'sentry/views/projectDetail/projectIssues';
  4. describe('ProjectDetail > ProjectIssues', function () {
  5. let endpointMock, filteredEndpointMock, wrapper;
  6. const {organization, router, routerContext} = initializeOrg({
  7. organization: {
  8. features: ['discover-basic'],
  9. },
  10. });
  11. beforeEach(function () {
  12. endpointMock = MockApiClient.addMockResponse({
  13. url: `/organizations/${organization.slug}/issues/?limit=5&query=is%3Aunresolved%20error.unhandled%3Atrue&sort=freq&statsPeriod=14d`,
  14. body: [TestStubs.Group(), TestStubs.Group({id: '2'})],
  15. });
  16. filteredEndpointMock = MockApiClient.addMockResponse({
  17. url: `/organizations/${organization.slug}/issues/?environment=staging&limit=5&query=is%3Aunresolved%20error.unhandled%3Atrue&sort=freq&statsPeriod=7d`,
  18. body: [TestStubs.Group(), TestStubs.Group({id: '2'})],
  19. });
  20. MockApiClient.addMockResponse({
  21. url: `/organizations/${organization.slug}/users/`,
  22. body: [],
  23. });
  24. });
  25. afterEach(function () {
  26. MockApiClient.clearMockResponses();
  27. wrapper.unmount();
  28. });
  29. it('renders a list', async function () {
  30. wrapper = mountWithTheme(
  31. <ProjectIssues organization={organization} location={router.location} />,
  32. routerContext
  33. );
  34. expect(wrapper.find('SectionHeading').text()).toBe('Frequent Unhandled Issues');
  35. await tick();
  36. wrapper.update();
  37. expect(wrapper.find('StreamGroup').length).toBe(2);
  38. });
  39. it('renders a link to Issues', function () {
  40. wrapper = mountWithTheme(
  41. <ProjectIssues organization={organization} location={router.location} />,
  42. routerContext
  43. );
  44. expect(
  45. wrapper.find('ControlsWrapper Link[aria-label="Open in Issues"]').at(0).prop('to')
  46. ).toEqual({
  47. pathname: `/organizations/${organization.slug}/issues/`,
  48. query: {
  49. limit: 5,
  50. query: 'is:unresolved error.unhandled:true',
  51. sort: 'freq',
  52. statsPeriod: '14d',
  53. },
  54. });
  55. });
  56. it('renders a link to Discover', function () {
  57. wrapper = mountWithTheme(
  58. <ProjectIssues organization={organization} location={router.location} />,
  59. routerContext
  60. );
  61. expect(
  62. wrapper.find('ControlsWrapper Link[aria-label="Open in Discover"]').at(0).prop('to')
  63. ).toEqual({
  64. pathname: `/organizations/${organization.slug}/discover/results/`,
  65. query: {
  66. display: 'top5',
  67. field: ['issue', 'title', 'count()', 'count_unique(user)', 'project'],
  68. name: 'Frequent Unhandled Issues',
  69. query: 'event.type:error error.unhandled:true',
  70. sort: ['-count'],
  71. statsPeriod: '14d',
  72. },
  73. });
  74. });
  75. it('changes according to global header', function () {
  76. wrapper = mountWithTheme(
  77. <ProjectIssues
  78. organization={organization}
  79. location={{
  80. query: {statsPeriod: '7d', environment: 'staging', somethingBad: 'nope'},
  81. }}
  82. />,
  83. routerContext
  84. );
  85. expect(endpointMock).toHaveBeenCalledTimes(0);
  86. expect(filteredEndpointMock).toHaveBeenCalledTimes(1);
  87. expect(
  88. wrapper.find('ControlsWrapper Link[aria-label="Open in Issues"]').at(0).prop('to')
  89. ).toEqual({
  90. pathname: `/organizations/${organization.slug}/issues/`,
  91. query: {
  92. limit: 5,
  93. environment: 'staging',
  94. statsPeriod: '7d',
  95. query: 'is:unresolved error.unhandled:true',
  96. sort: 'freq',
  97. },
  98. });
  99. });
  100. });