UNPKG

@netdata/charts

Version:

Netdata frontend SDK and chart utilities

145 lines (144 loc) 6.13 kB
"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); }); }); });