Public Dashboards: Query Caching (#51403)
* passes id and uid to PublicDashboardDatasource * betterer results * If for a public dashboard, return the PublicDashboardDataSource first or else getDatasourceSrv.get() will fail bc of no authed user. Added some unit tests for resolving the uid from the many possible datasource types. * updates betterer * Exports DashboardService. Adds method to DashboardService to build anonymous user for use with public dashboards where there is no authed user. Adds method on dashboard_queries to get all dashboard uids from a dashboard. * refactors to get unique datasource uids * Adds tests for getting all unique datasource uids off a dashboard * adds test for building anonymous user with read and query actions that are scoped to each datasource uid in the dashboard * updates casing of DashboardService * updates test case to have additional panel with a different datasource * gives default interval to public dashboard data source
This commit is contained in:
@@ -1,9 +1,14 @@
|
||||
import { of } from 'rxjs';
|
||||
import { BackendSrv, BackendSrvRequest } from 'src/services';
|
||||
|
||||
import { DataQueryRequest, DataSourceRef } from '@grafana/data';
|
||||
import { DataQueryRequest, DataSourceInstanceSettings, DataSourceRef } from '@grafana/data';
|
||||
|
||||
import { PublicDashboardDataSource } from '../../../../public/app/features/dashboard/services/PublicDashboardDataSource';
|
||||
import {
|
||||
PUBLIC_DATASOURCE,
|
||||
PublicDashboardDataSource,
|
||||
} from '../../../../public/app/features/dashboard/services/PublicDashboardDataSource';
|
||||
|
||||
import { DataSourceWithBackend } from './DataSourceWithBackend';
|
||||
|
||||
const mockDatasourceRequest = jest.fn();
|
||||
|
||||
@@ -28,7 +33,7 @@ describe('PublicDashboardDatasource', () => {
|
||||
mockDatasourceRequest.mockReset();
|
||||
mockDatasourceRequest.mockReturnValue(Promise.resolve({}));
|
||||
|
||||
const ds = new PublicDashboardDataSource();
|
||||
const ds = new PublicDashboardDataSource('public');
|
||||
const panelId = 1;
|
||||
const publicDashboardAccessToken = 'abc123';
|
||||
|
||||
@@ -47,4 +52,27 @@ describe('PublicDashboardDatasource', () => {
|
||||
`/api/public/dashboards/${publicDashboardAccessToken}/panels/${panelId}/query`
|
||||
);
|
||||
});
|
||||
|
||||
test('returns public datasource uid when datasource passed in is null', () => {
|
||||
let ds = new PublicDashboardDataSource(null);
|
||||
expect(ds.uid).toBe(PUBLIC_DATASOURCE);
|
||||
});
|
||||
|
||||
test('returns datasource when datasource passed in is a string', () => {
|
||||
let ds = new PublicDashboardDataSource('theDatasourceUid');
|
||||
expect(ds.uid).toBe('theDatasourceUid');
|
||||
});
|
||||
|
||||
test('returns datasource uid when datasource passed in is a DataSourceRef implementation', () => {
|
||||
const datasource = { type: 'datasource', uid: 'abc123' };
|
||||
let ds = new PublicDashboardDataSource(datasource);
|
||||
expect(ds.uid).toBe('abc123');
|
||||
});
|
||||
|
||||
test('returns datasource uid when datasource passed in is a DatasourceApi instance', () => {
|
||||
const settings: DataSourceInstanceSettings = { id: 1, uid: 'abc123' } as DataSourceInstanceSettings;
|
||||
const datasource = new DataSourceWithBackend(settings);
|
||||
let ds = new PublicDashboardDataSource(datasource);
|
||||
expect(ds.uid).toBe('abc123');
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user