From 4751013a91216086bd1b11cb7e17e72bb2b2f6a4 Mon Sep 17 00:00:00 2001 From: Joey <90795735+joey-grafana@users.noreply.github.com> Date: Mon, 11 Dec 2023 13:14:22 +0000 Subject: [PATCH] Pyroscope: Decouple from templateSrv (#79068) * Decouple templateSrv * Update test --- .../QueryEditor/QueryLinkExtension.test.tsx | 7 ++++++ .../VariableQueryEditor.test.tsx | 16 ++++++++++++-- .../datasource.test.ts | 22 ++++++++++++++----- 3 files changed, 37 insertions(+), 8 deletions(-) diff --git a/public/app/plugins/datasource/grafana-pyroscope-datasource/QueryEditor/QueryLinkExtension.test.tsx b/public/app/plugins/datasource/grafana-pyroscope-datasource/QueryEditor/QueryLinkExtension.test.tsx index 28bfef9ecf6..893a23f5b53 100644 --- a/public/app/plugins/datasource/grafana-pyroscope-datasource/QueryEditor/QueryLinkExtension.test.tsx +++ b/public/app/plugins/datasource/grafana-pyroscope-datasource/QueryEditor/QueryLinkExtension.test.tsx @@ -17,6 +17,13 @@ jest.mock('@grafana/runtime', () => ({ ...jest.requireActual('@grafana/runtime'), setPluginExtensionGetter: jest.fn(), getPluginLinkExtensions: jest.fn(), + getTemplateSrv: () => { + return { + replace: (query: string): string => { + return query.replace(/\$var/g, 'interpolated'); + }, + }; + }, })); const getPluginLinkExtensionsMock = jest.mocked(getPluginLinkExtensions); diff --git a/public/app/plugins/datasource/grafana-pyroscope-datasource/VariableQueryEditor.test.tsx b/public/app/plugins/datasource/grafana-pyroscope-datasource/VariableQueryEditor.test.tsx index 1afb1ebe52d..4442512e00c 100644 --- a/public/app/plugins/datasource/grafana-pyroscope-datasource/VariableQueryEditor.test.tsx +++ b/public/app/plugins/datasource/grafana-pyroscope-datasource/VariableQueryEditor.test.tsx @@ -2,12 +2,24 @@ import { render, screen } from '@testing-library/react'; import React from 'react'; import { DataSourceInstanceSettings } from '@grafana/data'; -import { TemplateSrv } from 'app/features/templating/template_srv'; +import { getTemplateSrv } from '@grafana/runtime'; import { VariableQueryEditor } from './VariableQueryEditor'; import { PyroscopeDataSource } from './datasource'; import { PyroscopeDataSourceOptions } from './types'; +jest.mock('@grafana/runtime', () => { + const actual = jest.requireActual('@grafana/runtime'); + return { + ...actual, + getTemplateSrv: () => { + return { + replace: jest.fn(), + }; + }, + }; +}); + describe('VariableQueryEditor', () => { it('renders correctly with type profileType', () => { render( @@ -69,7 +81,7 @@ describe('VariableQueryEditor', () => { }); function getMockDatasource() { - const ds = new PyroscopeDataSource({} as DataSourceInstanceSettings, new TemplateSrv()); + const ds = new PyroscopeDataSource({} as DataSourceInstanceSettings, getTemplateSrv()); ds.getResource = jest.fn(); (ds.getResource as jest.Mock).mockImplementation(async (type: string) => { if (type === 'profileTypes') { diff --git a/public/app/plugins/datasource/grafana-pyroscope-datasource/datasource.test.ts b/public/app/plugins/datasource/grafana-pyroscope-datasource/datasource.test.ts index f2c296e31eb..b2bc6791e09 100644 --- a/public/app/plugins/datasource/grafana-pyroscope-datasource/datasource.test.ts +++ b/public/app/plugins/datasource/grafana-pyroscope-datasource/datasource.test.ts @@ -6,13 +6,26 @@ import { PluginType, DataSourceJsonData, } from '@grafana/data'; -import { setPluginExtensionGetter, getBackendSrv, setBackendSrv } from '@grafana/runtime'; -import { TemplateSrv } from 'app/features/templating/template_srv'; +import { setPluginExtensionGetter, getBackendSrv, setBackendSrv, getTemplateSrv } from '@grafana/runtime'; import { defaultPyroscopeQueryType } from './dataquery.gen'; import { normalizeQuery, PyroscopeDataSource } from './datasource'; import { Query } from './types'; +jest.mock('@grafana/runtime', () => { + const actual = jest.requireActual('@grafana/runtime'); + return { + ...actual, + getTemplateSrv: () => { + return { + replace: (query: string): string => { + return query.replace(/\$var/g, 'interpolated'); + }, + }; + }, + }; +}); + /** The datasource QueryEditor fetches datasource settings to send to the extension's `configure` method */ export function mockFetchPyroscopeDatasourceSettings( datasourceSettings?: Partial> @@ -80,10 +93,7 @@ describe('Pyroscope data source', () => { }); describe('applyTemplateVariables', () => { - const templateSrv = new TemplateSrv(); - templateSrv.replace = jest.fn((query: string): string => { - return query.replace(/\$var/g, 'interpolated'); - }); + const templateSrv = getTemplateSrv(); it('should not update labelSelector if there are no template variables', () => { ds = new PyroscopeDataSource(defaultSettings, templateSrv);