From 18056e53cc751f4a7503f17b7d5877e721bcd16c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Tue, 1 Nov 2016 14:35:35 +0100 Subject: [PATCH] ux(dashboard): Fixing broken unit test made by changes for dash edit mode, #6442 --- public/app/features/dashboard/model.ts | 7 +--- .../app/features/dashboard/row/add_panel.ts | 4 +-- public/app/features/dashboard/row/row_ctrl.ts | 4 +-- .../dashboard/specs/dashboard_srv_specs.ts | 11 ++---- .../dashboard/specs/exporter_specs.ts | 2 ++ .../dashboard/specs/row_model_specs.ts | 10 ++++++ .../features/dashboard/unsavedChangesSrv.js | 14 +++++--- public/app/features/panel/panel_directive.ts | 9 ++--- public/test/specs/row-ctrl-specs.js | 34 ------------------- public/test/specs/unsavedChangesSrv-specs.js | 3 +- 10 files changed, 33 insertions(+), 65 deletions(-) create mode 100644 public/app/features/dashboard/specs/row_model_specs.ts delete mode 100644 public/test/specs/row-ctrl-specs.js diff --git a/public/app/features/dashboard/model.ts b/public/app/features/dashboard/model.ts index 167ce20ea2b..4f44746a867 100644 --- a/public/app/features/dashboard/model.ts +++ b/public/app/features/dashboard/model.ts @@ -158,12 +158,6 @@ export class DashboardModel { return null; } - rowSpan(row) { - return _.reduce(row.panels, function(p,v) { - return p + v.span; - },0); - }; - addPanel(panel, row) { panel.id = this.getNextPanelId(); row.addPanel(panel); @@ -540,6 +534,7 @@ export class DashboardModel { // update graph yaxes changes panelUpgrades.push(function(panel) { if (panel.type !== 'graph') { return; } + if (!panel.grid) { return; } panel.thresholds = []; var t1: any = {}, t2: any = {}; diff --git a/public/app/features/dashboard/row/add_panel.ts b/public/app/features/dashboard/row/add_panel.ts index d0bfec151f9..c5790cd7291 100644 --- a/public/app/features/dashboard/row/add_panel.ts +++ b/public/app/features/dashboard/row/add_panel.ts @@ -81,13 +81,13 @@ export class AddPanelCtrl { addPanel(panelPluginInfo) { var defaultSpan = 12; - var _as = 12 - this.dashboard.rowSpan(this.row); + var span = 12 - this.row.span; var panel = { id: null, title: config.new_panel_title, error: false, - span: _as < defaultSpan && _as > 0 ? _as : defaultSpan, + span: span < defaultSpan && span > 0 ? span : defaultSpan, editable: true, type: panelPluginInfo.id, isNew: true, diff --git a/public/app/features/dashboard/row/row_ctrl.ts b/public/app/features/dashboard/row/row_ctrl.ts index dad66ceb024..f805f8773a6 100644 --- a/public/app/features/dashboard/row/row_ctrl.ts +++ b/public/app/features/dashboard/row/row_ctrl.ts @@ -198,7 +198,7 @@ coreModule.directive('panelDropZone', function($timeout) { return showPanel(12, 'Empty Space'); } - var dropZoneSpan = 12 - scope.ctrl.dashboard.rowSpan(scope.ctrl.row); + var dropZoneSpan = 12 - row.span; if (dropZoneSpan > 0) { if (indrag) { return showPanel(dropZoneSpan, 'Drop Here'); @@ -209,7 +209,7 @@ coreModule.directive('panelDropZone', function($timeout) { } if (indrag === true) { - var dropZoneSpan = 12 - scope.ctrl.dashboard.rowSpan(scope.ctrl.row); + var dropZoneSpan = 12 - row.span; if (dropZoneSpan > 1) { return showPanel(dropZoneSpan, 'Drop Here'); } diff --git a/public/app/features/dashboard/specs/dashboard_srv_specs.ts b/public/app/features/dashboard/specs/dashboard_srv_specs.ts index b9426cc07fb..520216f18ec 100644 --- a/public/app/features/dashboard/specs/dashboard_srv_specs.ts +++ b/public/app/features/dashboard/specs/dashboard_srv_specs.ts @@ -51,18 +51,13 @@ describe('dashboardSrv', function() { dashboard = _dashboardSrv.create({}); }); - it('row span should sum spans', function() { - var spanLeft = dashboard.rowSpan({ panels: [{ span: 2 }, { span: 3 }] }); - expect(spanLeft).to.be(5); - }); - it('adding default should split span in half', function() { - dashboard.rows = [{ panels: [{ span: 12, id: 7 }] }]; - dashboard.addPanel({span: 4}, dashboard.rows[0]); + dashboard.addEmptyRow(); + dashboard.rows[0].addPanel({span: 12}); + dashboard.rows[0].addPanel({span: 12}); expect(dashboard.rows[0].panels[0].span).to.be(6); expect(dashboard.rows[0].panels[1].span).to.be(6); - expect(dashboard.rows[0].panels[1].id).to.be(8); }); it('duplicate panel should try to add it to same row', function() { diff --git a/public/app/features/dashboard/specs/exporter_specs.ts b/public/app/features/dashboard/specs/exporter_specs.ts index 16430f13916..fd3973206d1 100644 --- a/public/app/features/dashboard/specs/exporter_specs.ts +++ b/public/app/features/dashboard/specs/exporter_specs.ts @@ -3,6 +3,7 @@ import {describe, beforeEach, it, sinon, expect, angularMocks} from 'test/lib/co import _ from 'lodash'; import config from 'app/core/config'; import {DashboardExporter} from '../export/exporter'; +import {DashboardModel} from '../model'; describe('given dashboard with repeated panels', function() { var dash, exported; @@ -77,6 +78,7 @@ describe('given dashboard with repeated panels', function() { info: {version: "1.1.0"} }; + dash = new DashboardModel(dash, {}); var exporter = new DashboardExporter(datasourceSrvStub); exporter.makeExportable(dash).then(clean => { exported = clean; diff --git a/public/app/features/dashboard/specs/row_model_specs.ts b/public/app/features/dashboard/specs/row_model_specs.ts new file mode 100644 index 00000000000..d7f573b485a --- /dev/null +++ b/public/app/features/dashboard/specs/row_model_specs.ts @@ -0,0 +1,10 @@ +import {describe, beforeEach, it, sinon, expect, angularMocks} from 'test/lib/common'; + +import _ from 'lodash'; +import {DashboardRow} from '../row/row_model'; + +describe('DashboardRow', function() { + +}); + + diff --git a/public/app/features/dashboard/unsavedChangesSrv.js b/public/app/features/dashboard/unsavedChangesSrv.js index 0dd96549867..7acbc4848fd 100644 --- a/public/app/features/dashboard/unsavedChangesSrv.js +++ b/public/app/features/dashboard/unsavedChangesSrv.js @@ -9,7 +9,7 @@ function(angular, _) { module.service('unsavedChangesSrv', function($rootScope, $q, $location, $timeout, contextSrv, $window) { - function Tracker(dashboard, scope) { + function Tracker(dashboard, scope, originalCopyDelay) { var self = this; this.current = dashboard; @@ -44,10 +44,14 @@ function(angular, _) { } }); - // wait for different services to patch the dashboard (missing properties) - $timeout(function() { + if (originalCopyDelay) { + $timeout(function() { + // wait for different services to patch the dashboard (missing properties) + self.original = dashboard.getSaveModelClone(); + }, originalCopyDelay); + } else { self.original = dashboard.getSaveModelClone(); - }, 1000); + } } var p = Tracker.prototype; @@ -157,7 +161,7 @@ function(angular, _) { this.Tracker = Tracker; this.init = function(dashboard, scope) { - new Tracker(dashboard, scope); + return new Tracker(dashboard, scope, 1000); }; }); }); diff --git a/public/app/features/panel/panel_directive.ts b/public/app/features/panel/panel_directive.ts index de9f5c7ea9b..851c66820cb 100644 --- a/public/app/features/panel/panel_directive.ts +++ b/public/app/features/panel/panel_directive.ts @@ -143,7 +143,8 @@ module.directive('panelResizer', function($rootScope) { ctrl.panel.span = originalWidth + (((e.pageX - handleOffset.left) / maxWidth) * 12); ctrl.panel.span = Math.min(Math.max(ctrl.panel.span, 1), 12); - var rowSpan = ctrl.dashboard.rowSpan(ctrl.row); + ctrl.row.updateRowSpan(); + var rowSpan = ctrl.row.span; // auto adjust other panels if (Math.floor(rowSpan) < 14) { @@ -170,12 +171,6 @@ module.directive('panelResizer', function($rootScope) { lastPanel.span = Math.round(lastPanel.span); } - // if close to 12 - var rowSpan = ctrl.dashboard.rowSpan(ctrl.row); - if (rowSpan < 12 && rowSpan > 11) { - lastPanel.span += 12 - rowSpan; - } - ctrl.row.panelSpanChanged(); // first digest to propagate panel width change diff --git a/public/test/specs/row-ctrl-specs.js b/public/test/specs/row-ctrl-specs.js deleted file mode 100644 index 4eb15fd1677..00000000000 --- a/public/test/specs/row-ctrl-specs.js +++ /dev/null @@ -1,34 +0,0 @@ -define([ - './helpers', - 'app/features/dashboard/rowCtrl' -], function(helpers) { - 'use strict'; - - describe('RowCtrl', function() { - var ctx = new helpers.ControllerTestContext(); - - beforeEach(module('grafana.controllers')); - beforeEach(ctx.providePhase()); - beforeEach(ctx.createControllerPhase('RowCtrl')); - - describe('delete_row', function () { - describe('when row is empty (has no panels)', function () { - beforeEach(function () { - ctx.scope.dashboard.rows = [{id: 1, panels: []}]; - ctx.scope.row = ctx.scope.dashboard.rows[0]; - ctx.scope.appEvent = sinon.spy(); - - ctx.scope.deleteRow(); - }); - - it('should NOT ask for confirmation', function () { - expect(ctx.scope.appEvent.called).to.be(false); - }); - - it('should delete row', function () { - expect(ctx.scope.dashboard.rows).to.not.contain(ctx.scope.row); - }); - }); - }); - }); -}); diff --git a/public/test/specs/unsavedChangesSrv-specs.js b/public/test/specs/unsavedChangesSrv-specs.js index a304279b77b..a9f0f0b51c0 100644 --- a/public/test/specs/unsavedChangesSrv-specs.js +++ b/public/test/specs/unsavedChangesSrv-specs.js @@ -77,7 +77,8 @@ define([ }); it('Should ignore row repeats', function() { - dash.rows.push({repeatRowId: 10}); + dash.addEmptyRow(); + dash.rows[1].repeatRowId = 10; expect(tracker.hasChanges()).to.be(false); });