PromucFlow_constructor/app/client/src/components/formControls/utils.test.ts
Nidhi 906a7298dc
feat: Simplified Google Sheets queries (#14869)
* Client changes 1

* add DSL functionality

* Temp commit for refactoring changes

* Do I even know what I'm doing here?

* chore: Second GS layout

* Update: Visibility conditional outputs for schemas

- Added the output from conditional outputs for schema children too

* Update: Entity selector visibility control

- Added logic for controlling visibility of sub components via the JS expressions system

* Update: Passing disabled prop to toggle button

* Update: Passing disabled prop to toggle btn

* Update: Styled component for toggle button

- Added disabled styles based on the disabled prop sent to the toggle form view JSON button

* Update: configProperty role in Entity Selector

- Removed dependance of the configProperty of the entity selector children to it's parent component

* Update: type of placeholder key

- Made placeholder key from form config JSON to accept either string or an object
- Earlier only string was accepted
- This is for pagination component

* Update: Added placeholder control for pagination

* Client changes 1

* add DSL functionality

* Do I even know what I'm doing here?

* fix: updated uqi forms ui, clubbed JS switch button to ads, updated tooltip design

* fix: updated tooltip component for wrong ui on entity explore

* temp triggers

* fix: updated uqi forms ui, clubbed JS switch button to ads, updated tooltip design (#12395)

* fix: updated uqi forms ui, clubbed JS switch button to ads, updated tooltip design

* fix: updated tooltip component for wrong ui on entity explore

* fix: updated tooltip ui, where condition placement, sort by ui

* temp form data access logic

* fix: updated sorting type width ui

* fix: updated ui for spacing, width and text issues

* Update: Type for tooltip of UQI forms

- Added option to send an object to the tooltipText object.
- This allows for composite components like pagination to have tooltips for each sub component

* Update: tooltip for pagination component

- Added handling to parse the tooltip for multiple components.
- This allows for composite components like pagination to have tooltips for each sub component

* Update: Type cast for tooltip component

- Made the content passed to tooltip component as a string only

* Update: Fixed tooltip component CSS

* Update: Dropdown option component

- Added a tooltip wrapper to each option
- This is to show on hover text like disabled state

* fix: updated ẇhere clause broken ui for condition

* Add: functions to check and extract expressions

- Loop through the formConfig and find any keys that have a value that is bindable
- Used pre defined regex to check if value is a moustache binding

* Add: Types for evaluated form configs

- Added types for the form configs to be evaluated and their output post eval

* Add: Flow to run the form config

- Run the form config and update the result to the redux state

* Update: Name of the type for formconfigs

- Updated since it was clashing with a component of the same name

* Add: Function to enforce config type checks

- This is done so that the improper configs can be weeded out and the rest of the form can be shown

* Add: Function to update evaluated config

- Added option to update the config if it's values needed evaluation

* Add: Type check for schema sections

* Update: Error handling for invalid control type

- We were throwing an exception till now, changed it to a warning text

* Add: Exposed tooltip for dropdown option disabled state

* Update: switch to json mode functionality

- Added logic to convert data to a string rather than an object when the first switch to JSON mode happens

* Update: Added key to tooltip for dropdown options

* Trigger API modification

* Add: function to fetch default trigger URL

* Update: Made URL optional in dynamic trigger config

* Update: Dynamic trigger API call

- Made the API call for dynamic triggers have URL as optional field
- Added type check to the response of the API call

* Update: resp type for trigger APIs

* Update: Moved code to utils folder

- Moved functions for UQI form eval processing to utils file

* Update: passing original controltype to JS switch

* Update: config for JSON editor mode

- Updated the config to have different options for JSON mode depending on the original control type

* Update: Connected line numbers flag to config

* Revert: CSS changes for tooltip

* Refactor: Removed consle

* Add: type for the config of dynamic values

* Add: Feature to evaluate config for triggers

* Refactor: fix type check errors

* fix: dropdown ui width with text alignment

* Update: fixed selector for dynamic values

* Update: selector call for fetchDynamicValues

* Add table header index prop for columns selector

* migration partial commit

* migration partial commit

* Refactor: removed unused import

* Update: reused function for checking dynamic value

* Update: removed unused import

* Fix format JSON issues

* Retrieve binding paths from entity selector components

* Fixes 6 remaining issues with UQI implementation

* Fix dropdown issues

* Fix dropdown height issues and fixes triggering of APIs when option is deselected

* Migration changes

* Fix QA generated UQI issues

* Fix projection component height and route change logic

* Fix multi select dropdown placeholder text issue and json stringify issue with switching view types

* Reset entity type value when command value changes

* Test changes

* Review comments

* Moved migrations around

* Corrected import statement

* Added JSON schema migration

* Updated schema version

* perf improvements and filter dropdown options feature

* Fix Code mirror component config for toggleComponentToJson input fields.

* Fix prettier issues

* fix prettier issues

* Fix style issues as a result of the merged conflicts

* Fix failing test case

* Fixed a few other flows (#14225)

* Fixed a few other flows

* Review comments

* Fix generate CRUD, fix evaluation of dynamic bindings and fix various styling issues.

* More fixes (#14367)

* Factor in the root formconfig parent key.

* Fix flickering issues, and evaluatedFormConfig issues

* fix: Teeny bugs (#14455)

* Teeny bugs

* Added previous functionality as is

* Improvements in the way we fetch dynamic values

* Fix stringiification issue and cyclic dependency issues

* Resolve projection component values deletion

* Resolve merge conflicts and fix prettier issues

* fix: Tsc issues

* Fix property pane connection navigation

* updating ee locator

* updating inputfield locator

* dropdown locator update

* Merge conflict not properly resolved.

* Fix s3 spec

* Fix Mongo Spec

* Fix some more tests

* fix: prevent cyclic dependency when switching to js mode (#14668)

* add delete events for change from array to string in diff

* add test to assert absence of cyclic dependency error when switching to js in switchgroup widget

* Assert that evaluation is not disabled when no cyclic dependency happens

* Cypress test preparations for google sheets and form controls

* Fixed a few test errors (#14874)

* Add: unit tests for uqi UI updates

- view type tests
- conditional output extraction
- processing conditional output to handle view/enabled state of the component

* Add: completed isValidFormConfig test

* Update: improved tests for update config

- These tests cover the functionality to update a section config after it's components are done evaluating

* Fix failing cypress tests and cyclic dependency issue

* Fixes some more tests

* Fixed migration of row objects (#14896)

* Bumped the version of design system package

* Update: reverted change to EE selector

* Fix deletion pointer

* Update: selector for js on load spec

- Synced with changes related to ADS dropdown

* Fix mongoDBShoppingCart spec

* Remove comments

* Fix: mongo shopping cart test failures

* fix: mongo shopping cart spec

* Dummy push to retrigger vercel

* fix: mongo shopping cart spec

* Update MongoDBShoppingCart_spec.js

* fix: removed unused click away

* dummy commit

* Update: moved helper functions to separate file

* Add: added tests for saga functions

- Worked on testing for
   - extractFetchDynamicValueFormConfigs
   - extractQueueOfValuesToBeFetched

* Add if check for queueOfValuesToBeFetched

* Resolve review comments

* Empty-Commit

Co-authored-by: Irongade <adeoluayangade@yahoo.com>
Co-authored-by: Ayush Pahwa <ayush@appsmith.com>
Co-authored-by: Aman Agarwal <aman@appsmith.com>
Co-authored-by: Ayangade Adeoluwa <37867493+Irongade@users.noreply.github.com>
Co-authored-by: Aishwarya UR <aishwarya@appsmith.com>
Co-authored-by: Favour Ohanekwu <fohanekwu@gmail.com>
Co-authored-by: Albin <albin@appsmith.com>
2022-07-04 11:13:27 +05:30

906 lines
23 KiB
TypeScript

import {
isHidden,
getConfigInitialValues,
caculateIsHidden,
evaluateCondtionWithType,
actionPathFromName,
getViewType,
ViewTypes,
switchViewType,
extractConditionalOutput,
checkIfSectionCanRender,
checkIfSectionIsEnabled,
updateEvaluatedSectionConfig,
} from "./utils";
import { HiddenType } from "./BaseControl";
import { set } from "lodash";
import { isValidFormConfig } from "reducers/evaluationReducers/formEvaluationReducer";
describe("isHidden test", () => {
it("Test for isHidden true", () => {
const hiddenTrueInputs: any = [
{ values: { name: "Name" }, hidden: true },
{
values: { name: "Name", number: 2, email: "temp@temp.com" },
hidden: {
conditionType: "AND",
conditions: [
{
path: "name",
value: "Name",
comparison: "EQUALS",
},
{
conditionType: "AND",
conditions: [
{
path: "number",
value: 2,
comparison: "EQUALS",
},
{
path: "email",
value: "temp@temp.com",
comparison: "EQUALS",
},
],
},
],
},
},
{
values: { name: "Name" },
hidden: {
path: "name",
value: "Name",
comparison: "EQUALS",
},
},
{
values: { name: "Name", config: { type: "EMAIL" } },
hidden: {
path: "name.config.type",
value: "USER_ID",
comparison: "NOT_EQUALS",
},
},
{
values: undefined,
hidden: true,
},
{
values: null,
hidden: true,
},
];
hiddenTrueInputs.forEach((input: any) => {
expect(isHidden(input.values, input.hidden)).toBeTruthy();
});
});
it("Test for isHidden false", () => {
const hiddenFalseInputs: any = [
{ values: { name: "Name" }, hidden: false },
{
values: { name: "Name" },
hidden: {
path: "name",
value: "Different Name",
comparison: "EQUALS",
},
},
{
values: { name: "Name", config: { type: "EMAIL" } },
hidden: {
path: "config.type",
value: "EMAIL",
comparison: "NOT_EQUALS",
},
},
{
values: { name: "Name", config: { type: "Different BODY" } },
hidden: {
path: "config.type",
value: ["EMAIL", "BODY"],
comparison: "IN",
},
},
{
values: { name: "Name", config: { type: "BODY" } },
hidden: {
path: "config.type",
value: ["EMAIL", "BODY"],
comparison: "NOT_IN",
},
},
{
values: undefined,
hidden: false,
},
{
values: null,
hidden: false,
},
{
values: undefined,
},
{
values: { name: "Name" },
},
{
values: {
name: "Name",
config: { type: "EMAIL", name: "TEMP" },
contact: { number: 1234, address: "abcd" },
},
hidden: {
conditionType: "AND",
conditions: [
{
path: "contact.number",
value: 1234,
comparison: "NOT_EQUALS",
},
{
conditionType: "OR",
conditions: [
{
conditionType: "AND",
conditions: [
{
path: "config.name",
value: "TEMP",
comparison: "EQUALS",
},
{
path: "config.name",
value: "HELLO",
comparison: "EQUALS",
},
],
},
{
path: "config.type",
value: "EMAIL",
comparison: "NOT_EQUALS",
},
],
},
],
},
},
];
hiddenFalseInputs.forEach((input: any) => {
expect(isHidden(input.values, input.hidden)).toBeFalsy();
});
});
});
describe("getConfigInitialValues test", () => {
it("getConfigInitialValues test", () => {
const testCases = [
{
input: [
{
sectionName: "Connection",
children: [
{
label: "Region",
configProperty:
"datasourceConfiguration.authentication.databaseName",
controlType: "DROP_DOWN",
initialValue: "ap-south-1",
options: [
{
label: "ap-south-1",
value: "ap-south-1",
},
{
label: "eu-south-1",
value: "eu-south-1",
},
],
},
],
},
],
output: {
datasourceConfiguration: {
authentication: { databaseName: "ap-south-1" },
},
},
},
{
input: [
{
sectionName: "Connection",
children: [
{
label: "Region",
configProperty:
"datasourceConfiguration.authentication.databaseName",
controlType: "INPUT_TEXT",
},
],
},
],
output: {},
},
{
input: [
{
sectionName: "Connection",
children: [
{
label: "Host Address (for overriding endpoint only)",
configProperty: "datasourceConfiguration.endpoints[*].host",
controlType: "KEYVALUE_ARRAY",
initialValue: ["jsonplaceholder.typicode.com"],
},
{
label: "Port",
configProperty: "datasourceConfiguration.endpoints[*].port",
dataType: "NUMBER",
controlType: "KEYVALUE_ARRAY",
},
],
},
],
output: {
datasourceConfiguration: {
endpoints: [{ host: "jsonplaceholder.typicode.com" }],
},
},
},
{
input: [
{
sectionName: "Settings",
children: [
{
label: "Smart substitution",
configProperty: "datasourceConfiguration.isSmart",
controlType: "SWITCH",
initialValue: false,
},
],
},
],
output: {
datasourceConfiguration: {
isSmart: false,
},
},
},
];
testCases.forEach((testCase) => {
expect(getConfigInitialValues(testCase.input)).toEqual(testCase.output);
});
});
});
describe("caculateIsHidden test", () => {
it("calcualte hidden field value", () => {
const values = { name: "Name" };
const hiddenTruthy: HiddenType = {
path: "name",
comparison: "EQUALS",
value: "Name",
};
const hiddenFalsy: HiddenType = {
path: "name",
comparison: "EQUALS",
value: "Different Name",
};
expect(caculateIsHidden(values, hiddenTruthy)).toBeTruthy();
expect(caculateIsHidden(values, hiddenFalsy)).toBeFalsy();
});
});
describe("evaluateCondtionWithType test", () => {
it("accumulate boolean of array into one based on conditionType", () => {
const andConditionType = "AND";
const orConditionType = "OR";
const booleanArray = [true, false, true];
expect(
evaluateCondtionWithType(booleanArray, andConditionType),
).toBeFalsy();
expect(
evaluateCondtionWithType(booleanArray, orConditionType),
).toBeTruthy();
});
});
describe("actionPathFromName test", () => {
it("creates path from name", () => {
const actionName = "Api5";
const name = "actionConfiguration.pluginSpecifiedTemplates[7].value";
const pathName = "Api5.config.pluginSpecifiedTemplates[7].value";
expect(actionPathFromName(actionName, name)).toEqual(pathName);
});
});
describe("json/form viewTypes test", () => {
it("should return correct viewType", () => {
const testValues = {
actionConfiguration: {
formData: {
node1: { data: "value1" },
node3: { data: "value1" },
node2: { data: "value1", viewType: ViewTypes.JSON },
node4: { data: "value1", viewType: ViewTypes.COMPONENT },
node5: { bata: "value1", viewType: ViewTypes.COMPONENT },
},
},
actionConfiguration2: {
formData: {
node6: { data: "value1", viewType: ViewTypes.COMPONENT },
},
},
};
const testCases = [
{
input: "actionConfiguration.formData.node1.data",
output: ViewTypes.COMPONENT,
},
{
input: "actionConfiguration.formData.node2.data",
output: ViewTypes.JSON,
},
{
input: "actionConfiguration.formData.node3.data",
output: ViewTypes.COMPONENT,
},
{
input: "actionConfiguration.formData.node4.data",
output: ViewTypes.COMPONENT,
},
{
input: "actionConfiguration.formData.node5.bata",
output: ViewTypes.COMPONENT,
},
{
input: "actionConfiguration2.formData.node6.bata",
output: ViewTypes.COMPONENT,
},
];
testCases.forEach((testCase) => {
expect(getViewType(testValues, testCase.input)).toEqual(testCase.output);
});
});
it("should change the viewType", () => {
const outputValues: any[] = [
{
actionConfiguration: {
formData: {
node1: { data: "value1" },
node3: { data: "value1" },
node2: { data: "value1", viewType: ViewTypes.JSON },
node4: { data: "value1", viewType: ViewTypes.COMPONENT },
node5: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value2",
},
},
},
},
{
actionConfiguration: {
formData: {
node1: { data: "value1" },
node3: { data: "value1" },
node2: { data: "value1", viewType: ViewTypes.JSON },
node4: { data: "value1", viewType: ViewTypes.COMPONENT },
node5: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value2",
},
},
},
},
{
actionConfiguration: {
formData: {
node1: { data: "value1" },
node3: { data: "value1" },
node2: { data: "value1", viewType: ViewTypes.JSON },
node4: {
data: "value1",
viewType: ViewTypes.COMPONENT,
jsonData: "value2",
},
node5: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value2",
},
},
},
},
{
actionConfiguration: {
formData: {
node1: { data: "value1" },
node3: { data: "value1" },
node2: { data: "value1", viewType: ViewTypes.JSON },
node4: { data: "value1", viewType: ViewTypes.COMPONENT },
node5: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value2",
},
},
},
},
{
actionConfiguration: {
formData: {
node1: { data: "value1" },
node3: { data: "value1" },
node2: { data: "value1", viewType: ViewTypes.JSON },
node4: { data: "value1", viewType: ViewTypes.COMPONENT },
node5: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value2",
},
},
},
},
{
actionConfiguration: {
formData: {
node1: { data: "value1" },
node3: { data: "value1" },
node2: { data: "value1", viewType: ViewTypes.JSON },
node4: { data: "value1", viewType: ViewTypes.COMPONENT },
node5: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value2",
},
},
},
},
];
const customSetterFunction = (
formName: string,
path: string,
value: any,
) => {
set(outputValues[Number(formName.split("-")[1])], path, value);
};
const inputValue = {
actionConfiguration: {
formData: {
node1: { data: "value1" },
node2: { data: "value1", viewType: ViewTypes.JSON },
node3: { data: "value1" },
node4: {
data: "value1",
viewType: ViewTypes.COMPONENT,
jsonData: "value2",
},
node5: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value2",
},
},
},
};
const expectedOutputValues: any[] = [
{
actionConfiguration: {
formData: {
node1: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value1",
},
node2: { data: "value1", viewType: ViewTypes.JSON },
node3: { data: "value1" },
node4: { data: "value1", viewType: ViewTypes.COMPONENT },
node5: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value2",
},
},
},
},
{
actionConfiguration: {
formData: {
node1: { data: "value1" },
node3: { data: "value1" },
node2: {
data: "value1",
viewType: ViewTypes.COMPONENT,
jsonData: "value1",
},
node4: { data: "value1", viewType: ViewTypes.COMPONENT },
node5: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value2",
},
},
},
},
{
actionConfiguration: {
formData: {
node1: { data: "value1" },
node3: { data: "value1" },
node2: { data: "value1", viewType: ViewTypes.JSON },
node4: {
data: "value2",
viewType: ViewTypes.JSON,
jsonData: "value2",
componentData: "value1",
},
node5: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value2",
},
},
},
},
{
actionConfiguration: {
formData: {
node1: { data: "value1" },
node3: { data: "value1" },
node2: { data: "value1", viewType: ViewTypes.JSON },
node4: { data: "value1", viewType: ViewTypes.COMPONENT },
node5: {
data: "value2",
viewType: ViewTypes.COMPONENT,
componentData: "value2",
jsonData: "value1",
},
},
},
},
{
actionConfiguration: {
formData: {
node1: { data: "value1" },
node3: {
data: "value1",
jsonData: "value1",
viewType: ViewTypes.COMPONENT,
},
node2: { data: "value1", viewType: ViewTypes.JSON },
node4: { data: "value1", viewType: ViewTypes.COMPONENT },
node5: {
data: "value1",
viewType: ViewTypes.JSON,
componentData: "value2",
},
},
},
},
];
const testCases = [
{
path: "actionConfiguration.formData.node1.data",
viewType: ViewTypes.COMPONENT,
},
{
path: "actionConfiguration.formData.node2.data",
viewType: ViewTypes.JSON,
},
{
path: "actionConfiguration.formData.node4.data",
viewType: ViewTypes.COMPONENT,
},
{
path: "actionConfiguration.formData.node5.data",
viewType: ViewTypes.JSON,
},
{
path: "actionConfiguration.formData.node3.data",
viewType: ViewTypes.JSON,
},
];
testCases.forEach((testCase, index) => {
const formName = `testForm-${index}`;
switchViewType(
inputValue,
testCase.path,
testCase.viewType,
formName,
customSetterFunction,
);
expect(outputValues[index]).toEqual(expectedOutputValues[index]);
});
});
});
describe("UQI form render methods", () => {
it("extract conditional output", () => {
const expectedOutputs = [
{},
{
conditionals: {},
visible: true,
enabled: true,
},
{
conditionals: {},
visible: true,
enabled: false,
},
{
conditionals: {},
visible: false,
enabled: true,
},
];
const testCases = [
{
name: "section1",
},
{
name: "section2",
identifier: "identifier",
},
{
name: "section3",
configProperty: "configProperty",
identifier: "identifier",
},
{
name: "section4",
configProperty: "configProperty",
propertyName: "propertyName",
identifier: "identifier",
},
];
testCases.forEach((testCase, index) => {
const output = extractConditionalOutput(testCase, formEvaluation);
expect(output).toEqual(expectedOutputs[index]);
});
});
it("section render test", () => {
const testCases = [
{
input: "identifier",
output: true,
},
{
input: "configProperty",
output: true,
},
{
input: "propertyName",
output: false,
},
{
input: "identifier2",
output: true,
},
{
input: "identifier3",
output: false,
},
{
input: "identifier4",
output: false,
},
{
input: "identifier5",
output: true,
},
];
testCases.forEach((testCase) => {
const output = checkIfSectionCanRender(formEvaluation[testCase.input]);
expect(output).toEqual(testCase.output);
});
});
it("section enabled/disabled test", () => {
const testCases = [
{
input: "identifier",
output: true,
},
{
input: "configProperty",
output: false,
},
{
input: "propertyName",
output: true,
},
{
input: "identifier2",
output: false,
},
{
input: "identifier3",
output: true,
},
];
testCases.forEach((testCase) => {
const output = checkIfSectionIsEnabled(formEvaluation[testCase.input]);
expect(output).toEqual(testCase.output);
});
});
it("check if valid form config", () => {
const testCases: any[] = [
{
input: {},
output: false,
},
{
input: {
controlType: "SECTION",
label: "Select Bucket to Query",
children: [
{
label: "Bucket Name",
configProperty: "actionConfiguration.formData.bucket.data",
controlType: "QUERY_DYNAMIC_INPUT_TEXT",
evaluationSubstitutionType: "TEMPLATE",
isRequired: true,
initialValue: "",
},
],
},
output: true,
},
{
input: {
label: "Select Bucket to Query",
children: [
{
label: "Bucket Name",
configProperty: "actionConfiguration.formData.bucket.data",
controlType: "QUERY_DYNAMIC_INPUT_TEXT",
evaluationSubstitutionType: "TEMPLATE",
isRequired: true,
initialValue: "",
},
],
},
output: false,
},
];
testCases.forEach((testCase) => {
const output = isValidFormConfig(testCase.input);
expect(output).toEqual(testCase.output);
});
});
it("update section config tests", () => {
const testCases = [
{
input: {
sectionObject: {
key1: "valueX",
key2: "valueY",
disabled: false,
visible: false,
controlType: "SECTION",
},
path: "updateSectionConfigTest1",
},
output: {
key1: "value1",
key2: "value2",
disabled: false,
visible: false,
controlType: "SECTION",
},
},
{
input: {
sectionObject: {
key1: "valueX",
key2: "valueY",
disabled: false,
visible: false,
controlType: "SECTION",
},
path: "updateSectionConfigTest2",
},
output: {
key1: "valueX",
key2: "valueY",
disabled: false,
visible: false,
controlType: "SECTION",
},
},
];
testCases.forEach((testCase) => {
const output = updateEvaluatedSectionConfig(
testCase.input.sectionObject,
formEvaluation[testCase.input.path],
);
expect(output).toEqual(testCase.output);
});
});
});
// Constant evaluation object used for testing
const formEvaluation: Record<string, any> = {
propertyName: {
conditionals: {},
visible: false,
enabled: true,
},
configProperty: {
conditionals: {},
visible: true,
enabled: false,
},
identifier: {
conditionals: {},
visible: true,
enabled: true,
},
identifier2: {
conditionals: {},
enabled: false,
},
identifier3: {
conditionals: {},
visible: false,
},
identifier4: {
conditionals: {},
visible: true,
evaluateFormConfig: {
updateEvaluatedConfig: false,
},
},
identifier5: {
conditionals: {},
visible: true,
evaluateFormConfig: {
updateEvaluatedConfig: "false",
},
},
updateSectionConfigTest1: {
conditionals: {},
visible: true,
enabled: true,
evaluateFormConfig: {
updateEvaluatedConfig: true,
evaluateFormConfigObject: {
key1: { output: "value1" },
key2: { output: "value2" },
},
},
},
updateSectionConfigTest2: {
conditionals: {},
visible: true,
enabled: true,
evaluateFormConfig: {
updateEvaluatedConfig: false,
evaluateFormConfigObject: {
key1: { output: "value1" },
key2: { output: "value2" },
},
},
},
};