mirror of https://github.com/grafana/grafana.git
variables: fix when datasource returns error
This commit is contained in:
parent
eb2d4b20bc
commit
8aa55ee352
|
|
@ -1,6 +1,7 @@
|
|||
import _ from 'lodash';
|
||||
import coreModule from 'app/core/core_module';
|
||||
import { variableTypes } from './variable';
|
||||
import appEvents from 'app/core/app_events';
|
||||
|
||||
export class VariableEditorCtrl {
|
||||
/** @ngInject **/
|
||||
|
|
@ -56,16 +57,13 @@ export class VariableEditorCtrl {
|
|||
}
|
||||
|
||||
if (!$scope.current.name.match(/^\w+$/)) {
|
||||
$scope.appEvent('alert-warning', [
|
||||
'Validation',
|
||||
'Only word and digit characters are allowed in variable names',
|
||||
]);
|
||||
appEvents.emit('alert-warning', ['Validation', 'Only word and digit characters are allowed in variable names']);
|
||||
return false;
|
||||
}
|
||||
|
||||
var sameName = _.find($scope.variables, { name: $scope.current.name });
|
||||
if (sameName && sameName !== $scope.current) {
|
||||
$scope.appEvent('alert-warning', ['Validation', 'Variable with the same name already exists']);
|
||||
appEvents.emit('alert-warning', ['Validation', 'Variable with the same name already exists']);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
|
@ -73,7 +71,7 @@ export class VariableEditorCtrl {
|
|||
$scope.current.type === 'query' &&
|
||||
$scope.current.query.match(new RegExp('\\$' + $scope.current.name + '(/| |$)'))
|
||||
) {
|
||||
$scope.appEvent('alert-warning', [
|
||||
appEvents.emit('alert-warning', [
|
||||
'Validation',
|
||||
'Query cannot contain a reference to itself. Variable: $' + $scope.current.name,
|
||||
]);
|
||||
|
|
@ -96,11 +94,11 @@ export class VariableEditorCtrl {
|
|||
};
|
||||
|
||||
$scope.runQuery = function() {
|
||||
return variableSrv.updateOptions($scope.current).then(null, function(err) {
|
||||
return variableSrv.updateOptions($scope.current).catch(err => {
|
||||
if (err.data && err.data.message) {
|
||||
err.message = err.data.message;
|
||||
}
|
||||
$scope.appEvent('alert-error', ['Templating', 'Template variables could not be initialized: ' + err.message]);
|
||||
appEvents.emit('alert-error', ['Templating', 'Template variables could not be initialized: ' + err.message]);
|
||||
});
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,40 @@
|
|||
import { VariableEditorCtrl } from '../editor_ctrl';
|
||||
|
||||
let mockEmit;
|
||||
jest.mock('app/core/app_events', () => {
|
||||
mockEmit = jest.fn();
|
||||
return {
|
||||
emit: mockEmit,
|
||||
};
|
||||
});
|
||||
|
||||
describe('VariableEditorCtrl', () => {
|
||||
let scope = {
|
||||
runQuery: () => {
|
||||
return Promise.resolve({});
|
||||
},
|
||||
};
|
||||
|
||||
describe('When running a variable query and the data source returns an error', () => {
|
||||
beforeEach(() => {
|
||||
const variableSrv = {
|
||||
updateOptions: () => {
|
||||
return Promise.reject({
|
||||
data: { message: 'error' },
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
const ctrl = new VariableEditorCtrl(scope, {}, variableSrv, {});
|
||||
});
|
||||
|
||||
it('should emit an error', () => {
|
||||
return scope.runQuery().then(res => {
|
||||
expect(mockEmit).toBeCalled();
|
||||
expect(mockEmit.mock.calls[0][0]).toBe('alert-error');
|
||||
expect(mockEmit.mock.calls[0][1][0]).toBe('Templating');
|
||||
expect(mockEmit.mock.calls[0][1][1]).toBe('Template variables could not be initialized: error');
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Reference in New Issue