import {initializeOrg} from 'sentry-test/initializeOrg';
import {render, screen, userEvent} from 'sentry-test/reactTestingLibrary';
import EventView, {type EventViewOptions} from 'sentry/utils/discover/eventView';
import {DiscoverDatasets} from 'sentry/utils/discover/types';
import {DatasetSelectorTabs} from 'sentry/views/discover/savedQuery/datasetSelectorTabs';
const EVENT_VIEW_CONSTRUCTOR_PROPS: EventViewOptions = {
createdBy: undefined,
end: undefined,
environment: [],
fields: [{field: 'transaction'}, {field: 'project'}],
name: 'Test',
project: [],
query: 'foo:bar',
start: undefined,
team: [],
sorts: [],
statsPeriod: undefined,
topEvents: undefined,
id: undefined,
display: undefined,
};
describe('Discover DatasetSelector', function () {
const {router} = initializeOrg({
organization: {features: ['performance-view']},
});
it('renders tabs', function () {
const eventView = new EventView(EVENT_VIEW_CONSTRUCTOR_PROPS);
render(
,
{
router,
}
);
expect(screen.getByRole('tab', {name: 'Errors'})).toBeInTheDocument();
expect(screen.getByRole('tab', {name: 'Transactions'})).toBeInTheDocument();
});
it('pushes compatible query', async function () {
const eventView = new EventView({
createdBy: undefined,
end: undefined,
environment: [],
fields: [
{field: 'transaction'},
{field: 'project'},
{field: 'count_unique(error.handled)'},
{field: 'error.mechanism'},
],
name: 'Test',
project: [],
query: '(error.type:bar AND project:foo)',
start: undefined,
team: [],
sorts: [{field: 'error.mechanism', kind: 'asc'}],
statsPeriod: undefined,
topEvents: undefined,
id: undefined,
display: undefined,
});
render(
,
{
router,
}
);
await userEvent.click(screen.getByRole('tab', {name: 'Transactions'}));
expect(router.push).toHaveBeenCalledWith(
expect.objectContaining({
query: expect.objectContaining({
project: undefined,
field: ['transaction', 'project'],
query: 'project:foo',
queryDataset: 'transaction-like',
sort: '-transaction',
incompatible: true,
}),
})
);
});
it('only updates dataset if saved query', async function () {
const eventView = new EventView({
...EVENT_VIEW_CONSTRUCTOR_PROPS,
dataset: DiscoverDatasets.ERRORS,
id: '1',
});
render(
,
{
router,
}
);
await userEvent.click(screen.getByRole('tab', {name: 'Transactions'}));
expect(router.push).toHaveBeenCalledWith(
expect.objectContaining({
query: expect.objectContaining({
project: undefined,
field: ['transaction', 'project'],
query: 'foo:bar',
queryDataset: 'transaction-like',
}),
})
);
});
});