@netdata/charts
Version:
Netdata frontend SDK and chart utilities
247 lines (244 loc) • 9.75 kB
JavaScript
;
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");
});
});
});