@netdata/charts
Version:
Netdata frontend SDK and chart utilities
197 lines (196 loc) • 6.45 kB
JavaScript
;
var _crud = require("./crud");
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("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((0, _crud.getValue)("simple", "default", testObj)).toBe("value");
});
it("returns nested values", function () {
expect((0, _crud.getValue)("nested.level1.level2", "default", testObj)).toBe("deep value");
expect((0, _crud.getValue)("nested.number", "default", testObj)).toBe(42);
});
it("returns default for non-existent paths", function () {
expect((0, _crud.getValue)("nonexistent", "default", testObj)).toBe("default");
expect((0, _crud.getValue)("nested.nonexistent", "default", testObj)).toBe("default");
expect((0, _crud.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((0, _crud.getValue)("a.b", "default", objWithNulls)).toBe("default");
expect((0, _crud.getValue)("b.c", "default", objWithNulls)).toBe("default");
expect((0, _crud.getValue)("c.d.e", "default", objWithNulls)).toBe("default");
});
it("handles edge cases", function () {
expect((0, _crud.getValue)("", "default", testObj)).toBe("default");
expect((0, _crud.getValue)(null, "default", testObj)).toBe("default");
expect((0, _crud.getValue)(undefined, "default", testObj)).toBe("default");
expect((0, _crud.getValue)("simple", "default", null)).toBe("default");
expect((0, _crud.getValue)("simple", "default", undefined)).toBe("default");
});
it("handles drawer-specific attributes", function () {
expect((0, _crud.getValue)("drawer.action", "default", testObj)).toBe("values");
expect((0, _crud.getValue)("drawer.tab", "default", testObj)).toBe("window");
expect((0, _crud.getValue)("drawer.showAdvancedStats", true, testObj)).toBe(false);
});
it("returns undefined values as default", function () {
var objWithUndefined = {
a: undefined
};
expect((0, _crud.getValue)("a", "default", objWithUndefined)).toBe("default");
});
it("handles arrays as intermediate values", function () {
expect((0, _crud.getValue)("nested.array.0", "default", testObj)).toBe(1);
});
});
describe("setValue", function () {
it("sets simple values", function () {
var obj = {};
(0, _crud.setValue)("simple", "value", obj);
expect(obj.simple).toBe("value");
});
it("sets nested values", function () {
var obj = {};
(0, _crud.setValue)("nested.level1.level2", "deep value", obj);
expect(obj.nested.level1.level2).toBe("deep value");
});
it("creates missing parent objects", function () {
var obj = {};
(0, _crud.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"
};
(0, _crud.setValue)("existing", "new", obj);
expect(obj.existing).toBe("new");
});
it("handles drawer-specific attributes", function () {
var obj = {};
(0, _crud.setValue)("drawer.action", "values", obj);
(0, _crud.setValue)("drawer.tab", "window", obj);
(0, _crud.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"
}
};
(0, _crud.setValue)("drawer.action", "new", obj);
expect(obj.drawer.action).toBe("new");
});
it("handles edge cases", function () {
var obj = {};
(0, _crud.setValue)("", "value", obj);
(0, _crud.setValue)(null, "value", obj);
(0, _crud.setValue)(undefined, "value", obj);
expect(Object.keys(obj)).toHaveLength(0);
});
});
describe("deleteKey", function () {
it("deletes simple properties", function () {
var obj = {
simple: "value",
keep: "me"
};
(0, _crud.deleteKey)("simple", obj);
expect(obj).toEqual({
keep: "me"
});
});
it("deletes nested properties", function () {
var obj = {
drawer: {
action: "values",
tab: "window",
showAdvancedStats: true
}
};
(0, _crud.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"
}
}
};
(0, _crud.deleteKey)("a.b.c", obj);
expect(obj.a.b).toEqual({
d: "keep me"
});
});
it("handles non-existent paths gracefully", function () {
var obj = {
existing: "value"
};
(0, _crud.deleteKey)("nonexistent", obj);
(0, _crud.deleteKey)("existing.nonexistent", obj);
expect(obj).toEqual({
existing: "value"
});
});
it("handles edge cases", function () {
var obj = {
test: "value"
};
(0, _crud.deleteKey)("", obj);
(0, _crud.deleteKey)(null, obj);
(0, _crud.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"
}
}
};
(0, _crud.deleteKey)("drawer.nested.deep", obj);
expect(obj.drawer.nested).toEqual({
another: "prop"
});
expect(obj.drawer.action).toBe("values");
expect(obj.drawer.tab).toBe("window");
});
});