Skip to content
This repository was archived by the owner on Oct 7, 2024. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion dist/datasource.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

199 changes: 199 additions & 0 deletions spec/datasource_spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,203 @@ describe('GenericDatasource', function() {
done();
});
});

it ('should return the metric results when a target is null', function(done) {
ctx.backendSrv.datasourceRequest = function(request) {
return ctx.$q.when({
_request: request,
data: [
"metric_0",
"metric_1",
"metric_2",
]
});
};

ctx.templateSrv.replace = function(data) {
return data;
}

ctx.ds.metricFindQuery({target: null}).then(function(result) {
expect(result).to.have.length(3);
expect(result[0].text).to.equal('metric_0');
expect(result[0].value).to.equal(0);
expect(result[1].text).to.equal('metric_1');
expect(result[1].value).to.equal(1);
expect(result[2].text).to.equal('metric_2');
expect(result[2].value).to.equal(2);
done();
});
});

it ('should return the metric target results when a target is set', function(done) {
ctx.backendSrv.datasourceRequest = function(request) {
var target = request.data.target;
var result = [target + "_0", target + "_1", target + "_2"];

return ctx.$q.when({
_request: request,
data: result
});
};

ctx.templateSrv.replace = function(data) {
return data;
}

ctx.ds.metricFindQuery({target: 'search'}).then(function(result) {
expect(result).to.have.length(3);
expect(result[0].text).to.equal('search_0');
expect(result[0].value).to.equal(0);
expect(result[1].text).to.equal('search_1');
expect(result[1].value).to.equal(1);
expect(result[2].text).to.equal('search_2');
expect(result[2].value).to.equal(2);
done();
});
});

it ('should return the metric results when the target is an empty string', function(done) {
ctx.backendSrv.datasourceRequest = function(request) {
return ctx.$q.when({
_request: request,
data: [
"metric_0",
"metric_1",
"metric_2",
]
});
};

ctx.templateSrv.replace = function(data) {
return data;
}

ctx.ds.metricFindQuery({target: ''}).then(function(result) {
expect(result).to.have.length(3);
expect(result[0].text).to.equal('metric_0');
expect(result[0].value).to.equal(0);
expect(result[1].text).to.equal('metric_1');
expect(result[1].value).to.equal(1);
expect(result[2].text).to.equal('metric_2');
expect(result[2].value).to.equal(2);
done();
});
});

it ('should return the metric results when the args are an empty object', function(done) {
ctx.backendSrv.datasourceRequest = function(request) {
return ctx.$q.when({
_request: request,
data: [
"metric_0",
"metric_1",
"metric_2",
]
});
};

ctx.templateSrv.replace = function(data) {
return data;
}

ctx.ds.metricFindQuery({}).then(function(result) {
expect(result).to.have.length(3);
expect(result[0].text).to.equal('metric_0');
expect(result[0].value).to.equal(0);
expect(result[1].text).to.equal('metric_1');
expect(result[1].value).to.equal(1);
expect(result[2].text).to.equal('metric_2');
expect(result[2].value).to.equal(2);
done();
});
});

it ('should throw error when args are undefined', function(done) {
global.assert.throw(ctx.ds.metricFindQuery, Error, "Cannot read property 'target' of undefined");
done();
});

it ('should throw error when args are null', function(done) {
global.assert.throw(function() { ctx.ds.metricFindQuery(null); }, Error, "Cannot read property 'target' of null");
done();
});

it ('should return the metric target results when the args are a string', function(done) {
ctx.backendSrv.datasourceRequest = function(request) {
var target = request.data.target;
var result = [target + "_0", target + "_1", target + "_2"];

return ctx.$q.when({
_request: request,
data: result
});
};

ctx.templateSrv.replace = function(data) {
return data;
}

ctx.ds.metricFindQuery('search').then(function(result) {
expect(result).to.have.length(3);
expect(result[0].text).to.equal('search_0');
expect(result[0].value).to.equal(0);
expect(result[1].text).to.equal('search_1');
expect(result[1].value).to.equal(1);
expect(result[2].text).to.equal('search_2');
expect(result[2].value).to.equal(2);
done();
});
});

it ('should return data as text and index as value', function(done) {
var result = ctx.ds.mapToTextValue({data: ["zero", "one", "two"]});

expect(result).to.have.length(3);
expect(result[0].text).to.equal('zero');
expect(result[0].value).to.equal(0);
expect(result[1].text).to.equal('one');
expect(result[1].value).to.equal(1);
expect(result[2].text).to.equal('two');
expect(result[2].value).to.equal(2);
done();
});

it ('should return text as text and value as value', function(done) {
var data = [
{text: "zero", value: "value_0"},
{text: "one", value: "value_1"},
{text: "two", value: "value_2"},
];

var result = ctx.ds.mapToTextValue({data: data});

expect(result).to.have.length(3);
expect(result[0].text).to.equal('zero');
expect(result[0].value).to.equal('value_0');
expect(result[1].text).to.equal('one');
expect(result[1].value).to.equal('value_1');
expect(result[2].text).to.equal('two');
expect(result[2].value).to.equal('value_2');
done();
});

it ('should return data as text and index as value', function(done) {
var data = [
{a: "zero", b: "value_0"},
{a: "one", b: "value_1"},
{a: "two", b: "value_2"},
];

var result = ctx.ds.mapToTextValue({data: data});

expect(result).to.have.length(3);
expect(result[0].text).to.equal(data[0]);
expect(result[0].value).to.equal(0);
expect(result[1].text).to.equal(data[1]);
expect(result[1].value).to.equal(1);
expect(result[2].text).to.equal(data[2]);
expect(result[2].value).to.equal(2);
done();
});
});
6 changes: 4 additions & 2 deletions src/datasource.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,9 @@ export class GenericDatasource {
}

metricFindQuery(options) {
var target = typeof (options) == "string" ? options : options.target;
var interpolated = {
target: this.templateSrv.replace(options.target, null, 'regex')
target: this.templateSrv.replace(target, null, 'regex')
};

return this.backendSrv.datasourceRequest({
Expand All @@ -76,7 +77,8 @@ export class GenericDatasource {

mapToTextValue(result) {
return _.map(result.data, (d, i) => {
return { text: d, value: i};
if (d && d.text && d.value) return { text: d.text, value: d.value }
return { text: d, value: i };
});
}

Expand Down