2025-04-01 10:38:02 +09:00

105 lines
3.3 KiB
TypeScript

import { act, render, screen } from '@testing-library/react';
import { selectors as e2eSelectors } from '@grafana/e2e-selectors';
import {
CustomVariable,
SceneDataTransformer,
SceneQueryRunner,
SceneTimeRange,
SceneVariableSet,
VizPanel,
VizPanelState,
} from '@grafana/scenes';
import { contextSrv } from 'app/core/core';
import { DashboardScene, DashboardSceneState } from 'app/features/dashboard-scene/scene/DashboardScene';
import { DefaultGridLayoutManager } from 'app/features/dashboard-scene/scene/layout-default/DefaultGridLayoutManager';
import { ShareDrawerContext } from '../../ShareDrawer/ShareDrawerContext';
import ShareAlerts from './ShareAlerts';
const selectors = e2eSelectors.pages.ShareDashboardModal.PublicDashboard;
beforeEach(() => {
jest.spyOn(contextSrv, 'hasPermission').mockReturnValue(true);
});
describe('ShareAlerts', () => {
describe('UnsupportedTemplateVariablesAlert', () => {
it('should render alert when hasPermission and the dashboard has template vars', async () => {
await setup(undefined, {
$variables: new SceneVariableSet({
variables: [
new CustomVariable({
name: 'customVar',
query: 'test, test2',
value: 'test',
text: 'test',
}),
],
}),
});
expect(await screen.findByTestId(selectors.TemplateVariablesWarningAlert)).toBeInTheDocument();
});
it('should not render alert when hasPermission but the dashboard has no template vars', async () => {
await setup();
expect(screen.queryByTestId(selectors.TemplateVariablesWarningAlert)).not.toBeInTheDocument();
});
});
describe('UnsupportedDataSourcesAlert', () => {
it('should render alert when hasPermission and the dashboard has unsupported ds', async () => {
await setup({
$data: new SceneDataTransformer({
transformations: [],
$data: new SceneQueryRunner({
datasource: { uid: 'abcdef' },
queries: [{ refId: 'A', datasource: { type: 'abcdef' } }],
}),
}),
});
expect(await screen.findByTestId(selectors.UnsupportedDataSourcesWarningAlert)).toBeInTheDocument();
});
it('should not render alert when hasPermission but the dashboard has no unsupported ds', async () => {
await setup({
$data: new SceneDataTransformer({
transformations: [],
$data: new SceneQueryRunner({
datasource: { uid: 'prometheus' },
queries: [{ refId: 'A', datasource: { type: 'prometheus' } }],
}),
}),
});
expect(screen.queryByTestId(selectors.UnsupportedDataSourcesWarningAlert)).not.toBeInTheDocument();
});
});
});
async function setup(panelState?: Partial<VizPanelState>, dashboardState?: Partial<DashboardSceneState>) {
const panel = new VizPanel({
title: 'Panel A',
pluginId: 'table',
key: 'panel-12',
...panelState,
});
const dashboard = new DashboardScene({
title: 'hello',
uid: 'dash-1',
$timeRange: new SceneTimeRange({}),
body: DefaultGridLayoutManager.fromVizPanels([panel]),
...dashboardState,
});
await act(async () =>
render(
<ShareDrawerContext.Provider value={{ dashboard, onDismiss: () => {} }}>
<ShareAlerts />
</ShareDrawerContext.Provider>
)
);
}