Browse Source

Merge pull request #12819 from dehrax/12224-opentsdb-ds

Karma to Jest: OpenTSDB datasource
Marcus Efraimsson 7 years ago
parent
commit
ca0339fb48

+ 0 - 105
public/app/plugins/datasource/opentsdb/specs/datasource-specs.ts

@@ -1,105 +0,0 @@
-import { describe, beforeEach, it, expect, angularMocks } from 'test/lib/common';
-import helpers from 'test/specs/helpers';
-import OpenTsDatasource from '../datasource';
-
-describe('opentsdb', function() {
-  var ctx = new helpers.ServiceTestContext();
-  var instanceSettings = { url: '', jsonData: { tsdbVersion: 1 } };
-
-  beforeEach(angularMocks.module('grafana.core'));
-  beforeEach(angularMocks.module('grafana.services'));
-  beforeEach(ctx.providePhase(['backendSrv']));
-
-  beforeEach(
-    angularMocks.inject(function($q, $rootScope, $httpBackend, $injector) {
-      ctx.$q = $q;
-      ctx.$httpBackend = $httpBackend;
-      ctx.$rootScope = $rootScope;
-      ctx.ds = $injector.instantiate(OpenTsDatasource, {
-        instanceSettings: instanceSettings,
-      });
-      $httpBackend.when('GET', /\.html$/).respond('');
-    })
-  );
-
-  describe('When performing metricFindQuery', function() {
-    var results;
-    var requestOptions;
-
-    beforeEach(function() {
-      ctx.backendSrv.datasourceRequest = function(options) {
-        requestOptions = options;
-        return ctx.$q.when({
-          data: [{ target: 'prod1.count', datapoints: [[10, 1], [12, 1]] }],
-        });
-      };
-    });
-
-    it('metrics() should generate api suggest query', function() {
-      ctx.ds.metricFindQuery('metrics(pew)').then(function(data) {
-        results = data;
-      });
-      ctx.$rootScope.$apply();
-      expect(requestOptions.url).to.be('/api/suggest');
-      expect(requestOptions.params.type).to.be('metrics');
-      expect(requestOptions.params.q).to.be('pew');
-      expect(results).not.to.be(null);
-    });
-
-    it('tag_names(cpu) should generate lookup query', function() {
-      ctx.ds.metricFindQuery('tag_names(cpu)').then(function(data) {
-        results = data;
-      });
-      ctx.$rootScope.$apply();
-      expect(requestOptions.url).to.be('/api/search/lookup');
-      expect(requestOptions.params.m).to.be('cpu');
-    });
-
-    it('tag_values(cpu, test) should generate lookup query', function() {
-      ctx.ds.metricFindQuery('tag_values(cpu, hostname)').then(function(data) {
-        results = data;
-      });
-      ctx.$rootScope.$apply();
-      expect(requestOptions.url).to.be('/api/search/lookup');
-      expect(requestOptions.params.m).to.be('cpu{hostname=*}');
-    });
-
-    it('tag_values(cpu, test) should generate lookup query', function() {
-      ctx.ds.metricFindQuery('tag_values(cpu, hostname, env=$env)').then(function(data) {
-        results = data;
-      });
-      ctx.$rootScope.$apply();
-      expect(requestOptions.url).to.be('/api/search/lookup');
-      expect(requestOptions.params.m).to.be('cpu{hostname=*,env=$env}');
-    });
-
-    it('tag_values(cpu, test) should generate lookup query', function() {
-      ctx.ds.metricFindQuery('tag_values(cpu, hostname, env=$env, region=$region)').then(function(data) {
-        results = data;
-      });
-      ctx.$rootScope.$apply();
-      expect(requestOptions.url).to.be('/api/search/lookup');
-      expect(requestOptions.params.m).to.be('cpu{hostname=*,env=$env,region=$region}');
-    });
-
-    it('suggest_tagk() should generate api suggest query', function() {
-      ctx.ds.metricFindQuery('suggest_tagk(foo)').then(function(data) {
-        results = data;
-      });
-      ctx.$rootScope.$apply();
-      expect(requestOptions.url).to.be('/api/suggest');
-      expect(requestOptions.params.type).to.be('tagk');
-      expect(requestOptions.params.q).to.be('foo');
-    });
-
-    it('suggest_tagv() should generate api suggest query', function() {
-      ctx.ds.metricFindQuery('suggest_tagv(bar)').then(function(data) {
-        results = data;
-      });
-      ctx.$rootScope.$apply();
-      expect(requestOptions.url).to.be('/api/suggest');
-      expect(requestOptions.params.type).to.be('tagv');
-      expect(requestOptions.params.q).to.be('bar');
-    });
-  });
-});

