///
import {
describe,
beforeEach,
it,
sinon,
expect
} from "../../../../../test/lib/common";
import $ from "jquery";
import GraphTooltip from "../graph_tooltip";
var scope = {
appEvent: sinon.spy(),
onAppEvent: sinon.spy(),
ctrl: {}
};
var elem = $("
");
var dashboard = {};
function describeSharedTooltip(desc, fn) {
var ctx: any = {};
ctx.ctrl = scope.ctrl;
ctx.ctrl.panel = {
tooltip: {
shared: true
},
legend: {},
stack: false
};
ctx.setup = function(setupFn) {
ctx.setupFn = setupFn;
};
describe(desc, function() {
beforeEach(function() {
ctx.setupFn();
var tooltip = new GraphTooltip(elem, dashboard, scope);
ctx.results = tooltip.getMultiSeriesPlotHoverInfo(ctx.data, ctx.pos);
});
fn(ctx);
});
}
describe("findHoverIndexFromData", function() {
var tooltip = new GraphTooltip(elem, dashboard, scope);
var series = {
data: [
[100, 0],
[101, 0],
[102, 0],
[103, 0],
[104, 0],
[105, 0],
[106, 0],
[107, 0]
]
};
it("should return 0 if posX out of lower bounds", function() {
var posX = 99;
expect(tooltip.findHoverIndexFromData(posX, series)).to.be(0);
});
it("should return n - 1 if posX out of upper bounds", function() {
var posX = 108;
expect(tooltip.findHoverIndexFromData(posX, series)).to.be(
series.data.length - 1
);
});
it("should return i if posX in series", function() {
var posX = 104;
expect(tooltip.findHoverIndexFromData(posX, series)).to.be(4);
});
it("should return i if posX not in series and i + 1 > posX", function() {
var posX = 104.9;
expect(tooltip.findHoverIndexFromData(posX, series)).to.be(4);
});
});
describeSharedTooltip("steppedLine false, stack false", function(ctx) {
ctx.setup(function() {
ctx.data = [
{ data: [[10, 15], [12, 20]], lines: {} },
{ data: [[10, 2], [12, 3]], lines: {} }
];
ctx.pos = { x: 11 };
});
it("should return 2 series", function() {
expect(ctx.results.length).to.be(2);
});
it("should add time to results array", function() {
expect(ctx.results.time).to.be(10);
});
it("should set value and hoverIndex", function() {
expect(ctx.results[0].value).to.be(15);
expect(ctx.results[1].value).to.be(2);
expect(ctx.results[0].hoverIndex).to.be(0);
});
});
describeSharedTooltip("one series is hidden", function(ctx) {
ctx.setup(function() {
ctx.data = [{ data: [[10, 15], [12, 20]] }, { data: [] }];
ctx.pos = { x: 11 };
});
});
describeSharedTooltip(
"steppedLine false, stack true, individual false",
function(ctx) {
ctx.setup(function() {
ctx.data = [
{
data: [[10, 15], [12, 20]],
lines: {},
datapoints: {
pointsize: 2,
points: [[10, 15], [12, 20]]
},
stack: true
},
{
data: [[10, 2], [12, 3]],
lines: {},
datapoints: {
pointsize: 2,
points: [[10, 2], [12, 3]]
},
stack: true
}
];
ctx.ctrl.panel.stack = true;
ctx.pos = { x: 11 };
});
it("should show stacked value", function() {
expect(ctx.results[1].value).to.be(17);
});
}
);
describeSharedTooltip(
"steppedLine false, stack true, individual false, series stack false",
function(ctx) {
ctx.setup(function() {
ctx.data = [
{
data: [[10, 15], [12, 20]],
lines: {},
datapoints: {
pointsize: 2,
points: [[10, 15], [12, 20]]
},
stack: true
},
{
data: [[10, 2], [12, 3]],
lines: {},
datapoints: {
pointsize: 2,
points: [[10, 2], [12, 3]]
},
stack: false
}
];
ctx.ctrl.panel.stack = true;
ctx.pos = { x: 11 };
});
it("should not show stacked value", function() {
expect(ctx.results[1].value).to.be(2);
});
}
);
describeSharedTooltip(
"steppedLine false, stack true, individual true",
function(ctx) {
ctx.setup(function() {
ctx.data = [
{
data: [[10, 15], [12, 20]],
lines: {},
datapoints: {
pointsize: 2,
points: [[10, 15], [12, 20]]
},
stack: true
},
{
data: [[10, 2], [12, 3]],
lines: {},
datapoints: {
pointsize: 2,
points: [[10, 2], [12, 3]]
},
stack: false
}
];
ctx.ctrl.panel.stack = true;
ctx.ctrl.panel.tooltip.value_type = "individual";
ctx.pos = { x: 11 };
});
it("should not show stacked value", function() {
expect(ctx.results[1].value).to.be(2);
});
}
);