From af0a4a60394821b605d03575f3e756c1f0c16b6e Mon Sep 17 00:00:00 2001 From: Tobias Skarhed Date: Thu, 28 Jun 2018 13:43:23 +0200 Subject: [PATCH] Karma to Jest: 3 test files (#12414) * Karma to Jest: viewstate_srv * Karma to Jest: annotations_srv * Remove comments * Karma to Jest: series_override_ctrl * Remove unnecessary code * Class to function and fix lint error * Fix ngInject --- ...s_srv_specs.ts => annotations_srv.jest.ts} | 22 +- .../dashboard/specs/viewstate_srv.jest.ts | 67 ++++ .../dashboard/specs/viewstate_srv_specs.ts | 65 ---- .../panel/graph/series_overrides_ctrl.ts | 292 +++++++++--------- .../graph/specs/series_override_ctrl.jest.ts | 42 +++ .../graph/specs/series_override_ctrl_specs.ts | 55 ---- 6 files changed, 265 insertions(+), 278 deletions(-) rename public/app/features/annotations/specs/{annotations_srv_specs.ts => annotations_srv.jest.ts} (52%) create mode 100644 public/app/features/dashboard/specs/viewstate_srv.jest.ts delete mode 100644 public/app/features/dashboard/specs/viewstate_srv_specs.ts create mode 100644 public/app/plugins/panel/graph/specs/series_override_ctrl.jest.ts delete mode 100644 public/app/plugins/panel/graph/specs/series_override_ctrl_specs.ts diff --git a/public/app/features/annotations/specs/annotations_srv_specs.ts b/public/app/features/annotations/specs/annotations_srv.jest.ts similarity index 52% rename from public/app/features/annotations/specs/annotations_srv_specs.ts rename to public/app/features/annotations/specs/annotations_srv.jest.ts index 932fcf9415c..7db7b6c9f05 100644 --- a/public/app/features/annotations/specs/annotations_srv_specs.ts +++ b/public/app/features/annotations/specs/annotations_srv.jest.ts @@ -1,17 +1,17 @@ -import { describe, beforeEach, it, expect, angularMocks } from 'test/lib/common'; import '../annotations_srv'; -import helpers from 'test/specs/helpers'; import 'app/features/dashboard/time_srv'; +import { AnnotationsSrv } from '../annotations_srv'; describe('AnnotationsSrv', function() { - var ctx = new helpers.ServiceTestContext(); + let $rootScope = { + onAppEvent: jest.fn(), + }; + let $q; + let datasourceSrv; + let backendSrv; + let timeSrv; - beforeEach(angularMocks.module('grafana.core')); - beforeEach(angularMocks.module('grafana.services')); - beforeEach(ctx.createService('timeSrv')); - beforeEach(() => { - ctx.createService('annotationsSrv'); - }); + let annotationsSrv = new AnnotationsSrv($rootScope, $q, datasourceSrv, backendSrv, timeSrv); describe('When translating the query result', () => { const annotationSource = { @@ -30,11 +30,11 @@ describe('AnnotationsSrv', function() { let translatedAnnotations; beforeEach(() => { - translatedAnnotations = ctx.service.translateQueryResult(annotationSource, annotations); + translatedAnnotations = annotationsSrv.translateQueryResult(annotationSource, annotations); }); it('should set defaults', () => { - expect(translatedAnnotations[0].source).to.eql(annotationSource); + expect(translatedAnnotations[0].source).toEqual(annotationSource); }); }); }); diff --git a/public/app/features/dashboard/specs/viewstate_srv.jest.ts b/public/app/features/dashboard/specs/viewstate_srv.jest.ts new file mode 100644 index 00000000000..08166c6f2bd --- /dev/null +++ b/public/app/features/dashboard/specs/viewstate_srv.jest.ts @@ -0,0 +1,67 @@ +//import { describe, beforeEach, it, expect, angularMocks } from 'test/lib/common'; +import 'app/features/dashboard/view_state_srv'; +import config from 'app/core/config'; +import { DashboardViewState } from '../view_state_srv'; + +describe('when updating view state', () => { + let location = { + replace: jest.fn(), + search: jest.fn(), + }; + + let $scope = { + onAppEvent: jest.fn(() => {}), + dashboard: { + meta: {}, + panels: [], + }, + }; + + let $rootScope = {}; + let viewState; + + beforeEach(() => { + config.bootData = { + user: { + orgId: 1, + }, + }; + }); + + describe('to fullscreen true and edit true', () => { + beforeEach(() => { + location.search = jest.fn(() => { + return { fullscreen: true, edit: true, panelId: 1 }; + }); + viewState = new DashboardViewState($scope, location, {}, $rootScope); + }); + + it('should update querystring and view state', () => { + var updateState = { fullscreen: true, edit: true, panelId: 1 }; + + viewState.update(updateState); + + expect(location.search).toHaveBeenCalledWith({ + edit: true, + editview: null, + fullscreen: true, + orgId: 1, + panelId: 1, + }); + expect(viewState.dashboard.meta.fullscreen).toBe(true); + expect(viewState.state.fullscreen).toBe(true); + }); + }); + + describe('to fullscreen false', () => { + beforeEach(() => { + viewState = new DashboardViewState($scope, location, {}, $rootScope); + }); + it('should remove params from query string', () => { + viewState.update({ fullscreen: true, panelId: 1, edit: true }); + viewState.update({ fullscreen: false }); + expect(viewState.dashboard.meta.fullscreen).toBe(false); + expect(viewState.state.fullscreen).toBe(null); + }); + }); +}); diff --git a/public/app/features/dashboard/specs/viewstate_srv_specs.ts b/public/app/features/dashboard/specs/viewstate_srv_specs.ts deleted file mode 100644 index d34b15b9113..00000000000 --- a/public/app/features/dashboard/specs/viewstate_srv_specs.ts +++ /dev/null @@ -1,65 +0,0 @@ -import { describe, beforeEach, it, expect, angularMocks } from 'test/lib/common'; -import 'app/features/dashboard/view_state_srv'; -import config from 'app/core/config'; - -describe('when updating view state', function() { - var viewState, location; - var timeSrv = {}; - var templateSrv = {}; - var contextSrv = { - user: { - orgId: 19, - }, - }; - beforeEach(function() { - config.bootData = { - user: { - orgId: 1, - }, - }; - }); - beforeEach(angularMocks.module('grafana.services')); - beforeEach( - angularMocks.module(function($provide) { - $provide.value('timeSrv', timeSrv); - $provide.value('templateSrv', templateSrv); - $provide.value('contextSrv', contextSrv); - }) - ); - - beforeEach( - angularMocks.inject(function(dashboardViewStateSrv, $location, $rootScope) { - $rootScope.onAppEvent = function() {}; - $rootScope.dashboard = { - meta: {}, - panels: [], - }; - viewState = dashboardViewStateSrv.create($rootScope); - location = $location; - }) - ); - - describe('to fullscreen true and edit true', function() { - it('should update querystring and view state', function() { - var updateState = { fullscreen: true, edit: true, panelId: 1 }; - viewState.update(updateState); - expect(location.search()).to.eql({ - fullscreen: true, - edit: true, - panelId: 1, - orgId: 1, - }); - expect(viewState.dashboard.meta.fullscreen).to.be(true); - expect(viewState.state.fullscreen).to.be(true); - }); - }); - - describe('to fullscreen false', function() { - it('should remove params from query string', function() { - viewState.update({ fullscreen: true, panelId: 1, edit: true }); - viewState.update({ fullscreen: false }); - expect(viewState.dashboard.meta.fullscreen).to.be(false); - expect(viewState.state.fullscreen).to.be(null); - }); - }); -}); diff --git a/public/app/plugins/panel/graph/series_overrides_ctrl.ts b/public/app/plugins/panel/graph/series_overrides_ctrl.ts index ecf79a8a4fb..5958c80bac9 100644 --- a/public/app/plugins/panel/graph/series_overrides_ctrl.ts +++ b/public/app/plugins/panel/graph/series_overrides_ctrl.ts @@ -1,160 +1,158 @@ import _ from 'lodash'; import angular from 'angular'; -export class SeriesOverridesCtrl { - /** @ngInject */ - constructor($scope, $element, popoverSrv) { - $scope.overrideMenu = []; - $scope.currentOverrides = []; - $scope.override = $scope.override || {}; +/** @ngInject */ +export function SeriesOverridesCtrl($scope, $element, popoverSrv) { + $scope.overrideMenu = []; + $scope.currentOverrides = []; + $scope.override = $scope.override || {}; - $scope.addOverrideOption = function(name, propertyName, values) { - var option = { - text: name, - propertyName: propertyName, - index: $scope.overrideMenu.lenght, - values: values, - submenu: _.map(values, function(value) { - return { text: String(value), value: value }; - }), - }; - - $scope.overrideMenu.push(option); + $scope.addOverrideOption = function(name, propertyName, values) { + var option = { + text: name, + propertyName: propertyName, + index: $scope.overrideMenu.lenght, + values: values, + submenu: _.map(values, function(value) { + return { text: String(value), value: value }; + }), }; - $scope.setOverride = function(item, subItem) { - // handle color overrides - if (item.propertyName === 'color') { - $scope.openColorSelector($scope.override['color']); + $scope.overrideMenu.push(option); + }; + + $scope.setOverride = function(item, subItem) { + // handle color overrides + if (item.propertyName === 'color') { + $scope.openColorSelector($scope.override['color']); + return; + } + + $scope.override[item.propertyName] = subItem.value; + + // automatically disable lines for this series and the fill below to series + // can be removed by the user if they still want lines + if (item.propertyName === 'fillBelowTo') { + $scope.override['lines'] = false; + $scope.ctrl.addSeriesOverride({ alias: subItem.value, lines: false }); + } + + $scope.updateCurrentOverrides(); + $scope.ctrl.render(); + }; + + $scope.colorSelected = function(color) { + $scope.override['color'] = color; + $scope.updateCurrentOverrides(); + $scope.ctrl.render(); + }; + + $scope.openColorSelector = function(color) { + var fakeSeries = { color: color }; + popoverSrv.show({ + element: $element.find('.dropdown')[0], + position: 'top center', + openOn: 'click', + template: '', + model: { + autoClose: true, + colorSelected: $scope.colorSelected, + series: fakeSeries, + }, + onClose: function() { + $scope.ctrl.render(); + }, + }); + }; + + $scope.removeOverride = function(option) { + delete $scope.override[option.propertyName]; + $scope.updateCurrentOverrides(); + $scope.ctrl.refresh(); + }; + + $scope.getSeriesNames = function() { + return _.map($scope.ctrl.seriesList, function(series) { + return series.alias; + }); + }; + + $scope.updateCurrentOverrides = function() { + $scope.currentOverrides = []; + _.each($scope.overrideMenu, function(option) { + var value = $scope.override[option.propertyName]; + if (_.isUndefined(value)) { return; } - - $scope.override[item.propertyName] = subItem.value; - - // automatically disable lines for this series and the fill below to series - // can be removed by the user if they still want lines - if (item.propertyName === 'fillBelowTo') { - $scope.override['lines'] = false; - $scope.ctrl.addSeriesOverride({ alias: subItem.value, lines: false }); - } - - $scope.updateCurrentOverrides(); - $scope.ctrl.render(); - }; - - $scope.colorSelected = function(color) { - $scope.override['color'] = color; - $scope.updateCurrentOverrides(); - $scope.ctrl.render(); - }; - - $scope.openColorSelector = function(color) { - var fakeSeries = { color: color }; - popoverSrv.show({ - element: $element.find('.dropdown')[0], - position: 'top center', - openOn: 'click', - template: '', - model: { - autoClose: true, - colorSelected: $scope.colorSelected, - series: fakeSeries, - }, - onClose: function() { - $scope.ctrl.render(); - }, + $scope.currentOverrides.push({ + name: option.text, + propertyName: option.propertyName, + value: String(value), }); - }; + }); + }; - $scope.removeOverride = function(option) { - delete $scope.override[option.propertyName]; - $scope.updateCurrentOverrides(); - $scope.ctrl.refresh(); - }; - - $scope.getSeriesNames = function() { - return _.map($scope.ctrl.seriesList, function(series) { - return series.alias; - }); - }; - - $scope.updateCurrentOverrides = function() { - $scope.currentOverrides = []; - _.each($scope.overrideMenu, function(option) { - var value = $scope.override[option.propertyName]; - if (_.isUndefined(value)) { - return; - } - $scope.currentOverrides.push({ - name: option.text, - propertyName: option.propertyName, - value: String(value), - }); - }); - }; - - $scope.addOverrideOption('Bars', 'bars', [true, false]); - $scope.addOverrideOption('Lines', 'lines', [true, false]); - $scope.addOverrideOption('Line fill', 'fill', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); - $scope.addOverrideOption('Line width', 'linewidth', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); - $scope.addOverrideOption('Null point mode', 'nullPointMode', ['connected', 'null', 'null as zero']); - $scope.addOverrideOption('Fill below to', 'fillBelowTo', $scope.getSeriesNames()); - $scope.addOverrideOption('Staircase line', 'steppedLine', [true, false]); - $scope.addOverrideOption('Dashes', 'dashes', [true, false]); - $scope.addOverrideOption('Dash Length', 'dashLength', [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - ]); - $scope.addOverrideOption('Dash Space', 'spaceLength', [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - ]); - $scope.addOverrideOption('Points', 'points', [true, false]); - $scope.addOverrideOption('Points Radius', 'pointradius', [1, 2, 3, 4, 5]); - $scope.addOverrideOption('Stack', 'stack', [true, false, 'A', 'B', 'C', 'D']); - $scope.addOverrideOption('Color', 'color', ['change']); - $scope.addOverrideOption('Y-axis', 'yaxis', [1, 2]); - $scope.addOverrideOption('Z-index', 'zindex', [-3, -2, -1, 0, 1, 2, 3]); - $scope.addOverrideOption('Transform', 'transform', ['negative-Y']); - $scope.addOverrideOption('Legend', 'legend', [true, false]); - $scope.updateCurrentOverrides(); - } + $scope.addOverrideOption('Bars', 'bars', [true, false]); + $scope.addOverrideOption('Lines', 'lines', [true, false]); + $scope.addOverrideOption('Line fill', 'fill', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + $scope.addOverrideOption('Line width', 'linewidth', [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]); + $scope.addOverrideOption('Null point mode', 'nullPointMode', ['connected', 'null', 'null as zero']); + $scope.addOverrideOption('Fill below to', 'fillBelowTo', $scope.getSeriesNames()); + $scope.addOverrideOption('Staircase line', 'steppedLine', [true, false]); + $scope.addOverrideOption('Dashes', 'dashes', [true, false]); + $scope.addOverrideOption('Dash Length', 'dashLength', [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + ]); + $scope.addOverrideOption('Dash Space', 'spaceLength', [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + ]); + $scope.addOverrideOption('Points', 'points', [true, false]); + $scope.addOverrideOption('Points Radius', 'pointradius', [1, 2, 3, 4, 5]); + $scope.addOverrideOption('Stack', 'stack', [true, false, 'A', 'B', 'C', 'D']); + $scope.addOverrideOption('Color', 'color', ['change']); + $scope.addOverrideOption('Y-axis', 'yaxis', [1, 2]); + $scope.addOverrideOption('Z-index', 'zindex', [-3, -2, -1, 0, 1, 2, 3]); + $scope.addOverrideOption('Transform', 'transform', ['negative-Y']); + $scope.addOverrideOption('Legend', 'legend', [true, false]); + $scope.updateCurrentOverrides(); } angular.module('grafana.controllers').controller('SeriesOverridesCtrl', SeriesOverridesCtrl); diff --git a/public/app/plugins/panel/graph/specs/series_override_ctrl.jest.ts b/public/app/plugins/panel/graph/specs/series_override_ctrl.jest.ts new file mode 100644 index 00000000000..2e7456a132a --- /dev/null +++ b/public/app/plugins/panel/graph/specs/series_override_ctrl.jest.ts @@ -0,0 +1,42 @@ +import '../series_overrides_ctrl'; +import { SeriesOverridesCtrl } from '../series_overrides_ctrl'; + +describe('SeriesOverridesCtrl', () => { + let popoverSrv = {}; + let $scope; + + beforeEach(() => { + $scope = { + ctrl: { + refresh: jest.fn(), + render: jest.fn(), + seriesList: [], + }, + render: jest.fn(() => {}), + }; + SeriesOverridesCtrl($scope, {}, popoverSrv); + }); + + describe('When setting an override', () => { + beforeEach(() => { + $scope.setOverride({ propertyName: 'lines' }, { value: true }); + }); + + it('should set override property', () => { + expect($scope.override.lines).toBe(true); + }); + + it('should update view model', () => { + expect($scope.currentOverrides[0].name).toBe('Lines'); + expect($scope.currentOverrides[0].value).toBe('true'); + }); + }); + + describe('When removing overide', () => { + it('click should include option and value index', () => { + $scope.setOverride(1, 0); + $scope.removeOverride({ propertyName: 'lines' }); + expect($scope.currentOverrides.length).toBe(0); + }); + }); +}); diff --git a/public/app/plugins/panel/graph/specs/series_override_ctrl_specs.ts b/public/app/plugins/panel/graph/specs/series_override_ctrl_specs.ts deleted file mode 100644 index 9e311c0775e..00000000000 --- a/public/app/plugins/panel/graph/specs/series_override_ctrl_specs.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { describe, beforeEach, it, expect, sinon, angularMocks } from 'test/lib/common'; -import '../series_overrides_ctrl'; -import helpers from 'test/specs/helpers'; - -describe('SeriesOverridesCtrl', function() { - var ctx = new helpers.ControllerTestContext(); - var popoverSrv = {}; - - beforeEach(angularMocks.module('grafana.services')); - beforeEach(angularMocks.module('grafana.controllers')); - - beforeEach( - ctx.providePhase({ - popoverSrv: popoverSrv, - }) - ); - - beforeEach( - angularMocks.inject(function($rootScope, $controller) { - ctx.scope = $rootScope.$new(); - ctx.scope.ctrl = { - refresh: sinon.spy(), - render: sinon.spy(), - seriesList: [], - }; - ctx.scope.render = function() {}; - ctx.controller = $controller('SeriesOverridesCtrl', { - $scope: ctx.scope, - }); - }) - ); - - describe('When setting an override', function() { - beforeEach(function() { - ctx.scope.setOverride({ propertyName: 'lines' }, { value: true }); - }); - - it('should set override property', function() { - expect(ctx.scope.override.lines).to.be(true); - }); - - it('should update view model', function() { - expect(ctx.scope.currentOverrides[0].name).to.be('Lines'); - expect(ctx.scope.currentOverrides[0].value).to.be('true'); - }); - }); - - describe('When removing overide', function() { - it('click should include option and value index', function() { - ctx.scope.setOverride(1, 0); - ctx.scope.removeOverride({ propertyName: 'lines' }); - expect(ctx.scope.currentOverrides.length).to.be(0); - }); - }); -});