From de1de852fc130d6b5c75c28a93aab38bbbe726b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Wed, 1 Oct 2014 11:27:58 +0200 Subject: [PATCH] worked on solo panel --- src/app/partials/pro/solo-panel.html | 2 +- src/app/routes/p_all.js | 2 +- .../{p_solo-panel.js => pro/solo-panel.js} | 33 +++++++---- src/test/specs/SoloPanelCtrl-specs.js | 0 src/test/specs/helpers.js | 7 ++- src/test/specs/pro/soloPanelCtrl-specs.js | 57 +++++++++++++++++++ src/test/test-main.js | 2 + 7 files changed, 89 insertions(+), 14 deletions(-) rename src/app/routes/{p_solo-panel.js => pro/solo-panel.js} (64%) create mode 100644 src/test/specs/SoloPanelCtrl-specs.js create mode 100644 src/test/specs/pro/soloPanelCtrl-specs.js diff --git a/src/app/partials/pro/solo-panel.html b/src/app/partials/pro/solo-panel.html index f349d32a716..64ea59e6c26 100644 --- a/src/app/partials/pro/solo-panel.html +++ b/src/app/partials/pro/solo-panel.html @@ -1,7 +1,7 @@
-
+
diff --git a/src/app/routes/p_all.js b/src/app/routes/p_all.js index 185563c1592..a5799d5108f 100644 --- a/src/app/routes/p_all.js +++ b/src/app/routes/p_all.js @@ -1,6 +1,6 @@ define([ './p_dashboard', - './p_solo-panel', + './pro/solo-panel', './p_admin', './p_login', ], diff --git a/src/app/routes/p_solo-panel.js b/src/app/routes/pro/solo-panel.js similarity index 64% rename from src/app/routes/p_solo-panel.js rename to src/app/routes/pro/solo-panel.js index 6f766e31698..b2b2603c7aa 100644 --- a/src/app/routes/p_solo-panel.js +++ b/src/app/routes/pro/solo-panel.js @@ -14,17 +14,20 @@ function (angular) { }); }); - module.controller('SoloPanelCtrl', function($scope, $rootScope, datasourceSrv, $routeParams, alertSrv, dashboardSrv, filterSrv) { + module.controller('SoloPanelCtrl', function($scope, $rootScope, datasourceSrv, $routeParams, dashboardSrv, timeSrv) { + var panelId; - var db = datasourceSrv.getGrafanaDB(); - var panelId = parseInt($routeParams.panelId); + $scope.init = function() { + var db = datasourceSrv.getGrafanaDB(); + panelId = parseInt($routeParams.panelId); - db.getDashboard($routeParams.id, false) - .then(function(dashboardData) { - $scope.initPanelScope(dashboardData); - }).then(null, function(error) { - alertSrv.set('Error', error, 'error'); - }); + db.getDashboard($routeParams.id, false) + .then(function(dashboardData) { + $scope.initPanelScope(dashboardData); + }).then(null, function(error) { + $scope.appEvent('alert-error', ['Load panel error', error]); + }); + }; $scope.initPanelScope = function(dashboardData) { $scope.dashboard = dashboardSrv.create(dashboardData); @@ -36,14 +39,18 @@ function (angular) { $scope.$index = 0; $scope.panel = $scope.getPanelById(panelId); + if (!$scope.panel) { + $scope.appEvent('alert-error', ['Panel not found', '']); + return; + } + $scope.panel.span = 12; $scope.dashboardViewState = { registerPanel: function() { } }; - $scope.filter = filterSrv; - $scope.filter.init($scope.dashboard); + timeSrv.init($scope.dashboard); }; $scope.getPanelById = function(id) { @@ -60,6 +67,10 @@ function (angular) { return null; }; + if (!$scope.skipAutoInit) { + $scope.init(); + } + }); }); diff --git a/src/test/specs/SoloPanelCtrl-specs.js b/src/test/specs/SoloPanelCtrl-specs.js new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/test/specs/helpers.js b/src/test/specs/helpers.js index 1859bfc10a1..5a3213184a9 100644 --- a/src/test/specs/helpers.js +++ b/src/test/specs/helpers.js @@ -24,7 +24,7 @@ define([ $provide.value('timeSrv', self.timeSrv); $provide.value('templateSrv', self.templateSrv); $provide.value('$element', self.$element); - _.each(mocks, function(key, value) { + _.each(mocks, function(value, key) { $provide.value(key, value); }); }); @@ -34,16 +34,20 @@ define([ return inject(function($controller, $rootScope, $q, $location) { self.scope = $rootScope.$new(); self.$location = $location; + self.scope.grafana = {}; self.scope.panel = {}; self.scope.row = { panels:[] }; self.scope.dashboard = {}; self.scope.dashboardViewState = new DashboardViewStateStub(); + self.scope.appEvent = sinon.spy(); + self.scope.onAppEvent = sinon.spy(); $rootScope.colors = []; for (var i = 0; i < 50; i++) { $rootScope.colors.push('#' + i); } self.$q = $q; self.scope.skipDataOnInit = true; + self.scope.skipAutoInit = true; self.controller = $controller(controllerName, { $scope: self.scope }); @@ -87,6 +91,7 @@ define([ } function TimeSrvStub() { + this.init = sinon.spy(); this.time = { from:'now-1h', to: 'now'}; this.timeRange = function(parse) { if (parse === false) { diff --git a/src/test/specs/pro/soloPanelCtrl-specs.js b/src/test/specs/pro/soloPanelCtrl-specs.js new file mode 100644 index 00000000000..aa0ef4de31a --- /dev/null +++ b/src/test/specs/pro/soloPanelCtrl-specs.js @@ -0,0 +1,57 @@ +define([ + '../helpers', + 'routes/pro/solo-panel', + 'services/dashboard/dashboardSrv', +], function(helpers) { + 'use strict'; + + describe('SoloPanelCtrl', function() { + var ctx = new helpers.ControllerTestContext(); + var datasource = {}; + var routeParams = {}; + + beforeEach(module('grafana.routes')); + beforeEach(module('grafana.services')); + beforeEach(ctx.providePhase({ + $routeParams: routeParams, + datasourceSrv: { + getGrafanaDB: sinon.stub().returns(datasource) + } + })); + + beforeEach(ctx.createControllerPhase('SoloPanelCtrl')); + + describe('setting up solo panel scope', function() { + + beforeEach(function() { + var dashboard = { + rows: [ + { + panels: [ + { + id: 23, + some: 'prop' + } + ] + } + ] + }; + + routeParams.id = 1; + routeParams.panelId = 23; + datasource.getDashboard = sinon.stub().returns(ctx.$q.when(dashboard)); + + ctx.scope.init(); + ctx.scope.$digest(); + }); + + it('should load dashboard and extract panel and setup panel scope', function() { + expect(ctx.scope.panel.id).to.be(23); + expect(ctx.scope.panel.some).to.be('prop'); + }); + + }); + + }); + +}); diff --git a/src/test/test-main.js b/src/test/test-main.js index 89228f9e04b..b642063e598 100644 --- a/src/test/test-main.js +++ b/src/test/test-main.js @@ -114,6 +114,7 @@ require([ angular.module('grafana', ['ngRoute']); angular.module('grafana.services', ['ngRoute', '$strap.directives']); angular.module('grafana.panels', []); + angular.module('grafana.routes', ['ngRoute']); angular.module('grafana.filters', []); require([ @@ -140,6 +141,7 @@ require([ 'specs/dashboardSrv-specs', 'specs/dashboardViewStateSrv-specs', 'specs/overview-ctrl-specs', + 'specs/pro/soloPanelCtrl-specs', ], function () { window.__karma__.start(); });