grafana/public/app/plugins/datasource/tempo/datasource.test.ts
Zoltán Bedi 862f09376f
Tempo: convert to backend data source (#31618)
* Tempo: Support opentelemetry response

* Tempo: convert Tempo to backend data source

* Update data source test

* Fix lint issues

* Apply suggestions from code review

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>

* Return error when trace not found

Co-authored-by: Arve Knudsen <arve.knudsen@gmail.com>
2021-03-04 18:23:02 +01:00

54 lines
1.6 KiB
TypeScript

import { DataSourceInstanceSettings, FieldType, MutableDataFrame, PluginType } from '@grafana/data';
import { backendSrv } from 'app/core/services/backend_srv';
import { of } from 'rxjs';
import { createFetchResponse } from 'test/helpers/createFetchResponse';
import { TempoDatasource } from './datasource';
jest.mock('../../../../../packages/grafana-runtime/src/services/backendSrv.ts', () => ({
getBackendSrv: () => backendSrv,
}));
jest.mock('../../../../../packages/grafana-runtime/src/utils/queryResponse.ts', () => ({
toDataQueryResponse: (resp: any) => resp,
}));
describe('Tempo data source', () => {
beforeEach(() => {
jest.clearAllMocks();
});
it('returns trace when queried', async () => {
const responseDataFrame = new MutableDataFrame({ fields: [{ name: 'trace', values: ['{}'] }] });
setupBackendSrv([responseDataFrame]);
const ds = new TempoDatasource(defaultSettings);
await expect(ds.query({ targets: [{ query: '12345' }] } as any)).toEmitValuesWith((response) => {
const field = response[0].data[0].fields[0];
expect(field.name).toBe('trace');
expect(field.type).toBe(FieldType.trace);
});
});
});
function setupBackendSrv(response: any) {
const defaultMock = () => of(createFetchResponse(response));
const fetchMock = jest.spyOn(backendSrv, 'fetch');
fetchMock.mockImplementation(defaultMock);
}
const defaultSettings: DataSourceInstanceSettings = {
id: 0,
uid: '0',
type: 'tracing',
name: 'jaeger',
meta: {
id: 'jaeger',
name: 'jaeger',
type: PluginType.datasource,
info: {} as any,
module: '',
baseUrl: '',
},
jsonData: {},
};