UNPKG

@netdata/charts

Version:

Netdata frontend SDK and chart utilities

211 lines 6.47 kB
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 { getValue, setValue, deleteKey } from "./crud"; describe("getValue", function () { var testObj = { simple: "value", nested: { level1: { level2: "deep value" }, array: [1, 2, 3], number: 42 }, drawer: { action: "values", tab: "window", showAdvancedStats: false } }; it("returns simple values", function () { expect(getValue("simple", "default", testObj)).toBe("value"); }); it("returns nested values", function () { expect(getValue("nested.level1.level2", "default", testObj)).toBe("deep value"); expect(getValue("nested.number", "default", testObj)).toBe(42); }); it("returns default for non-existent paths", function () { expect(getValue("nonexistent", "default", testObj)).toBe("default"); expect(getValue("nested.nonexistent", "default", testObj)).toBe("default"); expect(getValue("nested.level1.nonexistent", "default", testObj)).toBe("default"); }); it("returns default for null/undefined intermediate values", function () { var objWithNulls = { a: null, b: undefined, c: { d: null } }; expect(getValue("a.b", "default", objWithNulls)).toBe("default"); expect(getValue("b.c", "default", objWithNulls)).toBe("default"); expect(getValue("c.d.e", "default", objWithNulls)).toBe("default"); }); it("handles edge cases", function () { expect(getValue("", "default", testObj)).toBe("default"); expect(getValue(null, "default", testObj)).toBe("default"); expect(getValue(undefined, "default", testObj)).toBe("default"); expect(getValue("simple", "default", null)).toBe("default"); expect(getValue("simple", "default", undefined)).toBe("default"); }); it("handles drawer-specific attributes", function () { expect(getValue("drawer.action", "default", testObj)).toBe("values"); expect(getValue("drawer.tab", "default", testObj)).toBe("window"); expect(getValue("drawer.showAdvancedStats", true, testObj)).toBe(false); }); it("returns undefined values as default", function () { var objWithUndefined = { a: undefined }; expect(getValue("a", "default", objWithUndefined)).toBe("default"); }); it("handles arrays as intermediate values", function () { expect(getValue("nested.array.0", "default", testObj)).toBe(1); }); }); describe("setValue", function () { it("sets simple values", function () { var obj = {}; setValue("simple", "value", obj); expect(obj.simple).toBe("value"); }); it("sets nested values", function () { var obj = {}; setValue("nested.level1.level2", "deep value", obj); expect(obj.nested.level1.level2).toBe("deep value"); }); it("creates missing parent objects", function () { var obj = {}; setValue("a.b.c.d", "value", obj); expect(obj.a.b.c.d).toBe("value"); expect(_typeof(obj.a)).toBe("object"); expect(_typeof(obj.a.b)).toBe("object"); expect(_typeof(obj.a.b.c)).toBe("object"); }); it("overwrites existing values", function () { var obj = { existing: "old" }; setValue("existing", "new", obj); expect(obj.existing).toBe("new"); }); it("handles drawer-specific attributes", function () { var obj = {}; setValue("drawer.action", "values", obj); setValue("drawer.tab", "window", obj); setValue("drawer.showAdvancedStats", true, obj); expect(obj.drawer.action).toBe("values"); expect(obj.drawer.tab).toBe("window"); expect(obj.drawer.showAdvancedStats).toBe(true); }); it("overwrites existing nested objects", function () { var obj = { drawer: { action: "old" } }; setValue("drawer.action", "new", obj); expect(obj.drawer.action).toBe("new"); }); it("handles edge cases", function () { var obj = {}; setValue("", "value", obj); setValue(null, "value", obj); setValue(undefined, "value", obj); expect(Object.keys(obj)).toHaveLength(0); }); it("does not mutate shared object references", function () { var sharedDrawer = { action: "values", tab: "window" }; var obj1 = { drawer: sharedDrawer }; var obj2 = { drawer: sharedDrawer }; setValue("drawer.action", "compare", obj1); expect(obj1.drawer.action).toBe("compare"); expect(obj2.drawer.action).toBe("values"); expect(obj1.drawer).not.toBe(obj2.drawer); }); }); describe("deleteKey", function () { it("deletes simple properties", function () { var obj = { simple: "value", keep: "me" }; deleteKey("simple", obj); expect(obj).toEqual({ keep: "me" }); }); it("deletes nested properties", function () { var obj = { drawer: { action: "values", tab: "window", showAdvancedStats: true } }; deleteKey("drawer.showAdvancedStats", obj); expect(obj.drawer).toEqual({ action: "values", tab: "window" }); }); it("deletes deeply nested properties", function () { var obj = { a: { b: { c: "delete me", d: "keep me" } } }; deleteKey("a.b.c", obj); expect(obj.a.b).toEqual({ d: "keep me" }); }); it("handles non-existent paths gracefully", function () { var obj = { existing: "value" }; deleteKey("nonexistent", obj); deleteKey("existing.nonexistent", obj); expect(obj).toEqual({ existing: "value" }); }); it("handles edge cases", function () { var obj = { test: "value" }; deleteKey("", obj); deleteKey(null, obj); deleteKey(undefined, obj); expect(obj).toEqual({ test: "value" }); }); it("preserves other nested properties", function () { var obj = { drawer: { action: "values", tab: "window", nested: { deep: "value", another: "prop" } } }; deleteKey("drawer.nested.deep", obj); expect(obj.drawer.nested).toEqual({ another: "prop" }); expect(obj.drawer.action).toBe("values"); expect(obj.drawer.tab).toBe("window"); }); });