aboutsummaryrefslogtreecommitdiffstats
path: root/gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils
diff options
context:
space:
mode:
authorbrunomilitzer <bruno.militzer@est.tech>2021-12-17 17:41:57 +0000
committerBruno Militzer <bruno.militzer@est.tech>2022-01-04 15:51:54 +0000
commit4be96f85c65df9384b11d68e87ca9e03e27a083c (patch)
treeaf178c54ace2b5d7457e3547b81cae6f4b6d5ebc /gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils
parentacd025f30f0005731c9b2894cb954bd31401ab76 (diff)
Added Jest Unit Tests
Jest Tests for creation of instance properties Jest Tests for deletion of instance properties Included Issue-Id: 3566 Issue-ID: POLICY-3563 Signed-off-by: brunomilitzer <bruno.militzer@est.tech> Change-Id: I227ae8f306df10ee3cc341791471dda9ca79d9d1
Diffstat (limited to 'gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils')
-rw-r--r--gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils/InstantiationUtils.js175
1 files changed, 175 insertions, 0 deletions
diff --git a/gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils/InstantiationUtils.js b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils/InstantiationUtils.js
new file mode 100644
index 0000000..fd83432
--- /dev/null
+++ b/gui-clamp/ui-react/src/components/dialogs/ControlLoop/utils/InstantiationUtils.js
@@ -0,0 +1,175 @@
+/*
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2021 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ *
+ *
+ */
+
+import { JSONEditor } from "@json-editor/json-editor";
+
+const InstantiationUtils = {
+
+ parseInstantiationList: (controlLoopList) => {
+ const parsedControlLoopList = [];
+
+ controlLoopList.map((instance, index) => {
+
+ const controlLoopObj = {
+ index,
+ name: instance['name'],
+ version: instance['version'],
+ orderedState: instance['orderedState'],
+ currentState: instance['state'],
+ disableDelete: instance['state'] !== 'UNINITIALISED'
+ }
+
+ parsedControlLoopList.push(controlLoopObj);
+ });
+
+ return parsedControlLoopList;
+ },
+
+ makeSchemaForInstanceProperties: (instanceProps) => {
+ const instancePropsArray = Object.entries(instanceProps);
+
+ const newSchemaObject = {};
+
+ newSchemaObject.title = "InstanceProperties";
+ newSchemaObject.type = "object";
+ newSchemaObject.properties = {};
+
+ instancePropsArray.forEach(([key, value]) => {
+
+ const propertiesObject = {};
+
+ Object.entries(value.properties).forEach(([pKey, pValue]) => {
+ propertiesObject[pKey] = {
+ type: InstantiationUtils.getType(pValue.type)
+ }
+ });
+
+ newSchemaObject.properties[key] = {
+ options: {
+ "collapsed": true
+ },
+ properties: propertiesObject
+ }
+ });
+
+ return newSchemaObject;
+ },
+
+ parseJsonSchema: async (template, instanceProperties) => {
+ const fullTemplate = await template.json();
+
+ const filteredInitialValues = {};
+
+ const allInstanceProperties = await instanceProperties.json().then(properties => {
+ const filteredTemplateObj = {};
+ const propertiesTemplateArray = Object.entries(properties);
+
+ propertiesTemplateArray.forEach(([key, value]) => {
+ const propertiesObj = {
+ properties: value.properties
+ }
+
+ const propValues = {};
+ filteredTemplateObj[key] = propertiesObj;
+
+ const jsonNodeSchemaKey = fullTemplate.topology_template.node_templates[key]
+
+ Object.entries(propertiesObj.properties).forEach(([pKey, pValue]) => {
+ propValues[pKey] = jsonNodeSchemaKey.properties[pKey];
+ });
+
+ filteredInitialValues[key] = propValues;
+ });
+
+ return filteredTemplateObj;
+ });
+
+ const propertySchema = InstantiationUtils.makeSchemaForInstanceProperties(allInstanceProperties);
+
+ const jsonEditor = InstantiationUtils.createJsonEditor(propertySchema, filteredInitialValues);
+
+ return {
+ fullTemplate: fullTemplate,
+ jsonEditor: jsonEditor
+ }
+ },
+
+ getType: (pType) => {
+ switch (pType) {
+ case "map":
+ return "string";
+ case "string":
+ return "string";
+ case "integer":
+ return "integer";
+ case "list":
+ return "array";
+ case "object":
+ return "object";
+ default:
+ return "object";
+ }
+ },
+
+ createJsonEditor: (fullSchema, instanceProperties) => {
+ JSONEditor.defaults.options.collapse = true;
+
+ return new JSONEditor(document.getElementById("editor"),
+ {
+ schema: fullSchema,
+ startval: instanceProperties,
+ theme: 'bootstrap4',
+ iconlib: 'fontawesome5',
+ object_layout: 'normal',
+ disable_properties: false,
+ disable_edit_json: false,
+ disable_array_reorder: true,
+ disable_array_delete_last_row: true,
+ disable_array_delete_all_rows: false,
+ array_controls_top: true,
+ keep_oneof_values: false,
+ collapsed: true,
+ show_errors: 'always',
+ display_required_only: false,
+ show_opt_in: false,
+ prompt_before_delete: true,
+ required_by_default: false,
+ });
+ },
+
+ updateTemplate: (jsonEditorValues, fullTemplate) => {
+ const nodeTemplates = fullTemplate.topology_template.node_templates;
+ const instanceDataProperties = Object.entries(jsonEditorValues);
+
+ instanceDataProperties.forEach(([key, value]) => {
+ const nodeTemplatesKey = nodeTemplates[key]
+ Object.entries(value).forEach(([pKey, pValue]) => {
+ nodeTemplatesKey.properties[pKey] = pValue
+ });
+ });
+
+ fullTemplate.topology_template.node_templates = nodeTemplates;
+
+ return fullTemplate;
+ }
+}
+
+export default InstantiationUtils; \ No newline at end of file