2023-08-29 20:17:55 +08:00
|
|
|
import { sceneGraph, SceneGridItem, SceneGridLayout, VizPanel } from '@grafana/scenes';
|
2023-07-12 19:37:26 +08:00
|
|
|
|
|
|
|
|
import { DashboardScene } from './DashboardScene';
|
|
|
|
|
|
|
|
|
|
describe('DashboardScene', () => {
|
|
|
|
|
describe('Given a standard scene', () => {
|
|
|
|
|
it('Should set inspectPanelKey when url has inspect key', () => {
|
|
|
|
|
const scene = buildTestScene();
|
2023-08-30 16:09:47 +08:00
|
|
|
scene.urlSync?.updateFromUrl({ inspect: '2' });
|
2023-09-05 19:51:46 +08:00
|
|
|
expect(scene.state.inspectPanelKey).toBe('2');
|
2023-07-12 19:37:26 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('Should handle inspect key that is not found', () => {
|
|
|
|
|
const scene = buildTestScene();
|
|
|
|
|
scene.urlSync?.updateFromUrl({ inspect: '12321' });
|
2023-09-05 19:51:46 +08:00
|
|
|
expect(scene.state.inspectPanelKey).toBe(undefined);
|
2023-07-12 19:37:26 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('Should set viewPanelKey when url has viewPanel', () => {
|
|
|
|
|
const scene = buildTestScene();
|
2023-08-30 16:09:47 +08:00
|
|
|
scene.urlSync?.updateFromUrl({ viewPanel: '2' });
|
2023-09-05 19:51:46 +08:00
|
|
|
expect(scene.state.viewPanelKey).toBe('2');
|
2023-07-12 19:37:26 +08:00
|
|
|
});
|
|
|
|
|
});
|
2023-08-29 20:17:55 +08:00
|
|
|
|
|
|
|
|
describe('Editing and discarding', () => {
|
|
|
|
|
describe('Given scene in edit mode', () => {
|
|
|
|
|
let scene: DashboardScene;
|
|
|
|
|
|
|
|
|
|
beforeEach(() => {
|
|
|
|
|
scene = buildTestScene();
|
|
|
|
|
scene.onEnterEditMode();
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('Should set isEditing to true', () => {
|
|
|
|
|
expect(scene.state.isEditing).toBe(true);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it('A change to griditem pos should set isDirty true', () => {
|
|
|
|
|
const gridItem = sceneGraph.findObject(scene, (p) => p.state.key === 'griditem-1') as SceneGridItem;
|
|
|
|
|
gridItem.setState({ x: 10, y: 0, width: 10, height: 10 });
|
|
|
|
|
|
|
|
|
|
expect(scene.state.isDirty).toBe(true);
|
|
|
|
|
|
|
|
|
|
// verify can discard change
|
|
|
|
|
scene.onDiscard();
|
|
|
|
|
|
|
|
|
|
const gridItem2 = sceneGraph.findObject(scene, (p) => p.state.key === 'griditem-1') as SceneGridItem;
|
|
|
|
|
expect(gridItem2.state.x).toBe(0);
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
});
|
2023-07-12 19:37:26 +08:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
function buildTestScene() {
|
|
|
|
|
const scene = new DashboardScene({
|
|
|
|
|
title: 'hello',
|
|
|
|
|
body: new SceneGridLayout({
|
|
|
|
|
children: [
|
|
|
|
|
new SceneGridItem({
|
2023-08-29 20:17:55 +08:00
|
|
|
key: 'griditem-1',
|
|
|
|
|
x: 0,
|
2023-07-12 19:37:26 +08:00
|
|
|
body: new VizPanel({
|
|
|
|
|
title: 'Panel A',
|
|
|
|
|
key: 'panel-1',
|
|
|
|
|
pluginId: 'table',
|
|
|
|
|
}),
|
|
|
|
|
}),
|
|
|
|
|
new SceneGridItem({
|
|
|
|
|
body: new VizPanel({
|
|
|
|
|
title: 'Panel B',
|
|
|
|
|
key: 'panel-2',
|
|
|
|
|
pluginId: 'table',
|
|
|
|
|
}),
|
|
|
|
|
}),
|
|
|
|
|
],
|
|
|
|
|
}),
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
return scene;
|
|
|
|
|
}
|