@netdata/charts
Version:
Netdata frontend SDK and chart utilities
145 lines (144 loc) • 6.13 kB
JavaScript
"use strict";
var _dataTransformer = require("./dataTransformer");
var mockWeightsResponse = {
result: [{
id: "load1,system.load,9d445810-58a2-4d8c-9749-d80785f49d93",
nm: "load1,system.load,lab-cloud-unpaid",
v: [[0.3837659, 0.3837659, 0.3837659, 0.3837659, 1], [0.05, 0.3837659, 2, 69.0778583, 180, 0]]
}, {
id: "load5,system.load,9d445810-58a2-4d8c-9749-d80785f49d93",
nm: "load5,system.load,lab-cloud-unpaid",
v: [[0.3523553, 0.3523553, 0.3523553, 0.3523553, 1], [0.14, 0.3523553, 0.64, 63.4239464, 180, 0]]
}, {
id: "load1,system.load,b6d0e457-0281-4ef9-8c20-86bcbeffd1a8",
nm: "load1,system.load,nd-child-unpaid04",
v: [[0.3889211, 0.3889211, 0.3889211, 0.3889211, 1], [0.05, 0.3889211, 1.84, 70.0058063, 180, 0]]
}]
};
describe("dataTransformer", function () {
describe("transformWeightsData", function () {
it("returns empty array when no data", function () {
expect((0, _dataTransformer.transformWeightsData)(null, ["dimension"])).toEqual([]);
expect((0, _dataTransformer.transformWeightsData)({
result: []
}, ["dimension"])).toEqual([]);
expect((0, _dataTransformer.transformWeightsData)(mockWeightsResponse, [])).toEqual([]);
});
it("transforms weights response to flat data", function () {
var groupBy = ["dimension", "context", "node"];
var result = (0, _dataTransformer.transformWeightsData)(mockWeightsResponse, groupBy);
expect(result).toHaveLength(3);
var firstItem = result[0];
expect(firstItem.id).toBe("load1,system.load,9d445810-58a2-4d8c-9749-d80785f49d93");
expect(firstItem.nm).toBe("load1,system.load,lab-cloud-unpaid");
expect(firstItem.label).toBe("load1");
expect(firstItem.groupedBy).toEqual({
dimension: "load1",
context: "system.load",
node: "9d445810-58a2-4d8c-9749-d80785f49d93"
});
});
it("maps weight statistics correctly", function () {
var groupBy = ["dimension", "context", "node"];
var result = (0, _dataTransformer.transformWeightsData)(mockWeightsResponse, groupBy);
var firstItem = result[0];
expect(firstItem.weight).toEqual({
min: 0.3837659,
avg: 0.3837659,
max: 0.3837659,
sum: 0.3837659,
count: 1
});
});
it("maps timeframe statistics correctly", function () {
var groupBy = ["dimension", "context", "node"];
var result = (0, _dataTransformer.transformWeightsData)(mockWeightsResponse, groupBy);
var firstItem = result[0];
expect(firstItem.timeframe).toEqual({
min: 0.05,
avg: 0.3837659,
max: 2,
sum: 69.0778583,
count: 180,
anomaly_count: 0
});
});
it("calculates anomaly rate correctly", function () {
var groupBy = ["dimension", "context", "node"];
var result = (0, _dataTransformer.transformWeightsData)(mockWeightsResponse, groupBy);
expect(result[0].anomalyRate).toBe(0);
var mockWithAnomalies = {
result: [{
id: "test,test,test",
nm: "test",
v: [[1, 1, 1, 1, 1], [1, 1, 1, 1, 100, 10]]
}]
};
var resultWithAnomalies = (0, _dataTransformer.transformWeightsData)(mockWithAnomalies, groupBy);
expect(resultWithAnomalies[0].anomalyRate).toBe(10);
});
it("handles different groupBy orders", function () {
var groupBy = ["node", "dimension", "context"];
var result = (0, _dataTransformer.transformWeightsData)(mockWeightsResponse, groupBy);
var firstItem = result[0];
expect(firstItem.label).toBe("load1");
expect(firstItem.groupedBy).toEqual({
node: "load1",
dimension: "system.load",
context: "9d445810-58a2-4d8c-9749-d80785f49d93"
});
});
});
describe("buildHierarchicalTree", function () {
it("returns flat data when no groupBy order", function () {
var flatData = [{
id: "test",
level: 0
}];
expect((0, _dataTransformer.buildHierarchicalTree)(flatData, [])).toEqual(flatData);
});
it("builds hierarchical tree structure", function () {
var groupBy = ["dimension", "context", "node"];
var flatData = (0, _dataTransformer.transformWeightsData)(mockWeightsResponse, groupBy);
var tree = (0, _dataTransformer.buildHierarchicalTree)(flatData, groupBy);
expect(tree).toHaveLength(2);
var load1Group = tree.find(function (item) {
return item.label === "load1";
});
var load5Group = tree.find(function (item) {
return item.label === "load5";
});
expect(load1Group).toBeDefined();
expect(load5Group).toBeDefined();
expect(load1Group.isGroupNode).toBe(true);
expect(load5Group.isGroupNode).toBe(true);
});
it("creates proper parent-child relationships", function () {
var groupBy = ["dimension", "context", "node"];
var flatData = (0, _dataTransformer.transformWeightsData)(mockWeightsResponse, groupBy);
var tree = (0, _dataTransformer.buildHierarchicalTree)(flatData, groupBy);
var load1Group = tree.find(function (item) {
return item.label === "load1";
});
expect(load1Group.children).toHaveLength(1);
var contextGroup = load1Group.children[0];
expect(contextGroup.label).toBe("system.load");
expect(contextGroup.level).toBe(1);
expect(contextGroup.isGroupNode).toBe(true);
expect(contextGroup.children).toHaveLength(2);
var leafNode = contextGroup.children[0];
expect(leafNode.level).toBe(2);
expect(leafNode.isGroupNode).toBe(false);
});
it("handles single level grouping", function () {
var groupBy = ["dimension"];
var flatData = (0, _dataTransformer.transformWeightsData)(mockWeightsResponse, groupBy);
var tree = (0, _dataTransformer.buildHierarchicalTree)(flatData, groupBy);
expect(tree).toHaveLength(2);
expect(tree[0].label).toBe("load1");
expect(tree[1].label).toBe("load5");
expect(tree[0].isGroupNode).toBe(false);
expect(tree[1].isGroupNode).toBe(false);
});
});
});