From 4871cd8825183b89c477a6fd167f6d684a3fd1b5 Mon Sep 17 00:00:00 2001 From: Haris Rozajac <58232930+harisrozajac@users.noreply.github.com> Date: Fri, 13 Dec 2024 15:29:22 -0700 Subject: [PATCH] Dashboard SchemaV2: v2->scene tests for layout, transformations (#97819) * Tests for layout, transformations; displayMode * remove fixme; update helper with the correct type * Rename to transparent * Fix --- .../schema/dashboard/v2alpha0/dashboard.gen.ts | 1 + .../dashboard/v2alpha0/dashboard.schema.cue | 1 + .../src/schema/dashboard/v2alpha0/examples.ts | 4 ++-- .../transformSaveModelSchemaV2ToScene.test.ts | 17 ++++++++++++++++- .../transformSaveModelSchemaV2ToScene.ts | 3 +-- .../dashboard-scene/v2schema/test-helpers.ts | 7 ++++--- 6 files changed, 25 insertions(+), 8 deletions(-) diff --git a/packages/grafana-schema/src/schema/dashboard/v2alpha0/dashboard.gen.ts b/packages/grafana-schema/src/schema/dashboard/v2alpha0/dashboard.gen.ts index b80f145fab1..44f81fd03bf 100644 --- a/packages/grafana-schema/src/schema/dashboard/v2alpha0/dashboard.gen.ts +++ b/packages/grafana-schema/src/schema/dashboard/v2alpha0/dashboard.gen.ts @@ -700,6 +700,7 @@ export interface PanelSpec { links: DataLink[]; data: QueryGroupKind; vizConfig: VizConfigKind; + transparent?: boolean; } export const defaultPanelSpec = (): PanelSpec => ({ diff --git a/packages/grafana-schema/src/schema/dashboard/v2alpha0/dashboard.schema.cue b/packages/grafana-schema/src/schema/dashboard/v2alpha0/dashboard.schema.cue index 10a4e712f53..d6e587449a3 100644 --- a/packages/grafana-schema/src/schema/dashboard/v2alpha0/dashboard.schema.cue +++ b/packages/grafana-schema/src/schema/dashboard/v2alpha0/dashboard.schema.cue @@ -485,6 +485,7 @@ PanelSpec: { links: [...DataLink] data: QueryGroupKind vizConfig: VizConfigKind + transparent?: bool } PanelKind: { diff --git a/packages/grafana-schema/src/schema/dashboard/v2alpha0/examples.ts b/packages/grafana-schema/src/schema/dashboard/v2alpha0/examples.ts index 1ba8b1db5ca..198d6fe62a5 100644 --- a/packages/grafana-schema/src/schema/dashboard/v2alpha0/examples.ts +++ b/packages/grafana-schema/src/schema/dashboard/v2alpha0/examples.ts @@ -194,8 +194,8 @@ export const handyTestingSchema: DashboardV2Spec = { kind: 'ElementReference', name: 'test-panel-uid', }, - height: 0, - width: 0, + height: 100, + width: 200, x: 0, y: 0, }, diff --git a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.test.ts b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.test.ts index 96025a0c76d..f8ed28b694c 100644 --- a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.test.ts +++ b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.test.ts @@ -12,6 +12,7 @@ import { sceneGraph, GroupByVariable, AdHocFiltersVariable, + SceneDataTransformer, } from '@grafana/scenes'; import { AdhocVariableKind, @@ -29,6 +30,7 @@ import { DashboardWithAccessInfo } from 'app/features/dashboard/api/dashboard_ap import { MIXED_DATASOURCE_NAME } from 'app/plugins/datasource/mixed/MixedDataSource'; import { DashboardDataLayerSet } from '../scene/DashboardDataLayerSet'; +import { DefaultGridLayoutManager } from '../scene/layout-default/DefaultGridLayoutManager'; import { DashboardLayoutManager } from '../scene/types'; import { dashboardSceneGraph } from '../utils/dashboardSceneGraph'; import { getQueryRunnerFor } from '../utils/utils'; @@ -208,7 +210,20 @@ describe('transformSaveModelSchemaV2ToScene', () => { const vizPanel = vizPanels[0]; validateVizPanel(vizPanel, dash); - // FIXME: Tests for layout + // Layout + const layout = scene.state.body as DefaultGridLayoutManager; + expect(layout.state.grid.state.children.length).toBe(1); + expect(layout.state.grid.state.children[0].state.key).toBe(`grid-item-${Object.keys(dash.elements)[0]}`); + const gridLayoutItemSpec = dash.layout.spec.items[0].spec; + expect(layout.state.grid.state.children[0].state.width).toBe(gridLayoutItemSpec.width); + expect(layout.state.grid.state.children[0].state.height).toBe(gridLayoutItemSpec.height); + expect(layout.state.grid.state.children[0].state.x).toBe(gridLayoutItemSpec.x); + expect(layout.state.grid.state.children[0].state.y).toBe(gridLayoutItemSpec.y); + + // Transformations + expect((vizPanel.state.$data as SceneDataTransformer)?.state.transformations[0]).toEqual( + dash.elements['test-panel-uid'].spec.data.spec.transformations[0].spec + ); }); it('should set panel ds if it is mixed DS', () => { diff --git a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts index 32f44090e94..86ec1760744 100644 --- a/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts +++ b/public/app/features/dashboard-scene/serialization/transformSaveModelSchemaV2ToScene.ts @@ -238,8 +238,7 @@ function buildVizPanel(panel: PanelKind): VizPanel { options: panel.spec.vizConfig.spec.options, fieldConfig: transformMappingsToV1(panel.spec.vizConfig.spec.fieldConfig), pluginVersion: panel.spec.vizConfig.spec.pluginVersion, - // FIXME: Transparent is not added to the schema yet - // displayMode: panel.spec.transparent ? 'transparent' : undefined, + displayMode: panel.spec.transparent ? 'transparent' : 'default', hoverHeader: !panel.spec.title && !timeOverrideShown, hoverHeaderOffset: 0, $data: createPanelDataProvider(panel), diff --git a/public/app/features/dashboard-scene/v2schema/test-helpers.ts b/public/app/features/dashboard-scene/v2schema/test-helpers.ts index 94834f5a483..dc18f36e38d 100644 --- a/public/app/features/dashboard-scene/v2schema/test-helpers.ts +++ b/public/app/features/dashboard-scene/v2schema/test-helpers.ts @@ -1,7 +1,7 @@ import { AdHocFiltersVariable, + CustomVariable, DataSourceVariable, - GroupByVariable, QueryVariable, SceneDataTransformer, SceneObject, @@ -54,8 +54,8 @@ export function validateVariable< expect(sceneVariable?.state.datasource).toBe(variableKind.spec.datasource); expect(sceneVariable?.state.query).toBe(variableKind.spec.query); } - if (sceneVariable instanceof GroupByVariable && variableKind.kind === 'CustomVariable') { - expect(sceneVariable?.state.datasource).toBe(variableKind.spec.query); + if (sceneVariable instanceof CustomVariable && variableKind.kind === 'CustomVariable') { + expect(sceneVariable?.state.query).toBe(variableKind.spec.query); } } @@ -67,6 +67,7 @@ export function validateVizPanel(vizPanel: VizPanel, dash: DashboardV2Spec) { expect(vizPanel.state.options).toEqual(dash.elements['test-panel-uid'].spec.vizConfig.spec.options); expect(vizPanel.state.fieldConfig).toEqual(dash.elements['test-panel-uid'].spec.vizConfig.spec.fieldConfig); expect(vizPanel.state.key).toBe(dash.elements['test-panel-uid'].spec.uid); + expect(vizPanel.state.displayMode).toBe(dash.elements['test-panel-uid'].spec.transparent ? 'transparent' : 'default'); expect(vizPanel.state.$data).toBeInstanceOf(SceneDataTransformer); const dataTransformer = vizPanel.state.$data as SceneDataTransformer;