UNPKG

@netdata/charts

Version:

Netdata frontend SDK and chart utilities

247 lines (244 loc) 9.75 kB
"use strict"; var _getConversionUnits = _interopRequireWildcard(require("./getConversionUnits")); var _testUtilities = require("@jest/testUtilities"); function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, "default": e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); } function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } describe("getConversionUnits", function () { var chart; beforeEach(function () { var testChart = (0, _testUtilities.makeTestChart)({ attributes: { units: ["By", "By"], desiredUnits: "auto", unitsConversion: "original", visibleDimensionIds: ["dim1", "dim2"] } }); chart = testChart.chart; }); describe("getConversionAttributes", function () { it("returns conversion attributes for scalable units", function () { var result = (0, _getConversionUnits.getConversionAttributes)(chart, "By", { min: 1000, max: 5000 }); expect(result).toHaveProperty("method"); expect(result).toHaveProperty("divider"); expect(result).toHaveProperty("fractionDigits"); expect(result).toHaveProperty("prefix"); expect(result).toHaveProperty("base"); expect(result).toHaveProperty("unit", "By"); }); it("handles non-scalable units", function () { var result = (0, _getConversionUnits.getConversionAttributes)(chart, "%", { min: 0, max: 100 }); expect(result.method).toBe("original"); expect(result.unit).toBe("%"); expect(result.divider).toBeUndefined(); }); it("uses proper scale for large values", function () { var result = (0, _getConversionUnits.getConversionAttributes)(chart, "By", { min: 0, max: 10000000 }); expect(result.method).toBe("adjust"); expect(result.prefix).toBe("Mi"); expect(_typeof(result.divider)).toBe("function"); }); it("handles zero range", function () { var result = (0, _getConversionUnits.getConversionAttributes)(chart, "By", { min: 100, max: 100 }); expect(result.method).toBe("adjust"); expect(result.prefix).toBe(""); expect(result.base).toBe("B"); expect(result.unit).toBe("By"); }); it("uses print_symbol for base when base_unit is not defined", function () { var result = (0, _getConversionUnits.getConversionAttributes)(chart, "{entropy}", { min: 0, max: 256 }); expect(result.base).toBe("entropy"); }); it("scales the unknown sentinel as a generic item count", function () { chart.updateAttributes({ units: ["unknown"], desiredUnits: ["auto"] }); var unscaled = (0, _getConversionUnits.getConversionAttributes)(chart, "unknown", { min: 0, max: 999 }); var scaled = (0, _getConversionUnits.getConversionAttributes)(chart, "unknown", { min: 0, max: 12000 }); expect(unscaled).toMatchObject({ base: "items", prefix: "" }); expect(scaled).toMatchObject({ base: "items", prefix: "K" }); expect(chart.getConvertedValueWithUnit(95, { unitAttributes: unscaled })).toBe("95"); expect(chart.getConvertedValueWithUnit(12000, { unitAttributes: scaled })).toBe("12 K"); }); it("preserves empty print_symbol for base when base_unit is not defined", function () { var result = (0, _getConversionUnits.getConversionAttributes)(chart, "{state}", { min: 0, max: 1 }); expect(result.base).toBe(""); }); it("handles negative values", function () { var result = (0, _getConversionUnits.getConversionAttributes)(chart, "By", { min: -1000, max: 1000 }); expect(result.method).toBe("adjust"); expect(result.prefix).toBe(""); expect(_typeof(result.divider)).toBe("function"); }); it("respects desired units setting", function () { chart.updateAttribute("desiredUnits", "KiB"); var result = (0, _getConversionUnits.getConversionAttributes)(chart, "By", { min: 0, max: 10000 }); // Should use Ki prefix for binary units expect(result.prefix).toContain("Ki"); }); it("uses a smaller conversable scale before excessive fractional digits", function () { chart.updateAttributes({ units: ["s"], desiredUnits: ["auto"], secondsAsTime: true }); var result = (0, _getConversionUnits.getConversionAttributes)(chart, "s", { min: 0.00512000001, max: 0.00512000009 }); expect(result.method).toBe("s-us"); expect(result.fractionDigits).toBe(5); }); it("converts source hours through duration-aware scales", function () { chart.updateAttributes({ units: ["h"], desiredUnits: ["auto"], secondsAsTime: true }); var result = (0, _getConversionUnits.getConversionAttributes)(chart, "h", { min: 0, max: 26 }); expect(result.method).toBe("h-d:h:mm"); expect(result.base).toBe("d:h:mm"); }); it("allows high precision when no smaller scale is available", function () { chart.updateAttributes({ units: ["{operation}/s"], desiredUnits: ["auto"] }); var result = (0, _getConversionUnits.getConversionAttributes)(chart, "{operation}/s", { min: 5.12000001, max: 5.12000009 }); expect(result.method).toBe("adjust"); expect(result.prefix).toBe(""); expect(result.fractionDigits).toBe(8); }); }); describe("getConversionUnits", function () { it("returns arrays of conversion parameters for dimensions", function () { chart.updateAttribute("visibleDimensionIds", ["dim1", "dim2"]); var result = (0, _getConversionUnits["default"])(chart, "units", { min: 0, max: 2000 }); expect(result).toHaveProperty("method"); expect(result).toHaveProperty("fractionDigits"); expect(result).toHaveProperty("prefix"); expect(result).toHaveProperty("base"); expect(result).toHaveProperty("divider"); // Arrays should have length equal to number of dimensions expect(Array.isArray(result.method)).toBe(true); expect(result.method.length).toBe(2); }); it("handles charts with single dimension", function () { chart.updateAttribute("visibleDimensionIds", ["single"]); chart.updateAttribute("units", ["By"]); var result = (0, _getConversionUnits["default"])(chart, "units", { min: 0, max: 100 }); expect(result.method).toHaveLength(1); expect(result.prefix).toHaveLength(1); }); it("normalizes unitsCurrent source-scaled units when available", function () { chart.updateAttribute("unitsCurrent", ["KiB", "KiB"]); var result = (0, _getConversionUnits["default"])(chart, "unitsCurrent", { min: 0, max: 1000 }); expect(result.base).toEqual(["By", "By"]); expect(result.prefix).toEqual(["Ki", "Ki"]); }); it("falls back to units when unitsCurrent not set", function () { chart.updateAttribute("units", ["%"]); chart.updateAttribute("unitsCurrent", null); chart.updateAttribute("visibleDimensionIds", ["percent"]); var result = (0, _getConversionUnits["default"])(chart, "units", { min: 0, max: 100 }); expect(result.method).toContain("original"); expect(result.base[0]).toBe(""); }); it("handles unitsConversion method override", function () { chart.updateAttribute("unitsConversion", "absolute"); var result = (0, _getConversionUnits["default"])(chart, "units", { min: 0, max: 100 }); expect(result.method.length).toBeGreaterThan(0); expect(result.method[0]).toMatch(/adjust|original|divide/); }); it("processes metric units correctly", function () { chart.updateAttribute("units", ["m"]); chart.updateAttribute("visibleDimensionIds", ["dist"]); var result = (0, _getConversionUnits["default"])(chart, "units", { min: 0, max: 1500 }); expect(result.prefix[0]).toBeTruthy(); }); it("handles empty visible dimensions", function () { chart.updateAttribute("visibleDimensionIds", []); chart.updateAttribute("units", []); var result = (0, _getConversionUnits["default"])(chart, "units", { min: 0, max: 100 }); expect(result.method).toEqual([]); expect(result.prefix).toEqual([]); }); it("processes dbUnits separately", function () { chart.updateAttribute("dbUnits", ["custom", "custom"]); var result = (0, _getConversionUnits["default"])(chart, "dbUnits", { min: 0, max: 100 }); expect(result).toHaveProperty("base"); expect(result.base).toContain("custom"); }); }); });