mirror of https://github.com/grafana/grafana
parent
ff3db60e2e
commit
94b8cbdc6a
@ -0,0 +1,193 @@ |
||||
jest.mock('app/core/store', () => { |
||||
return { |
||||
getBool: jest.fn(), |
||||
}; |
||||
}); |
||||
|
||||
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', () => { |
||||
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 }); |
||||
|
||||
//Mock test function calls
|
||||
var datasourceSrvStub = { |
||||
get: jest.fn(arg => { |
||||
if (arg === 'gfdb') { |
||||
return Promise.resolve({ |
||||
name: 'gfdb', |
||||
meta: { id: 'testdb', info: { version: '1.2.1' }, name: 'TestDB' }, |
||||
}); |
||||
} else if (arg === 'other') { |
||||
return Promise.resolve({ |
||||
name: 'other', |
||||
meta: { id: 'other', info: { version: '1.2.1' }, name: 'OtherDB' }, |
||||
}); |
||||
} else if (arg === '-- Mixed --') { |
||||
return Promise.resolve({ |
||||
name: 'mixed', |
||||
meta: { |
||||
id: 'mixed', |
||||
info: { version: '1.2.1' }, |
||||
name: 'Mixed', |
||||
builtIn: true, |
||||
}, |
||||
}); |
||||
} else if (arg === '-- Grafana --') { |
||||
return Promise.resolve({ |
||||
name: '-- Grafana --', |
||||
meta: { |
||||
id: 'grafana', |
||||
info: { version: '1.2.1' }, |
||||
name: 'grafana', |
||||
builtIn: true, |
||||
}, |
||||
}); |
||||
} |
||||
return 0; |
||||
}), |
||||
}; |
||||
|
||||
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', () => { |
||||
var panel = exported.panels[0]; |
||||
expect(panel.datasource).toBe('${DS_GFDB}'); |
||||
}); |
||||
|
||||
it('should replace datasource in variable query', () => { |
||||
expect(exported.templating.list[0].datasource).toBe('${DS_GFDB}'); |
||||
expect(exported.templating.list[0].options.length).toBe(0); |
||||
expect(exported.templating.list[0].current.value).toBe(undefined); |
||||
expect(exported.templating.list[0].current.text).toBe(undefined); |
||||
}); |
||||
|
||||
it('should replace datasource in annotation query', () => { |
||||
expect(exported.annotations.list[1].datasource).toBe('${DS_GFDB}'); |
||||
}); |
||||
|
||||
it('should add datasource as input', () => { |
||||
expect(exported.__inputs[0].name).toBe('DS_GFDB'); |
||||
expect(exported.__inputs[0].pluginId).toBe('testdb'); |
||||
expect(exported.__inputs[0].type).toBe('datasource'); |
||||
}); |
||||
|
||||
it('should add datasource to required', () => { |
||||
var require = _.find(exported.__requires, { name: 'TestDB' }); |
||||
expect(require.name).toBe('TestDB'); |
||||
expect(require.id).toBe('testdb'); |
||||
expect(require.type).toBe('datasource'); |
||||
expect(require.version).toBe('1.2.1'); |
||||
}); |
||||
|
||||
it('should not add built in datasources to required', () => { |
||||
var require = _.find(exported.__requires, { name: 'Mixed' }); |
||||
expect(require).toBe(undefined); |
||||
}); |
||||
|
||||
it('should add datasources used in mixed mode', () => { |
||||
var require = _.find(exported.__requires, { name: 'OtherDB' }); |
||||
expect(require).not.toBe(undefined); |
||||
}); |
||||
|
||||
it('should add panel to required', () => { |
||||
var require = _.find(exported.__requires, { name: 'Graph' }); |
||||
expect(require.name).toBe('Graph'); |
||||
expect(require.id).toBe('graph'); |
||||
expect(require.version).toBe('1.1.0'); |
||||
}); |
||||
|
||||
it('should add grafana version', () => { |
||||
var require = _.find(exported.__requires, { name: 'Grafana' }); |
||||
expect(require.type).toBe('grafana'); |
||||
expect(require.id).toBe('grafana'); |
||||
expect(require.version).toBe('3.0.2'); |
||||
}); |
||||
|
||||
it('should add constant template variables as inputs', () => { |
||||
var input = _.find(exported.__inputs, { name: 'VAR_PREFIX' }); |
||||
expect(input.type).toBe('constant'); |
||||
expect(input.label).toBe('prefix'); |
||||
expect(input.value).toBe('collectd'); |
||||
}); |
||||
|
||||
it('should templatize constant variables', () => { |
||||
var variable = _.find(exported.templating.list, { name: 'prefix' }); |
||||
expect(variable.query).toBe('${VAR_PREFIX}'); |
||||
expect(variable.current.text).toBe('${VAR_PREFIX}'); |
||||
expect(variable.current.value).toBe('${VAR_PREFIX}'); |
||||
expect(variable.options[0].text).toBe('${VAR_PREFIX}'); |
||||
expect(variable.options[0].value).toBe('${VAR_PREFIX}'); |
||||
}); |
||||
}); |
@ -1,187 +0,0 @@ |
||||
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}'); |
||||
}); |
||||
}); |
Loading…
Reference in new issue