Files
Josh Hunt 3c6e0e8ef8 Chore: ESlint import order (#44959)
* Add and configure eslint-plugin-import

* Fix the lint:ts npm command

* Autofix + prettier all the files

* Manually fix remaining files

* Move jquery code in jest-setup to external file to safely reorder imports

* Resolve issue caused by circular dependencies within Prometheus

* Update .betterer.results

* Fix missing // @ts-ignore

* ignore iconBundle.ts

* Fix missing // @ts-ignore
2022-04-22 14:33:13 +01:00

206 lines
6.1 KiB
TypeScript

import { ReducerID } from '@grafana/data';
import { ExpressionQuery, ExpressionQueryType } from 'app/features/expressions/types';
import { defaultCondition } from 'app/features/expressions/utils/expressionTypes';
import { AlertQuery } from 'app/types/unified-alerting-dto';
import { getTimeRangeForExpression } from './timeRange';
describe('timeRange', () => {
describe('getTimeRangeForExpression', () => {
describe('classic condition', () => {
it('should return referenced query timeRange for classic condition', () => {
const expressionQuery: AlertQuery = {
refId: 'B',
queryType: 'expression',
datasourceUid: '-100',
model: {
queryType: 'query',
datasource: '__expr__',
refId: 'B',
conditions: [{ ...defaultCondition, query: { params: ['A'] } }],
type: ExpressionQueryType.classic,
} as ExpressionQuery,
};
const query: AlertQuery = {
refId: 'A',
relativeTimeRange: { from: 300, to: 0 },
queryType: 'query',
datasourceUid: 'dsuid',
model: { refId: 'A' },
};
const queries: AlertQuery[] = [query, expressionQuery];
expect(getTimeRangeForExpression(expressionQuery.model as ExpressionQuery, queries)).toEqual({
from: 300,
to: 0,
});
});
it('should return the min and max time range', () => {
const expressionQuery: AlertQuery = {
refId: 'C',
queryType: 'expression',
datasourceUid: '-100',
model: {
queryType: 'query',
datasource: '__expr__',
refId: 'C',
conditions: [
{ ...defaultCondition, query: { params: ['A'] } },
{ ...defaultCondition, query: { params: ['B'] } },
],
type: ExpressionQueryType.classic,
} as ExpressionQuery,
};
const queryA: AlertQuery = {
refId: 'A',
relativeTimeRange: { from: 300, to: 0 },
datasourceUid: 'dsuid',
model: { refId: 'A' },
queryType: 'query',
};
const queryB: AlertQuery = {
refId: 'B',
relativeTimeRange: { from: 600, to: 300 },
datasourceUid: 'dsuid',
model: { refId: 'B' },
queryType: 'query',
};
const queries: AlertQuery[] = [queryA, queryB, expressionQuery];
expect(getTimeRangeForExpression(expressionQuery.model as ExpressionQuery, queries)).toEqual({
from: 600,
to: 0,
});
});
});
});
describe('math', () => {
it('should get timerange for referenced query', () => {
const expressionQuery: AlertQuery = {
refId: 'B',
queryType: 'expression',
datasourceUid: '-100',
model: {
queryType: 'query',
datasource: '__expr__',
refId: 'B',
expression: '$A > 10',
type: ExpressionQueryType.math,
} as ExpressionQuery,
};
const query: AlertQuery = {
refId: 'A',
datasourceUid: 'dsuid',
relativeTimeRange: { from: 300, to: 0 },
model: { refId: 'A' },
queryType: 'query',
};
expect(getTimeRangeForExpression(expressionQuery.model as ExpressionQuery, [expressionQuery, query]));
});
it('should get time ranges for multiple referenced queries', () => {
const expressionQuery: AlertQuery = {
refId: 'C',
queryType: 'expression',
datasourceUid: '-100',
model: {
queryType: 'query',
datasource: '__expr__',
refId: 'C',
expression: '$A > 10 && $queryB > 20',
type: ExpressionQueryType.math,
} as ExpressionQuery,
};
const queryA: AlertQuery = {
refId: 'A',
relativeTimeRange: { from: 300, to: 0 },
datasourceUid: 'dsuid',
model: { refId: 'A' },
queryType: 'query',
};
const queryB: AlertQuery = {
refId: 'queryB',
relativeTimeRange: { from: 600, to: 300 },
datasourceUid: 'dsuid',
model: { refId: 'queryB' },
queryType: 'query',
};
expect(
getTimeRangeForExpression(expressionQuery.model as ExpressionQuery, [expressionQuery, queryA, queryB])
).toEqual({ from: 600, to: 0 });
});
});
describe('resample', () => {
it('should get referenced timerange for resample expression', () => {
const expressionQuery: AlertQuery = {
refId: 'B',
queryType: 'expression',
datasourceUid: '-100',
model: {
queryType: 'query',
datasource: '__expr__',
refId: 'B',
expression: 'A',
type: ExpressionQueryType.resample,
window: '10s',
} as ExpressionQuery,
};
const queryA: AlertQuery = {
refId: 'A',
relativeTimeRange: { from: 300, to: 0 },
datasourceUid: 'dsuid',
model: { refId: 'A' },
queryType: 'query',
};
const queries = [queryA, expressionQuery];
expect(getTimeRangeForExpression(expressionQuery.model as ExpressionQuery, queries)).toEqual({
from: 300,
to: 0,
});
});
});
describe('reduce', () => {
it('should get referenced timerange for reduce expression', () => {
const expressionQuery: AlertQuery = {
refId: 'B',
queryType: 'expression',
datasourceUid: '-100',
model: {
queryType: 'query',
datasource: '__expr__',
refId: 'B',
expression: 'A',
type: ExpressionQueryType.reduce,
reducer: ReducerID.max,
} as ExpressionQuery,
};
const queryA: AlertQuery = {
refId: 'A',
relativeTimeRange: { from: 300, to: 0 },
datasourceUid: 'dsuid',
model: { refId: 'A' },
queryType: 'query',
};
const queries = [queryA, expressionQuery];
expect(getTimeRangeForExpression(expressionQuery.model as ExpressionQuery, queries)).toEqual({
from: 300,
to: 0,
});
});
});
});