Files
grafana/public/app/plugins/panel/dashlist/migrations.test.ts
Laura Benz ecd7357049 Dashboards: Add toggle for folder names in dashboard list panel (#87288)
* refactor: add switch

* refactor: add functionality

* refactor: fix test
2024-05-03 17:52:10 +02:00

124 lines
3.2 KiB
TypeScript

import { wellFormedPanelModel } from 'test/fixtures/panelModel.fixture';
import { PanelModel } from '@grafana/data';
import { mockFolderDTO } from 'app/features/browse-dashboards/fixtures/folder.fixture';
import { dashlistMigrationHandler, AngularModel } from './migrations';
const getMock = jest.fn();
jest.mock('@grafana/runtime', () => ({
...jest.requireActual('@grafana/runtime'),
getBackendSrv: () => ({
get: getMock,
}),
}));
describe('dashlist migrations', () => {
it('migrates angular panel model to react model', async () => {
const basePanelModel = wellFormedPanelModel({});
basePanelModel.pluginVersion = '5.1';
const angularPanel: PanelModel & AngularModel = {
...basePanelModel,
// pluginVersion: '5.1',
starred: true,
recent: true,
search: true,
headings: true,
limit: 7,
query: 'hello, query',
};
const newOptions = await dashlistMigrationHandler(angularPanel);
expect(newOptions).toEqual({
showStarred: true,
showRecentlyViewed: true,
showSearch: true,
showHeadings: true,
maxItems: 7,
query: 'hello, query',
includeVars: undefined,
keepTime: undefined,
});
expect(angularPanel).toStrictEqual(basePanelModel);
});
it('migrates folder id to folder UID', async () => {
const folderDTO = mockFolderDTO(1, {
id: 77,
uid: 'abc-124',
});
getMock.mockResolvedValue(folderDTO);
const basePanelOptions = {
showStarred: true,
showRecentlyViewed: true,
showSearch: true,
showHeadings: true,
showFolderNames: true,
maxItems: 7,
query: 'hello, query',
includeVars: false,
keepTime: false,
tags: [],
};
const panelModel = wellFormedPanelModel({
...basePanelOptions,
folderId: 77,
});
const newOptions = await dashlistMigrationHandler(panelModel);
expect(newOptions).toStrictEqual({
...basePanelOptions,
folderUID: 'abc-124',
});
});
it("doesn't fail if the api request fails", async () => {
const spyConsoleWarn = jest.spyOn(console, 'warn').mockImplementation();
getMock.mockRejectedValue({
status: 403,
statusText: 'Forbidden',
data: {
accessErrorId: 'ACE0577385389',
message: "You'll need additional permissions to perform this action. Permissions needed: folders:read",
title: 'Access denied',
},
config: {
showErrorAlert: false,
method: 'GET',
url: 'api/folders/id/0',
retry: 0,
headers: {
'X-Grafana-Org-Id': 1,
},
hideFromInspector: true,
},
});
const basePanelOptions = {
showStarred: true,
showRecentlyViewed: true,
showSearch: true,
showHeadings: true,
showFolderNames: true,
maxItems: 7,
query: 'hello, query',
includeVars: false,
keepTime: false,
tags: [],
folderId: 77,
};
const panelModel = wellFormedPanelModel(basePanelOptions);
// We expect it to not reject
const newOptions = await dashlistMigrationHandler(panelModel);
expect(newOptions).toStrictEqual(basePanelOptions);
expect(spyConsoleWarn).toHaveBeenCalledTimes(1);
});
});