grafana_bak/public/app/plugins/datasource/loki/LokiVariableSupport.test.ts
2025-04-01 10:38:02 +09:00

115 lines
3.2 KiB
TypeScript

import { firstValueFrom } from 'rxjs';
import { dateTime, getDefaultTimeRange } from '@grafana/data';
import { LokiVariableSupport } from './LokiVariableSupport';
import { createLokiDatasource } from './__mocks__/datasource';
import { createMetadataRequest } from './__mocks__/metadataRequest';
import { LokiDatasource } from './datasource';
import { LokiVariableQueryType } from './types';
describe('LokiVariableSupport', () => {
let lokiVariableSupport: LokiVariableSupport;
let datasource: LokiDatasource;
beforeEach(() => {
datasource = createLokiDatasource();
jest
.spyOn(datasource, 'metadataRequest')
.mockImplementation(
createMetadataRequest(
{ label1: ['value1', 'value2'], label2: ['value3', 'value4'] },
{ '{label1="value1", label2="value2"}': [{ label5: 'value5' }] }
)
);
lokiVariableSupport = new LokiVariableSupport(datasource);
});
it('should return label names for Loki', async () => {
// label_names()
const response = await lokiVariableSupport.execute(
{ refId: 'test', type: LokiVariableQueryType.LabelNames },
{},
getDefaultTimeRange()
);
expect(response).toEqual([{ text: 'label1' }, { text: 'label2' }]);
});
it('should return label values for Loki when no matcher', async () => {
// label_values(label1)
const response = await lokiVariableSupport.execute(
{
refId: 'test',
type: LokiVariableQueryType.LabelValues,
label: 'label1',
},
{},
getDefaultTimeRange()
);
expect(response).toEqual([{ text: 'value1' }, { text: 'value2' }]);
});
it('should return label values for Loki with matcher', async () => {
// label_values({label1="value1", label2="value2"},label5)
const response = await lokiVariableSupport.execute(
{
refId: 'test',
type: LokiVariableQueryType.LabelValues,
stream: '{label1="value1", label2="value2"}',
label: 'label5',
},
{},
getDefaultTimeRange()
);
expect(response).toEqual([{ text: 'value5' }]);
});
it('should call `metricFindQuery` with the correct parameters', async () => {
// label_values({label1="value1", label2="value2"},label5)
const spy = jest.spyOn(datasource, 'metricFindQuery');
const range = getDefaultTimeRange();
const scopedVars = { foo: { value: 'bar' } };
range.from = dateTime(new Date('2020-01-01T00:00:00Z'));
range.to = dateTime(new Date('2020-01-01T01:00:00Z'));
await firstValueFrom(
lokiVariableSupport.query({
targets: [
{
refId: 'test',
type: LokiVariableQueryType.LabelValues,
stream: '{label1="value1", label2="value2"}',
label: 'label5',
},
],
range,
scopedVars,
requestId: 'test',
interval: '1m',
intervalMs: 60000,
timezone: 'utc',
app: 'explore',
startTime: 0,
})
);
expect(spy).toHaveBeenCalledWith(
{
refId: 'test',
type: LokiVariableQueryType.LabelValues,
stream: '{label1="value1", label2="value2"}',
label: 'label5',
},
{
range,
scopedVars,
}
);
spy.mockRestore();
});
});