grafana_bak/public/app/features/dashboard-scene/scene/DashboardSceneRenderer.test.tsx
2025-04-01 10:38:02 +09:00

86 lines
2.5 KiB
TypeScript

import { screen } from '@testing-library/react';
import { render } from 'test/test-utils';
import { getPanelPlugin } from '@grafana/data/test/__mocks__/pluginMocks';
import { config, setPluginImportUtils } from '@grafana/runtime';
import { transformSaveModelToScene } from '../serialization/transformSaveModelToScene';
setPluginImportUtils({
importPanelPlugin: (id: string) => Promise.resolve(getPanelPlugin({})),
getPanelPluginFromCache: (id: string) => undefined,
});
jest.mock('@grafana/runtime', () => ({
...jest.requireActual('@grafana/runtime'),
useChromeHeaderHeight: jest.fn(),
getDataSourceSrv: () => {
return {
getInstanceSettings: jest.fn().mockResolvedValue({ uid: 'ds1' }),
};
},
config: {
...jest.requireActual('@grafana/runtime').config,
angularSupportEnabled: true,
panels: {
'briangann-datatable-panel': {
id: 'briangann-datatable-panel',
state: 'deprecated',
angular: { detected: true, hideDeprecation: false },
},
},
},
}));
describe('DashboardSceneRenderer', () => {
it('should render angular deprecation notice when dashboard contains angular components', async () => {
const noticeText = /This dashboard depends on Angular/i;
//enable feature flag angularDeprecationUI
config.featureToggles.angularDeprecationUI = true;
const scene = transformSaveModelToScene({
meta: {},
dashboard: {
title: 'Angular dashboard',
uid: 'uid',
schemaVersion: 0,
// Disabling build in annotations to avoid mocking Grafana data source
annotations: {
list: [
{
builtIn: 1,
datasource: {
type: 'grafana',
uid: '-- Grafana --',
},
enable: false,
hide: true,
iconColor: 'rgba(0, 211, 255, 1)',
name: 'Annotations & Alerts',
type: 'dashboard',
},
],
},
panels: [
{
id: 1,
type: 'briangann-datatable-panel',
gridPos: { x: 0, y: 0, w: 12, h: 6 },
title: 'Angular component',
options: {
showHeader: true,
},
fieldConfig: { defaults: {}, overrides: [] },
datasource: { uid: 'abcdef' },
targets: [{ refId: 'A' }],
},
],
},
});
render(<scene.Component model={scene} />);
expect(await screen.findByText(noticeText)).toBeInTheDocument();
});
});