+ 91 - 0
public/app/plugins/datasource/opentsdb/specs/datasource.jest.ts

@@ -0,0 +1,91 @@
+import OpenTsDatasource from '../datasource';
+import $q from 'q';
+
+describe('opentsdb', () => {
+  let ctx = <any>{
+    backendSrv: {},
+    ds: {},
+    templateSrv: {
+      replace: str => str,
+    },
+  };
+  let instanceSettings = { url: '', jsonData: { tsdbVersion: 1 } };
+
+  beforeEach(() => {
+    ctx.ctrl = new OpenTsDatasource(instanceSettings, $q, ctx.backendSrv, ctx.templateSrv);
+  });
+
+  describe('When performing metricFindQuery', () => {
+    var results;
+    var requestOptions;
+
+    beforeEach(async () => {
+      ctx.backendSrv.datasourceRequest = await function(options) {
+        requestOptions = options;
+        return Promise.resolve({
+          data: [{ target: 'prod1.count', datapoints: [[10, 1], [12, 1]] }],
+        });
+      };
+    });
+
+    it('metrics() should generate api suggest query', () => {
+      ctx.ctrl.metricFindQuery('metrics(pew)').then(function(data) {
+        results = data;
+      });
+      expect(requestOptions.url).toBe('/api/suggest');
+      expect(requestOptions.params.type).toBe('metrics');
+      expect(requestOptions.params.q).toBe('pew');
+      expect(results).not.toBe(null);
+    });
+
+    it('tag_names(cpu) should generate lookup query', () => {
+      ctx.ctrl.metricFindQuery('tag_names(cpu)').then(function(data) {
+        results = data;
+      });
+      expect(requestOptions.url).toBe('/api/search/lookup');
+      expect(requestOptions.params.m).toBe('cpu');
+    });
+
+    it('tag_values(cpu, test) should generate lookup query', () => {
+      ctx.ctrl.metricFindQuery('tag_values(cpu, hostname)').then(function(data) {
+        results = data;
+      });
+      expect(requestOptions.url).toBe('/api/search/lookup');
+      expect(requestOptions.params.m).toBe('cpu{hostname=*}');
+    });
+
+    it('tag_values(cpu, test) should generate lookup query', () => {
+      ctx.ctrl.metricFindQuery('tag_values(cpu, hostname, env=$env)').then(function(data) {
+        results = data;
+      });
+      expect(requestOptions.url).toBe('/api/search/lookup');
+      expect(requestOptions.params.m).toBe('cpu{hostname=*,env=$env}');
+    });
+
+    it('tag_values(cpu, test) should generate lookup query', () => {
+      ctx.ctrl.metricFindQuery('tag_values(cpu, hostname, env=$env, region=$region)').then(function(data) {
+        results = data;
+      });
+      expect(requestOptions.url).toBe('/api/search/lookup');
+      expect(requestOptions.params.m).toBe('cpu{hostname=*,env=$env,region=$region}');
+    });
+
+    it('suggest_tagk() should generate api suggest query', () => {
+      ctx.ctrl.metricFindQuery('suggest_tagk(foo)').then(function(data) {
+        results = data;
+      });
+      expect(requestOptions.url).toBe('/api/suggest');
+      expect(requestOptions.params.type).toBe('tagk');
+      expect(requestOptions.params.q).toBe('foo');
+    });
+
+    it('suggest_tagv() should generate api suggest query', () => {
+      ctx.ctrl.metricFindQuery('suggest_tagv(bar)').then(function(data) {
+        results = data;
+      });
+      expect(requestOptions.url).toBe('/api/suggest');
+      expect(requestOptions.params.type).toBe('tagv');
+      expect(requestOptions.params.q).toBe('bar');
+    });
+  });
+});

