| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- import { describe, beforeEach, it, sinon, expect } from 'test/lib/common';
- import _ from 'lodash';
- import config from 'app/core/config';
- import { DashboardExporter } from '../export/exporter';
- import { DashboardModel } from '../dashboard_model';
- describe('given dashboard with repeated panels', function() {
- var dash, exported;
- beforeEach(done => {
- dash = {
- templating: { list: [] },
- annotations: { list: [] },
- };
- config.buildInfo = {
- version: '3.0.2',
- };
- dash.templating.list.push({
- name: 'apps',
- type: 'query',
- datasource: 'gfdb',
- current: { value: 'Asd', text: 'Asd' },
- options: [{ value: 'Asd', text: 'Asd' }],
- });
- dash.templating.list.push({
- name: 'prefix',
- type: 'constant',
- current: { value: 'collectd', text: 'collectd' },
- options: [],
- });
- dash.templating.list.push({
- name: 'ds',
- type: 'datasource',
- query: 'testdb',
- current: { value: 'prod', text: 'prod' },
- options: [],
- });
- dash.annotations.list.push({
- name: 'logs',
- datasource: 'gfdb',
- });
- dash.panels = [
- { id: 6, datasource: 'gfdb', type: 'graph' },
- { id: 7 },
- {
- id: 8,
- datasource: '-- Mixed --',
- targets: [{ datasource: 'other' }],
- },
- { id: 9, datasource: '$ds' },
- ];
- dash.panels.push({
- id: 2,
- repeat: 'apps',
- datasource: 'gfdb',
- type: 'graph',
- });
- dash.panels.push({ id: 3, repeat: null, repeatPanelId: 2 });
- var datasourceSrvStub = { get: sinon.stub() };
- datasourceSrvStub.get.withArgs('gfdb').returns(
- Promise.resolve({
- name: 'gfdb',
- meta: { id: 'testdb', info: { version: '1.2.1' }, name: 'TestDB' },
- })
- );
- datasourceSrvStub.get.withArgs('other').returns(
- Promise.resolve({
- name: 'other',
- meta: { id: 'other', info: { version: '1.2.1' }, name: 'OtherDB' },
- })
- );
- datasourceSrvStub.get.withArgs('-- Mixed --').returns(
- Promise.resolve({
- name: 'mixed',
- meta: {
- id: 'mixed',
- info: { version: '1.2.1' },
- name: 'Mixed',
- builtIn: true,
- },
- })
- );
- datasourceSrvStub.get.withArgs('-- Grafana --').returns(
- Promise.resolve({
- name: '-- Grafana --',
- meta: {
- id: 'grafana',
- info: { version: '1.2.1' },
- name: 'grafana',
- builtIn: true,
- },
- })
- );
- config.panels['graph'] = {
- id: 'graph',
- name: 'Graph',
- info: { version: '1.1.0' },
- };
- dash = new DashboardModel(dash, {});
- var exporter = new DashboardExporter(datasourceSrvStub);
- exporter.makeExportable(dash).then(clean => {
- exported = clean;
- done();
- });
- });
- it('should replace datasource refs', function() {
- var panel = exported.panels[0];
- expect(panel.datasource).to.be('${DS_GFDB}');
- });
- it('should replace datasource in variable query', function() {
- expect(exported.templating.list[0].datasource).to.be('${DS_GFDB}');
- expect(exported.templating.list[0].options.length).to.be(0);
- expect(exported.templating.list[0].current.value).to.be(undefined);
- expect(exported.templating.list[0].current.text).to.be(undefined);
- });
- it('should replace datasource in annotation query', function() {
- expect(exported.annotations.list[1].datasource).to.be('${DS_GFDB}');
- });
- it('should add datasource as input', function() {
- expect(exported.__inputs[0].name).to.be('DS_GFDB');
- expect(exported.__inputs[0].pluginId).to.be('testdb');
- expect(exported.__inputs[0].type).to.be('datasource');
- });
- it('should add datasource to required', function() {
- var require = _.find(exported.__requires, { name: 'TestDB' });
- expect(require.name).to.be('TestDB');
- expect(require.id).to.be('testdb');
- expect(require.type).to.be('datasource');
- expect(require.version).to.be('1.2.1');
- });
- it('should not add built in datasources to required', function() {
- var require = _.find(exported.__requires, { name: 'Mixed' });
- expect(require).to.be(undefined);
- });
- it('should add datasources used in mixed mode', function() {
- var require = _.find(exported.__requires, { name: 'OtherDB' });
- expect(require).to.not.be(undefined);
- });
- it('should add panel to required', function() {
- var require = _.find(exported.__requires, { name: 'Graph' });
- expect(require.name).to.be('Graph');
- expect(require.id).to.be('graph');
- expect(require.version).to.be('1.1.0');
- });
- it('should add grafana version', function() {
- var require = _.find(exported.__requires, { name: 'Grafana' });
- expect(require.type).to.be('grafana');
- expect(require.id).to.be('grafana');
- expect(require.version).to.be('3.0.2');
- });
- it('should add constant template variables as inputs', function() {
- var input = _.find(exported.__inputs, { name: 'VAR_PREFIX' });
- expect(input.type).to.be('constant');
- expect(input.label).to.be('prefix');
- expect(input.value).to.be('collectd');
- });
- it('should templatize constant variables', function() {
- var variable = _.find(exported.templating.list, { name: 'prefix' });
- expect(variable.query).to.be('${VAR_PREFIX}');
- expect(variable.current.text).to.be('${VAR_PREFIX}');
- expect(variable.current.value).to.be('${VAR_PREFIX}');
- expect(variable.options[0].text).to.be('${VAR_PREFIX}');
- expect(variable.options[0].value).to.be('${VAR_PREFIX}');
- });
- });
|