diff --git a/public/app/features/dashboard/save_as_modal.ts b/public/app/features/dashboard/save_as_modal.ts index 7e0b754d559..99bf21ca600 100644 --- a/public/app/features/dashboard/save_as_modal.ts +++ b/public/app/features/dashboard/save_as_modal.ts @@ -49,7 +49,10 @@ export class SaveDashboardAsModalCtrl { if (dashboard.id > 0) { this.clone.rows.forEach(row => { row.panels.forEach(panel => { - delete panel.thresholds; + if (panel.type === "graph" && panel.alert) { + delete panel.thresholds; + } + delete panel.alert; }); }); diff --git a/public/app/features/dashboard/specs/save_as_modal.jest.ts b/public/app/features/dashboard/specs/save_as_modal.jest.ts new file mode 100644 index 00000000000..e511bba25b9 --- /dev/null +++ b/public/app/features/dashboard/specs/save_as_modal.jest.ts @@ -0,0 +1,67 @@ +import {SaveDashboardAsModalCtrl} from '../save_as_modal'; +import {describe, expect} from 'test/lib/common'; + +describe('saving dashboard as', () => { + function scenario(name, panel, verify) { + describe(name, () => { + var json = { + title: "name", + rows: [ { panels: [ + panel + ]}] + }; + + var mockDashboardSrv = { + getCurrent: function() { + return { + id: 5, + getSaveModelClone: function() { + return json; + } + }; + } + }; + + var ctrl = new SaveDashboardAsModalCtrl(mockDashboardSrv); + var ctx: any = { + clone: ctrl.clone, + ctrl: ctrl, + panel: {} + }; + for (let row of ctrl.clone.rows) { + for (let panel of row.panels) { + ctx.panel = panel; + } + } + it("verify", () => { + verify(ctx); + }); + }); + } + + scenario("default values", {}, (ctx) => { + var clone = ctx.clone; + expect(clone.id).toBe(null); + expect(clone.title).toBe("name Copy"); + expect(clone.editable).toBe(true); + expect(clone.hideControls).toBe(false); + }); + + var graphPanel = { id: 1, type: "graph", alert: { rule: 1}, thresholds: { value: 3000} }; + + scenario("should remove alert from graph panel", graphPanel , (ctx) => { + expect(ctx.panel.alert).toBe(undefined); + }); + + scenario("should remove threshold from graph panel", graphPanel, (ctx) => { + expect(ctx.panel.thresholds).toBe(undefined); + }); + + scenario("singlestat should keep threshold", { id: 1, type: "singlestat", thresholds: { value: 3000} }, (ctx) => { + expect(ctx.panel.thresholds).not.toBe(undefined); + }); + + scenario("table should keep threshold", { id: 1, type: "table", thresholds: { value: 3000} }, (ctx) => { + expect(ctx.panel.thresholds).not.toBe(undefined); + }); +});