+ 0 - 113
public/app/plugins/datasource/opentsdb/specs/query-ctrl-specs.ts

@@ -1,113 +0,0 @@
-import { describe, beforeEach, it, sinon, expect, angularMocks } from 'test/lib/common';
-import helpers from 'test/specs/helpers';
-import { OpenTsQueryCtrl } from '../query_ctrl';
-
-describe('OpenTsQueryCtrl', function() {
-  var ctx = new helpers.ControllerTestContext();
-
-  beforeEach(angularMocks.module('grafana.core'));
-  beforeEach(angularMocks.module('grafana.services'));
-  beforeEach(
-    angularMocks.module(function($compileProvider) {
-      $compileProvider.preAssignBindingsEnabled(true);
-    })
-  );
-
-  beforeEach(ctx.providePhase(['backendSrv', 'templateSrv']));
-
-  beforeEach(ctx.providePhase());
-  beforeEach(
-    angularMocks.inject(($rootScope, $controller, $q) => {
-      ctx.$q = $q;
-      ctx.scope = $rootScope.$new();
-      ctx.target = { target: '' };
-      ctx.panelCtrl = {
-        panel: {
-          targets: [ctx.target],
-        },
-      };
-      ctx.panelCtrl.refresh = sinon.spy();
-      ctx.datasource.getAggregators = sinon.stub().returns(ctx.$q.when([]));
-      ctx.datasource.getFilterTypes = sinon.stub().returns(ctx.$q.when([]));
-
-      ctx.ctrl = $controller(
-        OpenTsQueryCtrl,
-        { $scope: ctx.scope },
-        {
-          panelCtrl: ctx.panelCtrl,
-          datasource: ctx.datasource,
-          target: ctx.target,
-        }
-      );
-      ctx.scope.$digest();
-    })
-  );
-
-  describe('init query_ctrl variables', function() {
-    it('filter types should be initialized', function() {
-      expect(ctx.ctrl.filterTypes.length).to.be(7);
-    });
-
-    it('aggregators should be initialized', function() {
-      expect(ctx.ctrl.aggregators.length).to.be(8);
-    });
-
-    it('fill policy options should be initialized', function() {
-      expect(ctx.ctrl.fillPolicies.length).to.be(4);
-    });
-  });
-
-  describe('when adding filters and tags', function() {
-    it('addTagMode should be false when closed', function() {
-      ctx.ctrl.addTagMode = true;
-      ctx.ctrl.closeAddTagMode();
-      expect(ctx.ctrl.addTagMode).to.be(false);
-    });
-
-    it('addFilterMode should be false when closed', function() {
-      ctx.ctrl.addFilterMode = true;
-      ctx.ctrl.closeAddFilterMode();
-      expect(ctx.ctrl.addFilterMode).to.be(false);
-    });
-
-    it('removing a tag from the tags list', function() {
-      ctx.ctrl.target.tags = { tagk: 'tag_key', tagk2: 'tag_value2' };
-      ctx.ctrl.removeTag('tagk');
-      expect(Object.keys(ctx.ctrl.target.tags).length).to.be(1);
-    });
-
-    it('removing a filter from the filters list', function() {
-      ctx.ctrl.target.filters = [
-        {
-          tagk: 'tag_key',
-          filter: 'tag_value2',
-          type: 'wildcard',
-          groupBy: true,
-        },
-      ];
-      ctx.ctrl.removeFilter(0);
-      expect(ctx.ctrl.target.filters.length).to.be(0);
-    });
-
-    it('adding a filter when tags exist should generate error', function() {
-      ctx.ctrl.target.tags = { tagk: 'tag_key', tagk2: 'tag_value2' };
-      ctx.ctrl.addFilter();
-      expect(ctx.ctrl.errors.filters).to.be(
-        'Please remove tags to use filters, tags and filters are mutually exclusive.'
-      );
-    });
-
-    it('adding a tag when filters exist should generate error', function() {
-      ctx.ctrl.target.filters = [
-        {
-          tagk: 'tag_key',
-          filter: 'tag_value2',
-          type: 'wildcard',
-          groupBy: true,
-        },
-      ];
-      ctx.ctrl.addTag();
-      expect(ctx.ctrl.errors.tags).to.be('Please remove filters to use tags, tags and filters are mutually exclusive.');
-    });
-  });
-});

