2024-05-09 04:29:12 +00:00
|
|
|
import type { FlattenedWidgetProps } from "WidgetProvider/constants";
|
2024-06-25 06:13:00 +00:00
|
|
|
import { klona } from "klona";
|
2024-05-09 04:29:12 +00:00
|
|
|
import {
|
|
|
|
|
accessNestedObjectValue,
|
|
|
|
|
handleJSONFormPropertiesListedInDynamicBindingPath,
|
2024-06-25 06:13:00 +00:00
|
|
|
handleWidgetDynamicBindingPathList,
|
|
|
|
|
handleWidgetDynamicPropertyPathList,
|
|
|
|
|
handleWidgetDynamicTriggerPathList,
|
2024-05-09 04:29:12 +00:00
|
|
|
} from ".";
|
|
|
|
|
|
|
|
|
|
describe("accessNestedObjectValue", () => {
|
|
|
|
|
it("1. should replace the old value with the new value in a nested object", () => {
|
|
|
|
|
const obj = {
|
|
|
|
|
foo: {
|
|
|
|
|
bar: {
|
|
|
|
|
baz: "oldValue",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const oldValue = "oldValue";
|
|
|
|
|
const newValue = "newValue";
|
|
|
|
|
|
|
|
|
|
accessNestedObjectValue(obj, "foo.bar.baz", oldValue, newValue);
|
|
|
|
|
|
|
|
|
|
expect(obj.foo.bar.baz).toEqual(newValue);
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("2. should not replace the value if it does not match the old value", () => {
|
|
|
|
|
const obj = {
|
|
|
|
|
foo: {
|
|
|
|
|
bar: {
|
|
|
|
|
baz: "value",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const oldValue = "oldValue";
|
|
|
|
|
const newValue = "newValue";
|
|
|
|
|
|
|
|
|
|
accessNestedObjectValue(obj, "foo.bar.baz", oldValue, newValue);
|
|
|
|
|
|
|
|
|
|
expect(obj.foo.bar.baz).toEqual("value");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("3. should return undefined if the path does not exist in the object", () => {
|
|
|
|
|
const obj = {
|
|
|
|
|
foo: {
|
|
|
|
|
bar: {
|
|
|
|
|
baz: "value",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
const oldValue = "oldValue";
|
|
|
|
|
const newValue = "newValue";
|
|
|
|
|
|
|
|
|
|
const result = accessNestedObjectValue(
|
|
|
|
|
obj,
|
|
|
|
|
"foo.bar.qux",
|
|
|
|
|
oldValue,
|
|
|
|
|
newValue,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
expect(result).toBeUndefined();
|
|
|
|
|
});
|
2024-06-28 03:17:45 +00:00
|
|
|
|
|
|
|
|
it("4. should work for null/undefined object", () => {
|
|
|
|
|
const obj = null;
|
|
|
|
|
|
|
|
|
|
const oldValue = "oldValue";
|
|
|
|
|
const newValue = "newValue";
|
|
|
|
|
|
|
|
|
|
const result = accessNestedObjectValue(
|
|
|
|
|
obj,
|
|
|
|
|
"foo.bar.qux",
|
|
|
|
|
oldValue,
|
|
|
|
|
newValue,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
expect(result).toBeUndefined();
|
|
|
|
|
});
|
2024-05-09 04:29:12 +00:00
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe("handleJSONFormPropertiesListedInDynamicBindingPath", () => {
|
|
|
|
|
it("1. should replace the oldName with the newName in the dynamicBindingPathList of the widget", () => {
|
|
|
|
|
const widget = {
|
|
|
|
|
dynamicBindingPathList: [
|
|
|
|
|
{ key: "schema.__rootSchema__.property1" },
|
|
|
|
|
{ key: "defaultValue" },
|
|
|
|
|
{ key: "property3" },
|
|
|
|
|
],
|
|
|
|
|
defaultValue: "{{oldName.val}}",
|
|
|
|
|
schema: {
|
|
|
|
|
__rootSchema__: {
|
|
|
|
|
property1: "{{oldName.test}}",
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
const oldName = "oldName";
|
|
|
|
|
const newName = "newName";
|
|
|
|
|
|
|
|
|
|
handleJSONFormPropertiesListedInDynamicBindingPath(
|
2024-07-31 15:41:28 +00:00
|
|
|
// TODO: Fix this the next time the file is edited
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
2024-05-09 04:29:12 +00:00
|
|
|
widget as any as FlattenedWidgetProps,
|
|
|
|
|
oldName,
|
|
|
|
|
newName,
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
expect(widget.schema.__rootSchema__.property1).toEqual("{{newName.test}}");
|
|
|
|
|
|
|
|
|
|
expect(widget.defaultValue).toEqual("{{newName.val}}");
|
|
|
|
|
|
|
|
|
|
expect(widget.dynamicBindingPathList).toEqual([
|
|
|
|
|
{ key: "schema.__rootSchema__.property1" },
|
|
|
|
|
{ key: "defaultValue" },
|
|
|
|
|
{ key: "property3" },
|
|
|
|
|
]);
|
|
|
|
|
});
|
|
|
|
|
});
|
2024-05-29 04:09:39 +00:00
|
|
|
|
2024-06-25 06:13:00 +00:00
|
|
|
describe("handleWidgetDynamicTriggerPathList", () => {
|
2024-05-29 04:09:39 +00:00
|
|
|
const widget = {
|
|
|
|
|
dynamicTriggerPathList: [{ key: "onClick" }],
|
|
|
|
|
onClick: "{{oldName.val}}",
|
2024-07-31 15:41:28 +00:00
|
|
|
// TODO: Fix this the next time the file is edited
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
2024-05-29 04:09:39 +00:00
|
|
|
} as any as FlattenedWidgetProps;
|
|
|
|
|
it("1. should replace old widget names with new widget names in dynamic trigger paths", () => {
|
|
|
|
|
const widgetNameMap = {
|
|
|
|
|
oldName: "newName",
|
|
|
|
|
};
|
|
|
|
|
const button = klona(widget);
|
2024-06-25 06:13:00 +00:00
|
|
|
handleWidgetDynamicTriggerPathList(widgetNameMap, button);
|
|
|
|
|
expect(button.onClick).toEqual("{{newName.val}}");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("2. should do nothing if the widgetNameMap does not contain names in dynamic trigger paths", () => {
|
|
|
|
|
const widgetNameMap = {
|
|
|
|
|
oldWidget1: "newWidget1",
|
|
|
|
|
};
|
|
|
|
|
const button = klona(widget);
|
|
|
|
|
handleWidgetDynamicTriggerPathList(widgetNameMap, button);
|
|
|
|
|
expect(button.onClick).toEqual("{{oldName.val}}");
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe("handleWidgetDynamicBindingPathList", () => {
|
|
|
|
|
const widget = {
|
|
|
|
|
dynamicBindingPathList: [{ key: "onClick" }],
|
|
|
|
|
onClick: "{{oldName.val}}",
|
2024-07-31 15:41:28 +00:00
|
|
|
// TODO: Fix this the next time the file is edited
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
2024-06-25 06:13:00 +00:00
|
|
|
} as any as FlattenedWidgetProps;
|
|
|
|
|
it("1. should replace old widget names with new widget names in dynamic trigger paths", () => {
|
|
|
|
|
const widgetNameMap = {
|
|
|
|
|
oldName: "newName",
|
|
|
|
|
};
|
|
|
|
|
const button = klona(widget);
|
|
|
|
|
handleWidgetDynamicBindingPathList(widgetNameMap, button);
|
|
|
|
|
expect(button.onClick).toEqual("{{newName.val}}");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("2. should do nothing if the widgetNameMap does not contain names in dynamic trigger paths", () => {
|
|
|
|
|
const widgetNameMap = {
|
|
|
|
|
oldWidget1: "newWidget1",
|
|
|
|
|
};
|
|
|
|
|
const button = klona(widget);
|
|
|
|
|
handleWidgetDynamicBindingPathList(widgetNameMap, button);
|
|
|
|
|
expect(button.onClick).toEqual("{{oldName.val}}");
|
|
|
|
|
});
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
describe("handleWidgetDynamicPropertyPathList", () => {
|
|
|
|
|
const widget = {
|
|
|
|
|
dynamicPropertyPathList: [{ key: "onClick" }],
|
|
|
|
|
onClick: "{{oldName.val}}",
|
2024-07-31 15:41:28 +00:00
|
|
|
// TODO: Fix this the next time the file is edited
|
|
|
|
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
2024-06-25 06:13:00 +00:00
|
|
|
} as any as FlattenedWidgetProps;
|
|
|
|
|
it("1. should replace old widget names with new widget names in dynamic trigger paths", () => {
|
|
|
|
|
const widgetNameMap = {
|
|
|
|
|
oldName: "newName",
|
|
|
|
|
};
|
|
|
|
|
const button = klona(widget);
|
|
|
|
|
handleWidgetDynamicPropertyPathList(widgetNameMap, button);
|
2024-05-29 04:09:39 +00:00
|
|
|
expect(button.onClick).toEqual("{{newName.val}}");
|
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
it("2. should do nothing if the widgetNameMap does not contain names in dynamic trigger paths", () => {
|
|
|
|
|
const widgetNameMap = {
|
|
|
|
|
oldWidget1: "newWidget1",
|
|
|
|
|
};
|
|
|
|
|
const button = klona(widget);
|
2024-06-25 06:13:00 +00:00
|
|
|
handleWidgetDynamicPropertyPathList(widgetNameMap, button);
|
2024-05-29 04:09:39 +00:00
|
|
|
expect(button.onClick).toEqual("{{oldName.val}}");
|
|
|
|
|
});
|
|
|
|
|
});
|