From f15919555b039322dfb5043f13df9ee11c13e974 Mon Sep 17 00:00:00 2001 From: Daniel Lee Date: Thu, 17 May 2018 14:56:15 +0200 Subject: [PATCH] explore: fixes #11953 --- .../app/features/panel/metrics_panel_ctrl.ts | 2 +- .../panel/specs/metrics_panel_ctrl.jest.ts | 65 +++++++++++++++++++ 2 files changed, 66 insertions(+), 1 deletion(-) create mode 100644 public/app/features/panel/specs/metrics_panel_ctrl.jest.ts diff --git a/public/app/features/panel/metrics_panel_ctrl.ts b/public/app/features/panel/metrics_panel_ctrl.ts index acf46a193e8..d460b27a679 100644 --- a/public/app/features/panel/metrics_panel_ctrl.ts +++ b/public/app/features/panel/metrics_panel_ctrl.ts @@ -312,7 +312,7 @@ class MetricsPanelCtrl extends PanelCtrl { getAdditionalMenuItems() { const items = []; - if (this.datasource.supportsExplore) { + if (this.datasource && this.datasource.supportsExplore) { items.push({ text: 'Explore', click: 'ctrl.explore();', diff --git a/public/app/features/panel/specs/metrics_panel_ctrl.jest.ts b/public/app/features/panel/specs/metrics_panel_ctrl.jest.ts new file mode 100644 index 00000000000..f2e5199b57d --- /dev/null +++ b/public/app/features/panel/specs/metrics_panel_ctrl.jest.ts @@ -0,0 +1,65 @@ +jest.mock('app/core/core', () => ({})); + +import { MetricsPanelCtrl } from '../metrics_panel_ctrl'; +import q from 'q'; +import { PanelModel } from 'app/features/dashboard/panel_model'; + +describe('MetricsPanelCtrl', () => { + let ctrl; + + beforeEach(() => { + ctrl = setupController(); + }); + + describe('when getting additional menu items', () => { + let additionalItems; + + describe('and has no datasource set', () => { + beforeEach(() => { + additionalItems = ctrl.getAdditionalMenuItems(); + }); + + it('should not return any items', () => { + expect(additionalItems.length).toBe(0); + }); + }); + + describe('and has datasource set that supports explore', () => { + beforeEach(() => { + ctrl.datasource = { supportsExplore: true }; + additionalItems = ctrl.getAdditionalMenuItems(); + }); + + it('should not return any items', () => { + expect(additionalItems.length).toBe(1); + }); + }); + }); +}); + +function setupController() { + const injectorStub = { + get: type => { + switch (type) { + case '$q': { + return q; + } + default: { + return jest.fn(); + } + } + }, + }; + + const scope = { + panel: { events: [] }, + appEvent: jest.fn(), + onAppEvent: jest.fn(), + $on: jest.fn(), + colors: [], + }; + + MetricsPanelCtrl.prototype.panel = new PanelModel({ type: 'test' }); + + return new MetricsPanelCtrl(scope, injectorStub); +}