Browse Source

stackdriver: add unit tests to resolve unit function

Erik Sundell 7 years ago
parent
commit
92f50ca384

+ 2 - 2
public/app/plugins/datasource/stackdriver/datasource.ts

@@ -86,7 +86,7 @@ export default class StackdriverDatasource {
     return interpolatedGroupBys;
   }
 
-  resolveUnit(targets: any[]) {
+  resolvePanelUnitFromTargets(targets: any[]) {
     let unit = 'none';
     if (targets.length > 0 && targets.every(t => t.unit === targets[0].unit)) {
       if (stackdriverUnitMappings.hasOwnProperty(targets[0].unit)) {
@@ -105,7 +105,7 @@ export default class StackdriverDatasource {
           return;
         }
 
-        const unit = this.resolveUnit(options.targets);
+        const unit = this.resolvePanelUnitFromTargets(options.targets);
         queryRes.series.forEach(series => {
           result.push({
             target: series.name,

+ 52 - 0
public/app/plugins/datasource/stackdriver/specs/datasource.test.ts

@@ -219,4 +219,56 @@ describe('StackdriverDataSource', () => {
       });
     });
   });
+
+  describe('unit parsing', () => {
+    let ds, res;
+    beforeEach(() => {
+      ds = new StackdriverDataSource(instanceSettings, {}, templateSrv, timeSrv);
+    });
+    describe('when theres only one target', () => {
+      describe('and the stackdriver unit doesnt have a corresponding grafana unit', () => {
+        beforeEach(() => {
+          res = ds.resolvePanelUnitFromTargets([{ unit: 'megaseconds' }]);
+        });
+        it('should return none', () => {
+          expect(res).toEqual('none');
+        });
+      });
+      describe('and the stackdriver unit has a corresponding grafana unit', () => {
+        beforeEach(() => {
+          res = ds.resolvePanelUnitFromTargets([{ unit: 'bit' }]);
+        });
+        it('should return bits', () => {
+          expect(res).toEqual('bits');
+        });
+      });
+    });
+
+    describe('when theres more than one target', () => {
+      describe('and all target units are the same', () => {
+        beforeEach(() => {
+          res = ds.resolvePanelUnitFromTargets([{ unit: 'bit' }, { unit: 'bit' }]);
+        });
+        it('should return bits', () => {
+          expect(res).toEqual('bits');
+        });
+      });
+      describe('and all target units are the same but doesnt have grafana mappings', () => {
+        beforeEach(() => {
+          res = ds.resolvePanelUnitFromTargets([{ unit: 'megaseconds' }, { unit: 'megaseconds' }]);
+        });
+        it('should return the default value - none', () => {
+          expect(res).toEqual('none');
+        });
+      });
+      describe('and all target units are not the same', () => {
+        beforeEach(() => {
+          res = ds.resolvePanelUnitFromTargets([{ unit: 'bit' }, { unit: 'min' }]);
+        });
+        it('should return the default value - none', () => {
+          expect(res).toEqual('none');
+        });
+      });
+    });
+  });
 });