TemplateSrv: Fix interpolating strings with object variables (#28171)

This commit is contained in:
Torkel Ödegaard 2020-10-12 14:22:26 +02:00 committed by GitHub
parent 92c2a6c239
commit 21ed77d7a5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 40 additions and 0 deletions

View File

@ -687,4 +687,35 @@ describe('templateSrv', () => {
expect(target).toBe('2020-07');
});
});
describe('handle objects gracefully', () => {
beforeEach(() => {
initTemplateSrv([{ type: 'query', name: 'test', current: { value: { test: 'A' } } }]);
});
it('should not pass object to custom function', () => {
let passedValue: any = null;
_templateSrv.replace('this.${test}.filters', {}, (value: any) => {
passedValue = value;
});
expect(passedValue).toBe('[object Object]');
});
});
describe('handle objects gracefully and call toString if defined', () => {
beforeEach(() => {
const value = { test: 'A', toString: () => 'hello' };
initTemplateSrv([{ type: 'query', name: 'test', current: { value } }]);
});
it('should not pass object to custom function', () => {
let passedValue: any = null;
_templateSrv.replace('this.${test}.filters', {}, (value: any) => {
passedValue = value;
});
expect(passedValue).toBe('hello');
});
});
});

View File

@ -112,6 +112,15 @@ export class TemplateSrv implements BaseTemplateSrv {
// for some scopedVars there is no variable
variable = variable || {};
if (value === null || value === undefined) {
return '';
}
// if it's an object transform value to string
if (!Array.isArray(value) && typeof value === 'object') {
value = `${value}`;
}
if (typeof format === 'function') {
return format(value, variable, this.formatValue);
}