@netdata/charts
Version:
Netdata frontend SDK and chart utilities
127 lines (126 loc) • 4.22 kB
JavaScript
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); }
import unitConversion from "./index";
import { makeTestChart } from "@jest/testUtilities";
describe("unitConversion", function () {
var chart;
beforeEach(function () {
var testChart = makeTestChart({
attributes: {
units: ["By"],
unitsCurrent: ["By"],
unitsConversion: "original",
unitsStsByContext: {},
dbUnitsStsByContext: {},
dimensionIds: ["cpu", "memory"],
visibleDimensionIds: ["cpu", "memory"]
}
});
chart = testChart.chart;
});
it("returns a cleanup function", function () {
var cleanup = unitConversion(chart);
expect(_typeof(cleanup)).toBe("function");
expect(function () {
return cleanup();
}).not.toThrow();
});
it("sets up unit conversion attributes", function () {
unitConversion(chart);
expect(chart.getAttribute("unitsConversionMethod")).toBeDefined();
expect(chart.getAttribute("dbUnitsConversionMethod")).toBeDefined();
});
it("handles static value range", function () {
chart.updateAttribute("staticValueRange", [0, 100]);
unitConversion(chart);
chart.trigger("yAxisChange", 50, 150);
expect(chart.getAttribute("min")).toBe(0);
expect(chart.getAttribute("max")).toBe(100);
});
it("updates conversion when visible dimensions change", function () {
var cleanup = unitConversion(chart);
chart.updateAttribute("visibleDimensionIds", ["cpu"]);
chart.trigger("visibleDimensionsChanged");
expect(chart.getAttribute("unitsConversionMethod")).toBeDefined();
cleanup();
});
it("updates conversion on y-axis change", function () {
var cleanup = unitConversion(chart);
chart.trigger("yAxisChange", 10, 90);
expect(chart.getAttribute("min")).toBe(10);
expect(chart.getAttribute("max")).toBe(90);
cleanup();
});
it("handles missing payload data gracefully", function () {
var testChart = makeTestChart({
attributes: {
units: ["By"]
}
});
var cleanup = unitConversion(testChart.chart);
expect(function () {
testChart.chart.trigger("yAxisChange", 0, 100);
}).not.toThrow();
cleanup();
});
it("uses dimension min/max when available", function () {
var mockPayload = {
byDimension: {
cpu: {
min: 20,
max: 80
},
memory: {
min: 10,
max: 90
}
}
};
chart.getPayload = function () {
return mockPayload;
};
var cleanup = unitConversion(chart);
chart.trigger("visibleDimensionsChanged");
// The implementation handles min/max conversion logic
expect(_typeof(chart.getAttribute("min"))).toBe("number");
expect(_typeof(chart.getAttribute("max"))).toBe("number");
cleanup();
});
it("handles context-specific units", function () {
chart.updateAttribute("unitsStsByContext", {
cpu: {
units: ["%"],
min: 0,
max: 100
},
memory: {
units: ["By"],
min: 0,
max: 1024
}
});
unitConversion(chart);
var unitsByContext = chart.getAttribute("unitsByContext");
expect(unitsByContext).toBeDefined();
expect(_typeof(unitsByContext)).toBe("object");
});
it("processes both units and dbUnits", function () {
chart.updateAttribute("dbUnitsStsByContext", {
cpu: {
units: ["ms"]
}
});
unitConversion(chart);
expect(chart.getAttribute("unitsConversionMethod")).toBeDefined();
expect(chart.getAttribute("dbUnitsConversionMethod")).toBeDefined();
expect(chart.getAttribute("dbUnitsByContext")).toBeDefined();
});
it("respects chart state on initialization", function () {
chart.updateAttributes({
units: ["%"],
staticValueRange: [0, 100]
});
unitConversion(chart);
var method = chart.getAttribute("unitsConversionMethod");
expect(method).toBeDefined();
});
});