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

124 lines
3.3 KiB
TypeScript

import { FieldType, getDefaultTimeRange, LoadingState, toDataFrame } from '@grafana/data';
import { SceneQueryRunner, SceneTimeRange, VizPanel, VizPanelMenu } from '@grafana/scenes';
import { DashboardScene } from '../../scene/DashboardScene';
import { VizPanelLinks, VizPanelLinksMenu } from '../../scene/PanelLinks';
import { panelMenuBehavior } from '../../scene/PanelMenuBehavior';
import { DefaultGridLayoutManager } from '../../scene/layout-default/DefaultGridLayoutManager';
import { SnapshotTab, SupportSnapshotService } from './SupportSnapshotService';
async function setup() {
const { panel } = await buildTestScene();
return new SupportSnapshotService(panel);
}
describe('SupportSnapshotService', () => {
it('Can create it with default state', async () => {
const service = await setup();
expect(service.state.currentTab).toBe(SnapshotTab.Support);
});
it('Can can build support snapshot dashboard', async () => {
const service = await setup();
await service.buildDebugDashboard();
expect(service.state.snapshot.panels[0].targets[0]).toMatchInlineSnapshot(`
{
"datasource": {
"type": "grafana",
"uid": "grafana",
},
"queryType": "snapshot",
"refId": "A",
"snapshot": [
{
"data": {
"values": [
[
1,
2,
3,
],
[
11,
22,
33,
],
],
},
"schema": {
"fields": [
{
"config": {},
"name": "Time",
"type": "time",
},
{
"config": {},
"name": "Value",
"type": "number",
},
],
"meta": undefined,
"name": "http_requests_total",
"refId": undefined,
},
},
],
}
`);
});
});
async function buildTestScene() {
const menu = new VizPanelMenu({
$behaviors: [panelMenuBehavior],
});
const panel = new VizPanel({
title: 'Panel A',
pluginId: 'timeseries',
key: 'panel-12',
menu,
titleItems: [new VizPanelLinks({ menu: new VizPanelLinksMenu({}) })],
$data: new SceneQueryRunner({
data: {
state: LoadingState.Done,
series: [
toDataFrame({
name: 'http_requests_total',
fields: [
{ name: 'Time', type: FieldType.time, values: [1, 2, 3] },
{ name: 'Value', type: FieldType.number, values: [11, 22, 33] },
],
}),
],
timeRange: getDefaultTimeRange(),
},
datasource: { uid: 'my-uid' },
queries: [{ query: 'QueryA', refId: 'A' }],
}),
});
const scene = new DashboardScene({
title: 'My dashboard',
uid: 'dash-1',
tags: ['database', 'panel'],
$timeRange: new SceneTimeRange({
from: 'now-5m',
to: 'now',
timeZone: 'Africa/Abidjan',
}),
meta: {
canEdit: true,
isEmbedded: false,
},
body: DefaultGridLayoutManager.fromVizPanels([panel]),
});
await new Promise((r) => setTimeout(r, 1));
return { scene, panel, menu };
}