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/saving/getDashboardChanges.test.ts

423 lines
9.1 KiB

import { Dashboard, Panel } from '@grafana/schema';
import { getDashboardChanges, getPanelChanges } from './getDashboardChanges';
describe('getDashboardChanges', () => {
const initial: Dashboard = {
id: 1,
title: 'Dashboard 1',
time: {
from: 'now-7d',
to: 'now',
},
refresh: '1h',
version: 1,
schemaVersion: 1,
templating: {
list: [
{
name: 'var1',
type: 'query',
query: 'query1',
current: {
value: 'value1',
text: 'text1',
},
options: [],
},
],
},
};
it('should return the correct result when no changes', () => {
const changed = { ...initial };
const expectedChanges = {
initialSaveModel: {
...initial,
},
changedSaveModel: {
...changed,
},
diffs: {},
diffCount: 0,
hasChanges: false,
hasTimeChanges: false,
isNew: false,
hasVariableValueChanges: false,
hasRefreshChange: false,
};
const result = getDashboardChanges(initial, changed, false, false, false);
expect(result).toEqual(expectedChanges);
});
it('should return the correct result when is new', () => {
const newDashInitial = {
...initial,
version: 0,
};
const changed = {
...newDashInitial,
version: 0,
};
const expectedChanges = {
changedSaveModel: {
...newDashInitial,
},
initialSaveModel: {
...changed,
},
diffs: {},
diffCount: 0,
hasChanges: false,
hasTimeChanges: false,
isNew: true,
hasVariableValueChanges: false,
hasRefreshChange: false,
};
const result = getDashboardChanges(newDashInitial, changed, false, false, false);
expect(result).toEqual(expectedChanges);
});
it('should return the correct result when the time changes but they are not preserved', () => {
const changed = {
...initial,
time: {
from: 'now-1d',
to: 'now',
},
};
const expectedChanges = {
initialSaveModel: {
...initial,
},
changedSaveModel: {
...initial,
},
diffs: {},
diffCount: 0,
hasChanges: false,
hasTimeChanges: true,
isNew: false,
hasVariableValueChanges: false,
hasRefreshChange: false,
};
const result = getDashboardChanges(initial, changed, false, false, false);
expect(result).toEqual(expectedChanges);
});
it('should return the correct result when the time changes and they are preserved', () => {
const changed = {
...initial,
time: {
from: 'now-1d',
to: 'now',
},
};
const expectedChanges = {
initialSaveModel: {
...initial,
},
changedSaveModel: {
...changed,
},
diffs: {
time: [
{
endLineNumber: expect.any(Number),
op: 'replace',
originalValue: 'now-7d',
path: ['time', 'from'],
startLineNumber: expect.any(Number),
value: 'now-1d',
},
],
},
diffCount: 1,
hasChanges: true,
hasTimeChanges: true,
isNew: false,
hasVariableValueChanges: false,
hasRefreshChange: false,
};
const result = getDashboardChanges(initial, changed, true, false, false);
expect(result).toEqual(expectedChanges);
});
it('should return the correct result when the refresh changes but it is not preserved', () => {
const changed = {
...initial,
refresh: '2h',
};
const expectedChanges = {
initialSaveModel: {
...initial,
},
changedSaveModel: {
...initial,
},
diffs: {},
diffCount: 0,
hasChanges: false,
hasTimeChanges: false,
isNew: false,
hasVariableValueChanges: false,
hasRefreshChange: true,
};
const result = getDashboardChanges(initial, changed, false, false, false);
expect(result).toEqual(expectedChanges);
});
it('should return the correct result when the refresh changes and it is preserved', () => {
const changed = {
...initial,
refresh: '2h',
};
const expectedChanges = {
initialSaveModel: {
...initial,
},
changedSaveModel: {
...changed,
},
diffs: {
refresh: [
{
endLineNumber: expect.any(Number),
op: 'replace',
originalValue: '1h',
path: ['refresh'],
startLineNumber: expect.any(Number),
value: '2h',
},
],
},
diffCount: 1,
hasChanges: true,
hasTimeChanges: false,
isNew: false,
hasVariableValueChanges: false,
hasRefreshChange: true,
};
const result = getDashboardChanges(initial, changed, false, false, true);
expect(result).toEqual(expectedChanges);
});
it('should return the correct result when the variable value changes but it is not preserved', () => {
const changed = {
...initial,
templating: {
list: [
{
name: 'var1',
type: 'query',
query: 'query1',
current: {
value: 'value2',
text: 'text1',
},
options: [],
},
],
},
} as Dashboard;
const expectedChanges = {
initialSaveModel: {
...initial,
},
changedSaveModel: {
...initial,
},
diffs: {},
diffCount: 0,
hasChanges: false,
hasTimeChanges: false,
isNew: false,
hasVariableValueChanges: true,
hasRefreshChange: false,
};
const result = getDashboardChanges(initial, changed, false, false, false);
expect(result).toEqual(expectedChanges);
});
it('should return the correct result when the variable value changes', () => {
const changed = {
...initial,
templating: {
list: [
{
name: 'var1',
type: 'query',
query: 'query1',
current: {
value: 'value2',
text: 'text1',
},
options: [],
},
],
},
} as Dashboard;
const expectedChanges = {
initialSaveModel: {
...initial,
},
changedSaveModel: {
...changed,
},
diffs: {
templating: [
{
endLineNumber: 17,
op: 'replace',
originalValue: 'value1',
path: ['templating', 'list', '0', 'current', 'value'],
startLineNumber: 17,
value: 'value2',
},
],
},
diffCount: 1,
hasChanges: true,
hasTimeChanges: false,
isNew: false,
hasVariableValueChanges: true,
hasRefreshChange: false,
};
const result = getDashboardChanges(initial, changed, false, true, false);
expect(result).toEqual(expectedChanges);
});
});
describe('getPanelChanges', () => {
const initial: Panel = {
id: 1,
type: 'graph',
title: 'Panel 1',
gridPos: {
x: 0,
y: 0,
w: 12,
h: 8,
},
targets: [
{
refId: 'A',
query: 'query1',
},
],
};
it('should return the correct result when no changes', () => {
const changed = { ...initial };
const expectedChanges = {
initialSaveModel: {
...initial,
},
changedSaveModel: {
...changed,
},
diffs: {},
diffCount: 0,
hasChanges: false,
};
expect(getPanelChanges(initial, changed)).toEqual(expectedChanges);
});
it('should return the correct result when there is some changes', () => {
const changed = {
...initial,
title: 'Panel 2',
type: 'table',
gridPos: {
...initial.gridPos,
x: 1,
},
targets: [
{
refId: 'A',
query: 'query2',
},
],
} as Panel;
const expectedChanges = {
initialSaveModel: {
...initial,
},
changedSaveModel: {
...changed,
},
diffs: {
title: [
{
endLineNumber: 3,
op: 'replace',
originalValue: 'Panel 1',
path: ['title'],
startLineNumber: 3,
value: 'Panel 2',
},
],
type: [
{
endLineNumber: 2,
op: 'replace',
originalValue: 'graph',
path: ['type'],
startLineNumber: 2,
value: 'table',
},
],
gridPos: [
{
endLineNumber: 5,
op: 'replace',
originalValue: 0,
path: ['gridPos', 'x'],
startLineNumber: 5,
value: 1,
},
],
targets: [
{
endLineNumber: 13,
op: 'replace',
originalValue: 'query1',
path: ['targets', '0', 'query'],
startLineNumber: 13,
value: 'query2',
},
],
},
diffCount: 4,
hasChanges: true,
};
expect(getPanelChanges(changed, initial)).toEqual(expectedChanges);
});
});