84 lines
3.0 KiB
TypeScript
84 lines
3.0 KiB
TypeScript
import { config } from '@grafana/runtime';
|
|
import { sceneGraph } from '@grafana/scenes';
|
|
import { DashboardScene } from 'app/features/dashboard-scene/scene/DashboardScene';
|
|
|
|
import { getClosestScopesFacade } from '../utils';
|
|
|
|
import { applyScopes, cancelScopes, openSelector, selectResultCloud, updateScopes } from './utils/actions';
|
|
import { expectNotDashboardReload, expectScopesSelectorValue } from './utils/assertions';
|
|
import { fetchSelectedScopesSpy, getDatasource, getInstanceSettings, getMock, mocksScopes } from './utils/mocks';
|
|
import { renderDashboard, resetScenes } from './utils/render';
|
|
|
|
jest.mock('@grafana/runtime', () => ({
|
|
__esModule: true,
|
|
...jest.requireActual('@grafana/runtime'),
|
|
useChromeHeaderHeight: jest.fn(),
|
|
getBackendSrv: () => ({ get: getMock }),
|
|
getDataSourceSrv: () => ({ get: getDatasource, getInstanceSettings }),
|
|
usePluginLinks: jest.fn().mockReturnValue({ links: [] }),
|
|
}));
|
|
|
|
describe('Selector', () => {
|
|
let dashboardScene: DashboardScene;
|
|
|
|
beforeAll(() => {
|
|
config.featureToggles.scopeFilters = true;
|
|
config.featureToggles.groupByVariable = true;
|
|
});
|
|
|
|
beforeEach(() => {
|
|
dashboardScene = renderDashboard();
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await resetScenes();
|
|
});
|
|
|
|
it('Fetches scope details on save', async () => {
|
|
await openSelector();
|
|
await selectResultCloud();
|
|
await applyScopes();
|
|
expect(fetchSelectedScopesSpy).toHaveBeenCalled();
|
|
expect(getClosestScopesFacade(dashboardScene)?.value).toEqual(
|
|
mocksScopes.filter(({ metadata: { name } }) => name === 'cloud')
|
|
);
|
|
});
|
|
|
|
it('Does not save the scopes on close', async () => {
|
|
await openSelector();
|
|
await selectResultCloud();
|
|
await cancelScopes();
|
|
expect(fetchSelectedScopesSpy).not.toHaveBeenCalled();
|
|
expect(getClosestScopesFacade(dashboardScene)?.value).toEqual([]);
|
|
});
|
|
|
|
it('Shows selected scopes', async () => {
|
|
await updateScopes(['grafana']);
|
|
expectScopesSelectorValue('Grafana');
|
|
});
|
|
|
|
it('Does not reload the dashboard on scope change', async () => {
|
|
await updateScopes(['grafana']);
|
|
expectNotDashboardReload();
|
|
});
|
|
|
|
it('Adds scopes to enrichers', async () => {
|
|
const queryRunner = sceneGraph.getQueryController(dashboardScene)!;
|
|
|
|
await updateScopes(['grafana']);
|
|
let scopes = mocksScopes.filter(({ metadata: { name } }) => name === 'grafana');
|
|
expect(dashboardScene.enrichDataRequest(queryRunner).scopes).toEqual(scopes);
|
|
expect(dashboardScene.enrichFiltersRequest().scopes).toEqual(scopes);
|
|
|
|
await updateScopes(['grafana', 'mimir']);
|
|
scopes = mocksScopes.filter(({ metadata: { name } }) => name === 'grafana' || name === 'mimir');
|
|
expect(dashboardScene.enrichDataRequest(queryRunner).scopes).toEqual(scopes);
|
|
expect(dashboardScene.enrichFiltersRequest().scopes).toEqual(scopes);
|
|
|
|
await updateScopes(['mimir']);
|
|
scopes = mocksScopes.filter(({ metadata: { name } }) => name === 'mimir');
|
|
expect(dashboardScene.enrichDataRequest(queryRunner).scopes).toEqual(scopes);
|
|
expect(dashboardScene.enrichFiltersRequest().scopes).toEqual(scopes);
|
|
});
|
|
});
|