dashboardWidgetQuerySelectorModal.spec.tsx 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. import {initializeOrg} from 'sentry-test/initializeOrg';
  2. import {render, screen} from 'sentry-test/reactTestingLibrary';
  3. import DashboardWidgetQuerySelectorModal from 'sentry/components/modals/dashboardWidgetQuerySelectorModal';
  4. import {t} from 'sentry/locale';
  5. import {DisplayType} from 'sentry/views/dashboards/types';
  6. const stubEl: any = (props: any) => <div>{props.children}</div>;
  7. const api = new MockApiClient();
  8. function renderModal({initialData, widget}) {
  9. return render(
  10. <DashboardWidgetQuerySelectorModal
  11. Header={stubEl}
  12. Footer={stubEl}
  13. Body={stubEl}
  14. CloseButton={stubEl}
  15. closeModal={() => {}}
  16. organization={initialData.organization}
  17. widget={widget}
  18. api={api}
  19. />,
  20. {context: initialData.routerContext}
  21. );
  22. }
  23. describe('Modals -> AddDashboardWidgetModal', function () {
  24. const initialData = initializeOrg({
  25. organization: {
  26. features: ['performance-view', 'discover-query'],
  27. },
  28. router: {},
  29. projects: [],
  30. });
  31. let mockQuery;
  32. let mockWidget;
  33. beforeEach(function () {
  34. mockQuery = {
  35. conditions: 'title:/organizations/:orgId/performance/summary/',
  36. fields: ['count()', 'failure_count()'],
  37. aggregates: ['count()', 'failure_count()'],
  38. columns: [],
  39. id: '1',
  40. name: 'Query Name',
  41. orderby: '',
  42. };
  43. mockWidget = {
  44. title: 'Test Widget',
  45. displayType: DisplayType.AREA,
  46. interval: '5m',
  47. queries: [mockQuery],
  48. };
  49. MockApiClient.addMockResponse({
  50. url: '/organizations/org-slug/dashboards/widgets/',
  51. method: 'POST',
  52. statusCode: 200,
  53. body: [],
  54. });
  55. MockApiClient.addMockResponse({
  56. url: '/organizations/org-slug/events-stats/',
  57. body: [],
  58. });
  59. MockApiClient.addMockResponse({
  60. url: '/organizations/org-slug/eventsv2/',
  61. body: {data: [{'event.type': 'error'}], meta: {'event.type': 'string'}},
  62. });
  63. MockApiClient.addMockResponse({
  64. url: '/organizations/org-slug/events-geo/',
  65. body: {data: [], meta: {}},
  66. });
  67. MockApiClient.addMockResponse({
  68. url: '/organizations/org-slug/recent-searches/',
  69. body: [],
  70. });
  71. MockApiClient.addMockResponse({
  72. url: '/organizations/org-slug/dashboards/',
  73. body: [{id: '1', title: t('Test Dashboard')}],
  74. });
  75. });
  76. afterEach(() => {
  77. MockApiClient.clearMockResponses();
  78. });
  79. it('renders a single query selection when the widget only has one query', function () {
  80. renderModal({initialData, widget: mockWidget});
  81. expect(
  82. screen.getByDisplayValue('title:/organizations/:orgId/performance/summary/')
  83. ).toBeInTheDocument();
  84. expect(screen.getByRole('button', {name: 'Open in Discover'})).toBeInTheDocument();
  85. });
  86. it('renders a multiple query selections when the widget only has multiple queries', function () {
  87. mockWidget.queries.push({
  88. ...mockQuery,
  89. conditions: 'title:/organizations/:orgId/performance/',
  90. id: '2',
  91. });
  92. mockWidget.queries.push({
  93. ...mockQuery,
  94. conditions: 'title:/organizations/:orgId/',
  95. id: '3',
  96. });
  97. renderModal({initialData, widget: mockWidget});
  98. const queryFields = screen.getAllByRole('textbox');
  99. expect(queryFields).toHaveLength(3);
  100. expect(
  101. screen.getByDisplayValue('title:/organizations/:orgId/performance/summary/')
  102. ).toBeInTheDocument();
  103. expect(
  104. screen.getByDisplayValue('title:/organizations/:orgId/performance/')
  105. ).toBeInTheDocument();
  106. expect(screen.getByDisplayValue('title:/organizations/:orgId/')).toBeInTheDocument();
  107. });
  108. it('links user to the query in discover when a query is selected from the modal', function () {
  109. renderModal({initialData, widget: mockWidget});
  110. expect(screen.getByRole('link')).toHaveAttribute(
  111. 'href',
  112. '/organizations/org-slug/discover/results/?field=count%28%29&field=failure_count%28%29&name=Test%20Widget&query=title%3A%2Forganizations%2F%3AorgId%2Fperformance%2Fsummary%2F&statsPeriod=14d&yAxis=count%28%29&yAxis=failure_count%28%29'
  113. );
  114. });
  115. });