Commit 35cc85bf by Tobias Skarhed

All tests passing. Remove Karma test.

parent 931b944c
...@@ -3,7 +3,6 @@ import '../all'; ...@@ -3,7 +3,6 @@ import '../all';
import _ from 'lodash'; import _ from 'lodash';
import { VariableSrv } from '../variable_srv'; import { VariableSrv } from '../variable_srv';
import $q from 'q'; import $q from 'q';
// import { TemplateSrv } from '../template_srv';
describe('VariableSrv init', function() { describe('VariableSrv init', function() {
let templateSrv = { let templateSrv = {
...@@ -12,22 +11,21 @@ describe('VariableSrv init', function() { ...@@ -12,22 +11,21 @@ describe('VariableSrv init', function() {
}, },
variableInitialized: () => {}, variableInitialized: () => {},
updateTemplateData: () => {}, updateTemplateData: () => {},
replace: () => ' /pee$/', replace: str =>
str.replace(this.regex, match => {
return match;
}),
}; };
// let templateSrv = new TemplateSrv();
let $injector = <any>{}; let $injector = <any>{};
let $rootscope = { let $rootscope = {
$on: () => {}, $on: () => {},
}; };
let ctx = <any>{ let ctx = <any>{};
datasourceSrv: {},
$location: {},
dashboard: {},
};
function describeInitScenario(desc, fn) { function describeInitScenario(desc, fn) {
describe(desc, function() { describe(desc, () => {
var scenario: any = { var scenario: any = {
urlParams: {}, urlParams: {},
setup: setupFn => { setup: setupFn => {
...@@ -43,7 +41,7 @@ describe('VariableSrv init', function() { ...@@ -43,7 +41,7 @@ describe('VariableSrv init', function() {
}, },
datasourceSrv: { datasourceSrv: {
get: () => Promise.resolve(ctx.datasource), get: () => Promise.resolve(ctx.datasource),
getMetricSources: () => Promise.resolve(scenario.metricSources), getMetricSources: () => scenario.metricSources,
}, },
templateSrv, templateSrv,
}; };
...@@ -87,7 +85,6 @@ describe('VariableSrv init', function() { ...@@ -87,7 +85,6 @@ describe('VariableSrv init', function() {
}); });
it('should update current value', () => { it('should update current value', () => {
console.log(type);
expect(scenario.variables[0].current.value).toBe('new'); expect(scenario.variables[0].current.value).toBe('new');
expect(scenario.variables[0].current.text).toBe('new'); expect(scenario.variables[0].current.text).toBe('new');
}); });
...@@ -150,8 +147,7 @@ describe('VariableSrv init', function() { ...@@ -150,8 +147,7 @@ describe('VariableSrv init', function() {
]; ];
}); });
it('should update current value', function() { it('should update current value', () => {
console.log(ctx.variableSrv.variables[0].options);
var variable = ctx.variableSrv.variables[0]; var variable = ctx.variableSrv.variables[0];
expect(variable.options.length).toBe(2); expect(variable.options.length).toBe(2);
}); });
...@@ -175,7 +171,7 @@ describe('VariableSrv init', function() { ...@@ -175,7 +171,7 @@ describe('VariableSrv init', function() {
scenario.urlParams['var-apps'] = ['val2', 'val1']; scenario.urlParams['var-apps'] = ['val2', 'val1'];
}); });
it('should update current value', function() { it('should update current value', () => {
var variable = ctx.variableSrv.variables[0]; var variable = ctx.variableSrv.variables[0];
expect(variable.current.value.length).toBe(2); expect(variable.current.value.length).toBe(2);
expect(variable.current.value[0]).toBe('val2'); expect(variable.current.value[0]).toBe('val2');
...@@ -185,7 +181,7 @@ describe('VariableSrv init', function() { ...@@ -185,7 +181,7 @@ describe('VariableSrv init', function() {
expect(variable.options[1].selected).toBe(true); expect(variable.options[1].selected).toBe(true);
}); });
it('should set options that are not in value to selected false', function() { it('should set options that are not in value to selected false', () => {
var variable = ctx.variableSrv.variables[0]; var variable = ctx.variableSrv.variables[0];
expect(variable.options[2].selected).toBe(false); expect(variable.options[2].selected).toBe(false);
}); });
...@@ -209,7 +205,7 @@ describe('VariableSrv init', function() { ...@@ -209,7 +205,7 @@ describe('VariableSrv init', function() {
scenario.urlParams['var-apps'] = ['val2', 'val1']; scenario.urlParams['var-apps'] = ['val2', 'val1'];
}); });
it('should update current value', function() { it('should update current value', () => {
var variable = ctx.variableSrv.variables[0]; var variable = ctx.variableSrv.variables[0];
expect(variable.current.value.length).toBe(2); expect(variable.current.value.length).toBe(2);
expect(variable.current.value[0]).toBe('val2'); expect(variable.current.value[0]).toBe('val2');
...@@ -219,7 +215,7 @@ describe('VariableSrv init', function() { ...@@ -219,7 +215,7 @@ describe('VariableSrv init', function() {
expect(variable.options[1].selected).toBe(true); expect(variable.options[1].selected).toBe(true);
}); });
it('should set options that are not in value to selected false', function() { it('should set options that are not in value to selected false', () => {
var variable = ctx.variableSrv.variables[0]; var variable = ctx.variableSrv.variables[0];
expect(variable.options[2].selected).toBe(false); expect(variable.options[2].selected).toBe(false);
}); });
...@@ -227,7 +223,6 @@ describe('VariableSrv init', function() { ...@@ -227,7 +223,6 @@ describe('VariableSrv init', function() {
}); });
function getVarMockConstructor(variable, model, ctx) { function getVarMockConstructor(variable, model, ctx) {
// console.log(model.model.type);
switch (model.model.type) { switch (model.model.type) {
case 'datasource': case 'datasource':
return new variable(model.model, ctx.datasourceSrv, ctx.variableSrv, ctx.templateSrv); return new variable(model.model, ctx.datasourceSrv, ctx.variableSrv, ctx.templateSrv);
......
import { describe, beforeEach, it, sinon, expect, angularMocks } from 'test/lib/common';
import '../all';
import _ from 'lodash';
import helpers from 'test/specs/helpers';
import { Emitter } from 'app/core/core';
describe('VariableSrv init', function() {
var ctx = new helpers.ControllerTestContext();
beforeEach(angularMocks.module('grafana.core'));
beforeEach(angularMocks.module('grafana.controllers'));
beforeEach(angularMocks.module('grafana.services'));
beforeEach(
angularMocks.module(function($compileProvider) {
$compileProvider.preAssignBindingsEnabled(true);
})
);
beforeEach(ctx.providePhase(['datasourceSrv', 'timeSrv', 'templateSrv', '$location']));
beforeEach(
angularMocks.inject(($rootScope, $q, $location, $injector) => {
ctx.$q = $q;
ctx.$rootScope = $rootScope;
ctx.$location = $location;
ctx.variableSrv = $injector.get('variableSrv');
ctx.$rootScope.$digest();
})
);
function describeInitScenario(desc, fn) {
describe(desc, function() {
var scenario: any = {
urlParams: {},
setup: setupFn => {
scenario.setupFn = setupFn;
},
};
beforeEach(function() {
scenario.setupFn();
ctx.datasource = {};
ctx.datasource.metricFindQuery = sinon.stub().returns(ctx.$q.when(scenario.queryResult));
ctx.datasourceSrv.get = sinon.stub().returns(ctx.$q.when(ctx.datasource));
ctx.datasourceSrv.getMetricSources = sinon.stub().returns(scenario.metricSources);
ctx.$location.search = sinon.stub().returns(scenario.urlParams);
ctx.dashboard = {
templating: { list: scenario.variables },
events: new Emitter(),
};
ctx.variableSrv.init(ctx.dashboard);
ctx.$rootScope.$digest();
scenario.variables = ctx.variableSrv.variables;
});
fn(scenario);
});
}
['query', 'interval', 'custom', 'datasource'].forEach(type => {
describeInitScenario('when setting ' + type + ' variable via url', scenario => {
scenario.setup(() => {
scenario.variables = [
{
name: 'apps',
type: type,
current: { text: 'test', value: 'test' },
options: [{ text: 'test', value: 'test' }],
},
];
scenario.urlParams['var-apps'] = 'new';
scenario.metricSources = [];
});
it('should update current value', () => {
expect(scenario.variables[0].current.value).to.be('new');
expect(scenario.variables[0].current.text).to.be('new');
});
});
});
describe('given dependent variables', () => {
var variableList = [
{
name: 'app',
type: 'query',
query: '',
current: { text: 'app1', value: 'app1' },
options: [{ text: 'app1', value: 'app1' }],
},
{
name: 'server',
type: 'query',
refresh: 1,
query: '$app.*',
current: { text: 'server1', value: 'server1' },
options: [{ text: 'server1', value: 'server1' }],
},
];
describeInitScenario('when setting parent var from url', scenario => {
scenario.setup(() => {
scenario.variables = _.cloneDeep(variableList);
scenario.urlParams['var-app'] = 'google';
scenario.queryResult = [{ text: 'google-server1' }, { text: 'google-server2' }];
});
it('should update child variable', () => {
expect(scenario.variables[1].options.length).to.be(2);
expect(scenario.variables[1].current.text).to.be('google-server1');
});
it('should only update it once', () => {
expect(ctx.datasource.metricFindQuery.callCount).to.be(1);
});
});
});
describeInitScenario('when datasource variable is initialized', scenario => {
scenario.setup(() => {
scenario.variables = [
{
type: 'datasource',
query: 'graphite',
name: 'test',
current: { value: 'backend4_pee', text: 'backend4_pee' },
regex: '/pee$/',
},
];
scenario.metricSources = [
{ name: 'backend1', meta: { id: 'influx' } },
{ name: 'backend2_pee', meta: { id: 'graphite' } },
{ name: 'backend3', meta: { id: 'graphite' } },
{ name: 'backend4_pee', meta: { id: 'graphite' } },
];
});
it('should update current value', function() {
var variable = ctx.variableSrv.variables[0];
expect(variable.options.length).to.be(2);
});
});
describeInitScenario('when template variable is present in url multiple times', scenario => {
scenario.setup(() => {
scenario.variables = [
{
name: 'apps',
type: 'query',
multi: true,
current: { text: 'val1', value: 'val1' },
options: [
{ text: 'val1', value: 'val1' },
{ text: 'val2', value: 'val2' },
{ text: 'val3', value: 'val3', selected: true },
],
},
];
scenario.urlParams['var-apps'] = ['val2', 'val1'];
});
it('should update current value', function() {
var variable = ctx.variableSrv.variables[0];
expect(variable.current.value.length).to.be(2);
expect(variable.current.value[0]).to.be('val2');
expect(variable.current.value[1]).to.be('val1');
expect(variable.current.text).to.be('val2 + val1');
expect(variable.options[0].selected).to.be(true);
expect(variable.options[1].selected).to.be(true);
});
it('should set options that are not in value to selected false', function() {
var variable = ctx.variableSrv.variables[0];
expect(variable.options[2].selected).to.be(false);
});
});
describeInitScenario('when template variable is present in url multiple times using key/values', scenario => {
scenario.setup(() => {
scenario.variables = [
{
name: 'apps',
type: 'query',
multi: true,
current: { text: 'Val1', value: 'val1' },
options: [
{ text: 'Val1', value: 'val1' },
{ text: 'Val2', value: 'val2' },
{ text: 'Val3', value: 'val3', selected: true },
],
},
];
scenario.urlParams['var-apps'] = ['val2', 'val1'];
});
it('should update current value', function() {
var variable = ctx.variableSrv.variables[0];
expect(variable.current.value.length).to.be(2);
expect(variable.current.value[0]).to.be('val2');
expect(variable.current.value[1]).to.be('val1');
expect(variable.current.text).to.be('Val2 + Val1');
expect(variable.options[0].selected).to.be(true);
expect(variable.options[1].selected).to.be(true);
});
it('should set options that are not in value to selected false', function() {
var variable = ctx.variableSrv.variables[0];
expect(variable.options[2].selected).to.be(false);
});
});
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment