Files
2024-02-15 17:01:50 +00:00

98 lines
2.9 KiB
TypeScript

import {UserFixture} from 'sentry-fixture/user';
import type {EventViewOptions} from 'sentry/utils/discover/eventView';
import EventView from 'sentry/utils/discover/eventView';
import {createRuleFromEventView} from 'sentry/views/alerts/rules/metric/constants';
import {Dataset, EventTypes} from 'sentry/views/alerts/rules/metric/types';
describe('createRuleFromEventView()', () => {
const commonEventViewProps: EventViewOptions = {
createdBy: UserFixture(),
id: '',
name: '',
start: '',
end: '',
environment: [],
project: [],
fields: [],
query: '',
topEvents: undefined,
display: undefined,
sorts: [],
team: [],
statsPeriod: '14d',
};
it('sets transaction dataset from event.type:transaction', () => {
const eventView = new EventView({
...commonEventViewProps,
query: 'title:"nothing" event.type:transaction',
});
const rule = createRuleFromEventView(eventView);
expect(rule.dataset).toBe(Dataset.TRANSACTIONS);
});
it('sets error dataset from event.type:error', () => {
const eventView = new EventView({
...commonEventViewProps,
query: 'title:"nothing" event.type:error',
});
const rule = createRuleFromEventView(eventView);
expect(rule.dataset).toBe(Dataset.ERRORS);
expect(rule.eventTypes).toEqual([EventTypes.ERROR]);
});
it('removes event.type from query', () => {
const eventView = new EventView({
...commonEventViewProps,
query: 'title:"nothing" event.type:error',
});
const rule = createRuleFromEventView(eventView);
expect(rule.query).toBe('title:"nothing"');
});
it('gets environment from EventView', () => {
const eventView = new EventView({
...commonEventViewProps,
environment: ['beta'],
});
const rule = createRuleFromEventView(eventView);
expect(rule.environment).toBe('beta');
});
it('gets aggregate from EventView.yAxis', () => {
const eventView = new EventView({
...commonEventViewProps,
yAxis: 'count_unique(user)',
});
const rule = createRuleFromEventView(eventView);
expect(rule.aggregate).toBe(eventView.yAxis);
});
it('gets dataset and eventtypes from query', () => {
const eventView = new EventView({
...commonEventViewProps,
query: 'event.type:error or event.type:default something',
});
const rule = createRuleFromEventView(eventView);
expect(rule.dataset).toBe(Dataset.ERRORS);
expect(rule.eventTypes).toEqual([EventTypes.ERROR, EventTypes.DEFAULT]);
});
it('allows pXX transaction querys', () => {
const eventView = EventView.fromSavedQuery({
id: undefined,
name: '',
dateCreated: '',
dateUpdated: '',
version: 1,
query: 'event.type:transaction',
yAxis: ['p95()'],
fields: ['p95()'],
});
const rule = createRuleFromEventView(eventView);
expect(rule.aggregate).toBe('p95(transaction.duration)');
});
});