102 lines
3.8 KiB
TypeScript
102 lines
3.8 KiB
TypeScript
import { OptionFilter } from 'app/features/dashboard/components/PanelEditor/OptionsPaneOptions';
|
|
import { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';
|
|
|
|
import { transformSaveModelToScene } from '../serialization/transformSaveModelToScene';
|
|
import { DashboardModelCompatibilityWrapper } from '../utils/DashboardModelCompatibilityWrapper';
|
|
import { findVizPanelByKey } from '../utils/utils';
|
|
|
|
import { PanelOptionsPane } from './PanelOptionsPane';
|
|
import { testDashboard } from './testfiles/testDashboard';
|
|
|
|
describe('PanelOptionsPane', () => {
|
|
describe('When changing plugin', () => {
|
|
it('Should set the cache', () => {
|
|
const { optionsPane, panel } = setupTest('panel-1');
|
|
panel.changePluginType = jest.fn();
|
|
|
|
expect(panel.state.pluginId).toBe('timeseries');
|
|
|
|
optionsPane.onChangePanelPlugin({ pluginId: 'table' });
|
|
|
|
expect(optionsPane['_cachedPluginOptions']['timeseries']?.options).toBe(panel.state.options);
|
|
expect(optionsPane['_cachedPluginOptions']['timeseries']?.fieldConfig).toBe(panel.state.fieldConfig);
|
|
});
|
|
|
|
it('Should preserve correct field config', () => {
|
|
const { optionsPane, panel } = setupTest('panel-1');
|
|
|
|
const mockFn = jest.fn();
|
|
panel.changePluginType = mockFn;
|
|
|
|
const fieldConfig = panel.state.fieldConfig;
|
|
|
|
fieldConfig.defaults = {
|
|
...fieldConfig.defaults,
|
|
unit: 'flop',
|
|
decimals: 2,
|
|
};
|
|
|
|
fieldConfig.overrides = [
|
|
{
|
|
matcher: {
|
|
id: 'byName',
|
|
options: 'A-series',
|
|
},
|
|
properties: [
|
|
{
|
|
id: 'displayName',
|
|
value: 'test',
|
|
},
|
|
],
|
|
},
|
|
{
|
|
matcher: { id: 'byName', options: 'D-series' },
|
|
//should be removed because it's custom
|
|
properties: [
|
|
{
|
|
id: 'custom.customPropNoExist',
|
|
value: 'google',
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
panel.setState({ fieldConfig: fieldConfig });
|
|
|
|
expect(panel.state.fieldConfig.defaults.color?.mode).toBe('palette-classic');
|
|
expect(panel.state.fieldConfig.defaults.thresholds?.mode).toBe('absolute');
|
|
expect(panel.state.fieldConfig.defaults.unit).toBe('flop');
|
|
expect(panel.state.fieldConfig.defaults.decimals).toBe(2);
|
|
expect(panel.state.fieldConfig.overrides).toHaveLength(2);
|
|
expect(panel.state.fieldConfig.overrides[1].properties).toHaveLength(1);
|
|
expect(panel.state.fieldConfig.defaults.custom).toHaveProperty('axisBorderShow');
|
|
|
|
optionsPane.onChangePanelPlugin({ pluginId: 'table' });
|
|
|
|
expect(mockFn).toHaveBeenCalled();
|
|
expect(mockFn.mock.calls[0][2].defaults.color?.mode).toBe('palette-classic');
|
|
expect(mockFn.mock.calls[0][2].defaults.thresholds?.mode).toBe('absolute');
|
|
expect(mockFn.mock.calls[0][2].defaults.unit).toBe('flop');
|
|
expect(mockFn.mock.calls[0][2].defaults.decimals).toBe(2);
|
|
expect(mockFn.mock.calls[0][2].overrides).toHaveLength(2);
|
|
//removed custom property
|
|
expect(mockFn.mock.calls[0][2].overrides[1].properties).toHaveLength(0);
|
|
//removed fieldConfig custom values as well
|
|
expect(mockFn.mock.calls[0][2].defaults.custom).toStrictEqual({});
|
|
});
|
|
});
|
|
});
|
|
|
|
function setupTest(panelId: string) {
|
|
const scene = transformSaveModelToScene({ dashboard: testDashboard, meta: {} });
|
|
const panel = findVizPanelByKey(scene, panelId)!;
|
|
|
|
const optionsPane = new PanelOptionsPane({ panelRef: panel.getRef(), listMode: OptionFilter.All, searchQuery: '' });
|
|
|
|
// The following happens on DahsboardScene activation. For the needs of this test this activation aint needed hence we hand-call it
|
|
// @ts-expect-error
|
|
getDashboardSrv().setCurrent(new DashboardModelCompatibilityWrapper(scene));
|
|
|
|
return { optionsPane, scene, panel };
|
|
}
|