diff --git a/src/app/controllers/graphiteTarget.js b/src/app/controllers/graphiteTarget.js index 138cea61e9e..4225dcedb17 100644 --- a/src/app/controllers/graphiteTarget.js +++ b/src/app/controllers/graphiteTarget.js @@ -2,10 +2,10 @@ define([ 'angular', 'underscore', 'config', - '../services/graphite/graphiteFuncs', + '../services/graphite/gfunc', '../services/graphite/parser' ], -function (angular, _, config, graphiteFuncs, Parser) { +function (angular, _, config, gfunc, Parser) { 'use strict'; var module = angular.module('kibana.controllers'); @@ -13,7 +13,7 @@ function (angular, _, config, graphiteFuncs, Parser) { module.controller('GraphiteTargetCtrl', function($scope, $http, filterSrv, graphiteSrv) { $scope.init = function() { - $scope.funcCategories = graphiteFuncs.getCategories(); + $scope.funcCategories = gfunc.getCategories(); parseTarget(); }; @@ -56,7 +56,7 @@ function (angular, _, config, graphiteFuncs, Parser) { switch(astNode.type) { case 'function': - var innerFunc = graphiteFuncs.createFuncInstance(astNode.name); + var innerFunc = gfunc.createFuncInstance(astNode.name); _.each(astNode.params, function(param, index) { parseTargeRecursive(param, innerFunc, index); @@ -226,7 +226,7 @@ function (angular, _, config, graphiteFuncs, Parser) { }; $scope.addFunction = function(funcDef) { - $scope.functions.push(graphiteFuncs.createFuncInstance(funcDef)); + $scope.functions.push(gfunc.createFuncInstance(funcDef)); $scope.targetChanged(); }; diff --git a/src/app/services/graphite/graphiteFuncs.js b/src/app/services/graphite/gfunc.js similarity index 89% rename from src/app/services/graphite/graphiteFuncs.js rename to src/app/services/graphite/gfunc.js index 9068668e1d9..b76078ef233 100644 --- a/src/app/services/graphite/graphiteFuncs.js +++ b/src/app/services/graphite/gfunc.js @@ -14,6 +14,9 @@ function (_) { }; function addFuncDef(funcDef) { + funcDef.params = funcDef.params || []; + funcDef.defaultParams = funcDef.defaultParams || []; + if (funcDef.category) { funcDef.category.push(funcDef); } @@ -38,8 +41,6 @@ function (_) { addFuncDef({ name: "holtWintersForecast", category: categories.Calculate, - params: [], - defaultParams: [] }); addFuncDef({ @@ -60,16 +61,12 @@ function (_) { name: 'sumSeries', shortName: 'sum', category: categories.Combine, - params: [], - defaultParams: [] }); addFuncDef({ name: 'averageSeries', shortName: 'avg', category: categories.Combine, - params: [], - defaultParams: [] }); addFuncDef({ @@ -106,15 +103,11 @@ function (_) { addFuncDef({ name: 'integral', category: categories.Transform, - params: [], - defaultParams: [] }); addFuncDef({ name: 'derivate', category: categories.Transform, - params: [], - defaultParams: [] }); addFuncDef({ @@ -150,15 +143,14 @@ function (_) { }; return { - createFuncInstance: function(name) { - if (_.isString(name)) { - var funcDef = index[name]; - if (!funcDef) { + createFuncInstance: function(funcDef) { + if (_.isString(funcDef)) { + if (!index[funcDef]) { throw { message: 'Method not found ' + name }; } - name = funcDef; + funcDef = index[funcDef]; } - return new FuncInstance(name); + return new FuncInstance(funcDef); }, getCategories: function() { diff --git a/src/test/karma.conf.js b/src/test/karma.conf.js index e28da108300..50c65184087 100644 --- a/src/test/karma.conf.js +++ b/src/test/karma.conf.js @@ -8,6 +8,7 @@ module.exports = function(config) { files: [ 'test/test-main.js', {pattern: 'app/**/*.js', included: false}, + {pattern: 'vendor/**/*.js', included: false}, {pattern: 'test/**/*.js', included: false} ], diff --git a/src/test/specs/gfunc-specs.js b/src/test/specs/gfunc-specs.js new file mode 100644 index 00000000000..0a4e637f9c2 --- /dev/null +++ b/src/test/specs/gfunc-specs.js @@ -0,0 +1,46 @@ +define([ + 'app/services/graphite/gfunc' +], function(gfunc) { + + describe('when creating func instance from func namae', function() { + + it('should return func instance', function() { + var func = gfunc.createFuncInstance('sumSeries'); + expect(func).to.be.ok(); + expect(func.def.name).to.equal('sumSeries'); + expect(func.def.params.length).to.equal(0); + expect(func.def.defaultParams.length).to.equal(0); + expect(func.def.defaultParams.length).to.equal(0); + }); + + it('should return func instance with shortName', function() { + var func = gfunc.createFuncInstance('sum'); + expect(func).to.be.ok(); + }); + + it('should return func instance from funcDef', function() { + var func = gfunc.createFuncInstance('sum'); + var func = gfunc.createFuncInstance(func.def); + expect(func).to.be.ok(); + }); + + it('func instance should have text representation', function() { + var func = gfunc.createFuncInstance('groupByNode'); + func.params[0] = 5; + func.params[1] = 'avg'; + func.updateText(); + expect(func.text).to.equal("groupByNode(5, avg)"); + }); + + }); + + describe('when requesting function categories', function() { + + it('should return function categories', function() { + var catIndex = gfunc.getCategories(); + expect(catIndex.Special.length).to.equal(3); + }); + + }); + +}); diff --git a/src/test/test-main.js b/src/test/test-main.js index 3b48c825c04..b1700b37dd5 100644 --- a/src/test/test-main.js +++ b/src/test/test-main.js @@ -1,10 +1,22 @@ require.config({ - baseUrl:'base' + baseUrl: 'base', + + paths: { + underscore: 'app/components/underscore.extended', + 'underscore-src': 'vendor/underscore', + }, + + shim: { + underscore: { + exports: '_' + }, + } }); require([ 'test/specs/lexer-specs', 'test/specs/parser-specs', + 'test/specs/gfunc-specs', ], function () { window.__karma__.start(); }); \ No newline at end of file