+ 93 - 0
public/app/plugins/datasource/opentsdb/specs/query_ctrl.jest.ts

@@ -0,0 +1,93 @@
+import { OpenTsQueryCtrl } from '../query_ctrl';
+
+describe('OpenTsQueryCtrl', () => {
+  var ctx = <any>{
+    target: { target: '' },
+    datasource: {
+      tsdbVersion: '',
+      getAggregators: () => Promise.resolve([]),
+      getFilterTypes: () => Promise.resolve([]),
+    },
+  };
+
+  ctx.panelCtrl = {
+    panel: {
+      targets: [ctx.target],
+    },
+    refresh: () => {},
+  };
+
+  OpenTsQueryCtrl.prototype = Object.assign(OpenTsQueryCtrl.prototype, ctx);
+
+  beforeEach(() => {
+    ctx.ctrl = new OpenTsQueryCtrl({}, {});
+  });
+
+  describe('init query_ctrl variables', () => {
+    it('filter types should be initialized', () => {
+      expect(ctx.ctrl.filterTypes.length).toBe(7);
+    });
+
+    it('aggregators should be initialized', () => {
+      expect(ctx.ctrl.aggregators.length).toBe(8);
+    });
+
+    it('fill policy options should be initialized', () => {
+      expect(ctx.ctrl.fillPolicies.length).toBe(4);
+    });
+  });
+
+  describe('when adding filters and tags', () => {
+    it('addTagMode should be false when closed', () => {
+      ctx.ctrl.addTagMode = true;
+      ctx.ctrl.closeAddTagMode();
+      expect(ctx.ctrl.addTagMode).toBe(false);
+    });
+
+    it('addFilterMode should be false when closed', () => {
+      ctx.ctrl.addFilterMode = true;
+      ctx.ctrl.closeAddFilterMode();
+      expect(ctx.ctrl.addFilterMode).toBe(false);
+    });
+
+    it('removing a tag from the tags list', () => {
+      ctx.ctrl.target.tags = { tagk: 'tag_key', tagk2: 'tag_value2' };
+      ctx.ctrl.removeTag('tagk');
+      expect(Object.keys(ctx.ctrl.target.tags).length).toBe(1);
+    });
+
+    it('removing a filter from the filters list', () => {
+      ctx.ctrl.target.filters = [
+        {
+          tagk: 'tag_key',
+          filter: 'tag_value2',
+          type: 'wildcard',
+          groupBy: true,
+        },
+      ];
+      ctx.ctrl.removeFilter(0);
+      expect(ctx.ctrl.target.filters.length).toBe(0);
+    });
+
+    it('adding a filter when tags exist should generate error', () => {
+      ctx.ctrl.target.tags = { tagk: 'tag_key', tagk2: 'tag_value2' };
+      ctx.ctrl.addFilter();
+      expect(ctx.ctrl.errors.filters).toBe(
+        'Please remove tags to use filters, tags and filters are mutually exclusive.'
+      );
+    });
+
+    it('adding a tag when filters exist should generate error', () => {
+      ctx.ctrl.target.filters = [
+        {
+          tagk: 'tag_key',
+          filter: 'tag_value2',
+          type: 'wildcard',
+          groupBy: true,
+        },
+      ];
+      ctx.ctrl.addTag();
+      expect(ctx.ctrl.errors.tags).toBe('Please remove filters to use tags, tags and filters are mutually exclusive.');
+    });
+  });
+});