mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
424 lines
9.1 KiB
TypeScript
424 lines
9.1 KiB
TypeScript
|
|
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);
|
||
|
|
});
|
||
|
|
});
|