import {initializeOrg} from 'sentry-test/initializeOrg';
import {render, screen} from 'sentry-test/reactTestingLibrary';
import DashboardWidgetQuerySelectorModal from 'sentry/components/modals/dashboardWidgetQuerySelectorModal';
import {t} from 'sentry/locale';
import {DisplayType} from 'sentry/views/dashboards/types';
const stubEl: any = (props: any) =>
{props.children}
;
const api = new MockApiClient();
function renderModal({initialData, widget}) {
return render(
{}}
organization={initialData.organization}
widget={widget}
api={api}
/>,
{context: initialData.routerContext}
);
}
describe('Modals -> AddDashboardWidgetModal', function () {
const initialData = initializeOrg({
organization: {
features: ['performance-view', 'discover-query'],
},
router: {},
projects: [],
});
let mockQuery;
let mockWidget;
beforeEach(function () {
mockQuery = {
conditions: 'title:/organizations/:orgId/performance/summary/',
fields: ['count()', 'failure_count()'],
aggregates: ['count()', 'failure_count()'],
columns: [],
id: '1',
name: 'Query Name',
orderby: '',
};
mockWidget = {
title: 'Test Widget',
displayType: DisplayType.AREA,
interval: '5m',
queries: [mockQuery],
};
MockApiClient.addMockResponse({
url: '/organizations/org-slug/dashboards/widgets/',
method: 'POST',
statusCode: 200,
body: [],
});
MockApiClient.addMockResponse({
url: '/organizations/org-slug/events-stats/',
body: [],
});
MockApiClient.addMockResponse({
url: '/organizations/org-slug/eventsv2/',
body: {data: [{'event.type': 'error'}], meta: {'event.type': 'string'}},
});
MockApiClient.addMockResponse({
url: '/organizations/org-slug/events-geo/',
body: {data: [], meta: {}},
});
MockApiClient.addMockResponse({
url: '/organizations/org-slug/recent-searches/',
body: [],
});
MockApiClient.addMockResponse({
url: '/organizations/org-slug/dashboards/',
body: [{id: '1', title: t('Test Dashboard')}],
});
});
afterEach(() => {
MockApiClient.clearMockResponses();
});
it('renders a single query selection when the widget only has one query', function () {
renderModal({initialData, widget: mockWidget});
expect(
screen.getByDisplayValue('title:/organizations/:orgId/performance/summary/')
).toBeInTheDocument();
expect(screen.getByRole('button', {name: 'Open in Discover'})).toBeInTheDocument();
});
it('renders a multiple query selections when the widget only has multiple queries', function () {
mockWidget.queries.push({
...mockQuery,
conditions: 'title:/organizations/:orgId/performance/',
id: '2',
});
mockWidget.queries.push({
...mockQuery,
conditions: 'title:/organizations/:orgId/',
id: '3',
});
renderModal({initialData, widget: mockWidget});
const queryFields = screen.getAllByRole('textbox');
expect(queryFields).toHaveLength(3);
expect(
screen.getByDisplayValue('title:/organizations/:orgId/performance/summary/')
).toBeInTheDocument();
expect(
screen.getByDisplayValue('title:/organizations/:orgId/performance/')
).toBeInTheDocument();
expect(screen.getByDisplayValue('title:/organizations/:orgId/')).toBeInTheDocument();
});
it('links user to the query in discover when a query is selected from the modal', function () {
renderModal({initialData, widget: mockWidget});
expect(screen.getByRole('link')).toHaveAttribute(
'href',
'/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'
);
});
});