140 lines
4.3 KiB
TypeScript
140 lines
4.3 KiB
TypeScript
import { behaviors, SceneTimeRange } from '@grafana/scenes';
|
|
import { DashboardCursorSync } from '@grafana/schema';
|
|
|
|
import * as utils from '../pages/utils';
|
|
import { DashboardControls } from '../scene/DashboardControls';
|
|
import { DashboardScene } from '../scene/DashboardScene';
|
|
import { activateFullSceneTree } from '../utils/test-utils';
|
|
|
|
import { GeneralSettingsEditView } from './GeneralSettingsEditView';
|
|
|
|
describe('GeneralSettingsEditView', () => {
|
|
describe('Dashboard state', () => {
|
|
let dashboard: DashboardScene;
|
|
let settings: GeneralSettingsEditView;
|
|
|
|
beforeEach(async () => {
|
|
const result = await buildTestScene();
|
|
dashboard = result.dashboard;
|
|
settings = result.settings;
|
|
});
|
|
|
|
it('should return the correct urlKey', () => {
|
|
expect(settings.getUrlKey()).toBe('settings');
|
|
});
|
|
|
|
it('should return the dashboard', () => {
|
|
expect(settings.getDashboard()).toBe(dashboard);
|
|
});
|
|
|
|
it('should return the dashboard time range', () => {
|
|
expect(settings.getTimeRange()).toBe(dashboard.state.$timeRange);
|
|
});
|
|
|
|
it('should return the cursor sync', () => {
|
|
expect(settings.getCursorSync()).toBe(dashboard.state.$behaviors?.[0]);
|
|
});
|
|
});
|
|
|
|
describe('Dashboard updates', () => {
|
|
let dashboard: DashboardScene;
|
|
let settings: GeneralSettingsEditView;
|
|
|
|
beforeEach(async () => {
|
|
const result = await buildTestScene();
|
|
dashboard = result.dashboard;
|
|
settings = result.settings;
|
|
});
|
|
|
|
it('should have isDirty false', () => {
|
|
expect(dashboard.state.isDirty).toBeFalsy();
|
|
});
|
|
|
|
it('A change to title updates the dashboard state', () => {
|
|
settings.onTitleChange('new title');
|
|
|
|
expect(dashboard.state.title).toBe('new title');
|
|
});
|
|
|
|
it('A change to description updates the dashboard state', () => {
|
|
settings.onDescriptionChange('new description');
|
|
|
|
expect(dashboard.state.description).toBe('new description');
|
|
});
|
|
|
|
it('A change to description updates the dashboard state', () => {
|
|
settings.onTagsChange(['tag1', 'tag2']);
|
|
|
|
expect(dashboard.state.tags).toEqual(['tag1', 'tag2']);
|
|
});
|
|
|
|
it('A change to editable permissions updates the dashboard state', () => {
|
|
settings.onEditableChange(false);
|
|
|
|
expect(dashboard.state.editable).toBe(false);
|
|
});
|
|
|
|
it('A change to timezone updates the dashboard state', () => {
|
|
settings.onTimeZoneChange('UTC');
|
|
expect(dashboard.state.$timeRange?.state.timeZone).toBe('UTC');
|
|
});
|
|
|
|
it('A change to week start updates the dashboard state', () => {
|
|
settings.onWeekStartChange('monday');
|
|
|
|
expect(settings.getTimeRange().state.weekStart).toBe('monday');
|
|
});
|
|
|
|
it('A change to refresh interval updates the dashboard state', () => {
|
|
settings.onRefreshIntervalChange(['5s']);
|
|
expect(settings.getRefreshPicker()?.state?.intervals).toEqual(['5s']);
|
|
});
|
|
|
|
it('A change to folder updates the dashboard state', async () => {
|
|
const updateNavModel = jest.spyOn(utils, 'updateNavModel').mockImplementation(jest.fn());
|
|
|
|
await settings.onFolderChange('folder-2', 'folder 2');
|
|
|
|
expect(dashboard.state.meta.folderUid).toBe('folder-2');
|
|
expect(dashboard.state.meta.folderTitle).toBe('folder 2');
|
|
expect(updateNavModel).toHaveBeenCalledWith('folder-2');
|
|
});
|
|
|
|
it('A change to tooltip settings updates the dashboard state', () => {
|
|
settings.onTooltipChange(DashboardCursorSync.Crosshair);
|
|
|
|
expect(settings.getCursorSync()?.state.sync).toBe(DashboardCursorSync.Crosshair);
|
|
});
|
|
|
|
it('A change to time picker visiblity settings updates the dashboard state', () => {
|
|
settings.onHideTimePickerChange(true);
|
|
|
|
expect(settings.getDashboardControls()?.state.hideTimeControls).toBe(true);
|
|
});
|
|
});
|
|
});
|
|
|
|
async function buildTestScene() {
|
|
const settings = new GeneralSettingsEditView({});
|
|
const dashboard = new DashboardScene({
|
|
$timeRange: new SceneTimeRange({}),
|
|
$behaviors: [new behaviors.CursorSync({ sync: DashboardCursorSync.Off })],
|
|
controls: new DashboardControls({}),
|
|
title: 'hello',
|
|
uid: 'dash-1',
|
|
meta: {
|
|
canEdit: true,
|
|
},
|
|
editview: settings,
|
|
});
|
|
|
|
activateFullSceneTree(dashboard);
|
|
|
|
await new Promise((r) => setTimeout(r, 1));
|
|
|
|
dashboard.onEnterEditMode();
|
|
settings.activate();
|
|
|
|
return { dashboard, settings };
|
|
}
|