PromucFlow_constructor/app/client/src/sagas/PasteWidgetUtils/PasteWidgetUtils.test.ts
Ilia d6f249b42d
chore: add blank line eslint rule (#36369)
## Description
Added ESLint rule to force blank lines between statements. 


Fixes #`Issue Number`  
_or_  
Fixes `Issue URL`
> [!WARNING]  
> _If no issue exists, please create an issue first, and check with the
maintainers if the issue is valid._

## Automation

/ok-to-test tags="@tag.All"

### 🔍 Cypress test results
<!-- This is an auto-generated comment: Cypress test results  -->
> [!CAUTION]
> 🔴 🔴 🔴 Some tests have failed.
> Workflow run:
<https://github.com/appsmithorg/appsmith/actions/runs/10924926728>
> Commit: 34f57714a1575ee04e94e03cbcaf95e57a96c86c
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/rundetails-65890b3c81d7400d08fa9ee5?branch=master&workflowId=10924926728&attempt=1&selectiontype=test&testsstatus=failed&specsstatus=fail"
target="_blank">Cypress dashboard</a>.
> Tags: @tag.All
> Spec: 
> The following are new failures, please fix them before merging the PR:
<ol>
> <li>cypress/e2e/Regression/ClientSide/Anvil/AnvilModal_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilButtonWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilCheckboxGroupWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilCurrencyInputWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilIconButtonWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilInlineButtonWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilInputWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilParagraphWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilPhoneInputWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilStatsWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilSwitchGroupWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilSwitchWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilTableWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilToolbarButtonWidgetSnapshot_spec.ts
>
<li>cypress/e2e/Regression/ClientSide/Anvil/Widgets/AnvilZoneSectionWidgetSnapshot_spec.ts</ol>
> <a
href="https://internal.appsmith.com/app/cypress-dashboard/identified-flaky-tests-65890b3c81d7400d08fa9ee3?branch=master"
target="_blank">List of identified flaky tests</a>.
> <hr>Wed, 18 Sep 2024 16:33:36 UTC
<!-- end of auto-generated comment: Cypress test results  -->


## Communication
Should the DevRel and Marketing teams inform users about this change?
- [ ] Yes
- [ ] No

---------

Co-authored-by: Valera Melnikov <valera@appsmith.com>
2024-09-18 19:35:28 +03:00

209 lines
5.8 KiB
TypeScript

import type { FlattenedWidgetProps } from "WidgetProvider/constants";
import { klona } from "klona";
import {
accessNestedObjectValue,
handleJSONFormPropertiesListedInDynamicBindingPath,
handleWidgetDynamicBindingPathList,
handleWidgetDynamicPropertyPathList,
handleWidgetDynamicTriggerPathList,
} 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();
});
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();
});
});
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(
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
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" },
]);
});
});
describe("handleWidgetDynamicTriggerPathList", () => {
const widget = {
dynamicTriggerPathList: [{ key: "onClick" }],
onClick: "{{oldName.val}}",
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} 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);
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}}",
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} 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}}",
// TODO: Fix this the next time the file is edited
// eslint-disable-next-line @typescript-eslint/no-explicit-any
} 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);
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);
handleWidgetDynamicPropertyPathList(widgetNameMap, button);
expect(button.onClick).toEqual("{{oldName.val}}");
});
});