@netdata/charts
Version:
Netdata frontend SDK and chart utilities
211 lines • 6.47 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 { 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");
});
});