diff --git a/packages/grafana-data/src/types/datasource.ts b/packages/grafana-data/src/types/datasource.ts index 9a251d300e7..2c2e7b7eb30 100644 --- a/packages/grafana-data/src/types/datasource.ts +++ b/packages/grafana-data/src/types/datasource.ts @@ -591,6 +591,9 @@ export interface DataSourceInstanceSettings ({ +jest.mock('./plugin_loader', () => ({ importDataSourcePlugin: (meta: DataSourcePluginMeta) => { return Promise.resolve(new DataSourcePlugin(TestDataSource as any)); }, @@ -128,13 +128,21 @@ describe('datasource_srv', () => { describe('when getting instance settings', () => { it('should work by name or uid', () => { - expect(dataSourceSrv.getInstanceSettings('mmm')).toBe(dataSourceSrv.getInstanceSettings('uid-code-mmm')); + const ds = dataSourceSrv.getInstanceSettings('mmm'); + expect(dataSourceSrv.getInstanceSettings('uid-code-mmm')).toBe(ds); + expect(dataSourceSrv.getInstanceSettings({ uid: 'uid-code-mmm' })).toBe(ds); }); it('should work with variable', () => { const ds = dataSourceSrv.getInstanceSettings('${datasource}'); expect(ds?.name).toBe('${datasource}'); expect(ds?.uid).toBe('${datasource}'); + expect(ds?.rawRef).toMatchInlineSnapshot(` + Object { + "type": "test-db", + "uid": "uid-code-BBB", + } + `); }); it('should not set isDefault when being fetched via variable', () => { @@ -146,6 +154,12 @@ describe('datasource_srv', () => { const ds = dataSourceSrv.getInstanceSettings('${datasourceDefault}'); expect(ds?.name).toBe('${datasourceDefault}'); expect(ds?.uid).toBe('${datasourceDefault}'); + expect(ds?.rawRef).toMatchInlineSnapshot(` + Object { + "type": "test-db", + "uid": "uid-code-BBB", + } + `); }); }); diff --git a/public/app/features/plugins/datasource_srv.ts b/public/app/features/plugins/datasource_srv.ts index ac70b5fb410..4eeb058982b 100644 --- a/public/app/features/plugins/datasource_srv.ts +++ b/public/app/features/plugins/datasource_srv.ts @@ -101,6 +101,7 @@ export class DatasourceSrv implements DataSourceService { isDefault: false, name: nameOrUid, uid: nameOrUid, + rawRef: { type: dsSettings.type, uid: dsSettings.uid }, }; } diff --git a/public/app/features/query/state/PanelQueryRunner.test.ts b/public/app/features/query/state/PanelQueryRunner.test.ts index 2fa592dac1a..d6fb1b1b732 100644 --- a/public/app/features/query/state/PanelQueryRunner.test.ts +++ b/public/app/features/query/state/PanelQueryRunner.test.ts @@ -114,6 +114,7 @@ function describeQueryRunnerScenario( ctx.queryCalledWith = options; return Promise.resolve(response); }, + getRef: () => ({ type: 'test', uid: 'TestDB-uid' }), testDatasource: jest.fn(), }; diff --git a/public/app/features/query/state/PanelQueryRunner.ts b/public/app/features/query/state/PanelQueryRunner.ts index 80513be6b20..8b0ce2b93f9 100644 --- a/public/app/features/query/state/PanelQueryRunner.ts +++ b/public/app/features/query/state/PanelQueryRunner.ts @@ -235,7 +235,7 @@ export class PanelQueryRunner { // Attach the data source name to each query request.targets = request.targets.map((query) => { if (!query.datasource) { - query.datasource = { uid: ds.uid }; + query.datasource = ds.getRef(); } return query; });