The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
grafana/public/app/features/dashboard-scene/inspect/HelpWizard/HelpWizard.test.tsx

132 lines
4.4 KiB

import userEvent from '@testing-library/user-event';
import { render, screen } from 'test/test-utils';
import { FieldType, getDefaultTimeRange, LoadingState, toDataFrame } from '@grafana/data';
import { getPanelPlugin } from '@grafana/data/test/__mocks__/pluginMocks';
import { config } from '@grafana/runtime';
import { SceneQueryRunner, SceneTimeRange, VizPanel, VizPanelMenu } from '@grafana/scenes';
import { contextSrv } from 'app/core/services/context_srv';
import { DashboardScene } from '../../scene/DashboardScene';
import { VizPanelLinks, VizPanelLinksMenu } from '../../scene/PanelLinks';
import { panelMenuBehavior } from '../../scene/PanelMenuBehavior';
import { DefaultGridLayoutManager } from '../../scene/layout-default/DefaultGridLayoutManager';
import { HelpWizard } from './HelpWizard';
jest.mock('./utils.ts', () => ({
...jest.requireActual('./utils.ts'),
getGithubMarkdown: () => new Uint8Array(1024 * 1024).toString(),
}));
async function setup() {
const { panel } = await buildTestScene();
panel.getPlugin = () => getPanelPlugin({ skipDataQuery: false });
return render(<HelpWizard panel={panel} onClose={() => {}} />);
}
describe('HelpWizard', () => {
it('should render support bundle info if user has support bundle access', async () => {
config.supportBundlesEnabled = true;
jest.spyOn(contextSrv, 'hasPermission').mockReturnValue(true);
setup();
expect(await screen.findByText(/You can also retrieve a support bundle/)).toBeInTheDocument();
});
it('should not render support bundle info if user does not have support bundle access', async () => {
config.supportBundlesEnabled = false;
setup();
expect(screen.queryByText('You can also retrieve a support bundle')).not.toBeInTheDocument();
});
it('should show error as alert', async () => {
setup();
await userEvent.click(await screen.findByTestId('data-testid Tab Data'));
await userEvent.click((await screen.findAllByText('Copy to clipboard'))[0]);
expect(await screen.findByText(/Snapshot is too large/)).toBeInTheDocument();
});
describe('support tab', () => {
it('should render', async () => {
setup();
expect(await screen.findByText(/Modify the original data to hide sensitive information/)).toBeInTheDocument();
});
});
describe('data tab', () => {
it('should show "copy to clipboard" button if template is "GitHub comment"', async () => {
setup();
await userEvent.click(await screen.findByTestId('data-testid Tab Data'));
expect(await screen.findByText('Copy to clipboard')).toBeInTheDocument();
});
it('should show download button for other templates', async () => {
setup();
await userEvent.click(await screen.findByTestId('data-testid Tab Data'));
await userEvent.click(await screen.findByRole('combobox'));
await userEvent.click(await screen.findByText(/Panel support snapshot/));
expect(await screen.findByText(/^Download/)).toBeInTheDocument();
});
});
});
describe('SupportSnapshot', () => {
it('Can render', async () => {
setup();
expect(await screen.findByRole('button', { name: 'Dashboard (3.50 KiB)' })).toBeInTheDocument();
});
});
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 };
}