grafana/public/app/plugins/datasource/grafana-pyroscope-datasource/datasource.test.ts

109 lines
3.5 KiB
TypeScript
Raw Normal View History

import { AbstractLabelOperator, DataSourceInstanceSettings, PluginMetaInfo, PluginType } from '@grafana/data';
import { TemplateSrv } from 'app/features/templating/template_srv';
import { defaultPhlareQueryType } from './dataquery.gen';
import { PhlareDataSource } from './datasource';
describe('Phlare data source', () => {
let ds: PhlareDataSource;
beforeEach(() => {
ds = new PhlareDataSource(defaultSettings);
});
describe('importing queries', () => {
it('keeps all labels and values', async () => {
const queries = await ds.importFromAbstractQueries([
{
refId: 'A',
labelMatchers: [
{ name: 'foo', operator: AbstractLabelOperator.Equal, value: 'bar' },
{ name: 'foo2', operator: AbstractLabelOperator.Equal, value: 'bar2' },
],
},
]);
expect(queries[0].labelSelector).toBe('{foo="bar", foo2="bar2"}');
});
});
describe('exporting queries', () => {
it('keeps all labels and values', async () => {
const queries = await ds.exportToAbstractQueries([
{
refId: 'A',
labelSelector: '{foo="bar", foo2="bar2"}',
queryType: 'both',
profileTypeId: '',
groupBy: [''],
},
]);
expect(queries).toMatchObject([
{
refId: 'A',
labelMatchers: [
{ name: 'foo', operator: AbstractLabelOperator.Equal, value: 'bar' },
{ name: 'foo2', operator: AbstractLabelOperator.Equal, value: 'bar2' },
],
},
]);
});
});
describe('applyTemplateVariables', () => {
const interpolationVar = '$interpolationVar';
const interpolationText = 'interpolationText';
const noInterpolation = 'noInterpolation';
it('should not update labelSelector if there are no template variables', () => {
const templateSrv = new TemplateSrv();
templateSrv.replace = jest.fn((query: string): string => {
return query.replace(/\$interpolationVar/g, interpolationText);
});
ds = new PhlareDataSource(defaultSettings, templateSrv);
const query = ds.applyTemplateVariables(defaultQuery(`{${noInterpolation}}`), {});
expect(templateSrv.replace).toBeCalledTimes(1);
expect(query.labelSelector).toBe(`{${noInterpolation}}`);
});
it('should update labelSelector if there are template variables', () => {
const templateSrv = new TemplateSrv();
templateSrv.replace = jest.fn((query: string): string => {
return query.replace(/\$interpolationVar/g, interpolationText);
});
ds = new PhlareDataSource(defaultSettings, templateSrv);
const query = ds.applyTemplateVariables(defaultQuery(`{${interpolationVar}="${interpolationVar}"}`), {
interpolationVar: { text: interpolationText, value: interpolationText },
});
expect(templateSrv.replace).toBeCalledTimes(1);
expect(query.labelSelector).toBe(`{${interpolationText}="${interpolationText}"}`);
});
});
});
const defaultQuery = (query: string) => {
return {
refId: 'x',
groupBy: [],
labelSelector: query,
profileTypeId: '',
queryType: defaultPhlareQueryType,
};
};
const defaultSettings: DataSourceInstanceSettings = {
id: 0,
uid: 'phlare',
type: 'profiling',
name: 'phlare',
access: 'proxy',
meta: {
id: 'phlare',
name: 'phlare',
type: PluginType.datasource,
info: {} as PluginMetaInfo,
module: '',
baseUrl: '',
},
jsonData: {},
readOnly: false,
};