Create UseTemplate Action and Reducer to update state with template from BE. 10/99210/1
authorAlexey Sandler <alexey.sandler@intl.att.com>
Thu, 5 Dec 2019 13:48:34 +0000 (15:48 +0200)
committerAlexey Sandler <alexey.sandler@intl.att.com>
Thu, 5 Dec 2019 13:51:34 +0000 (15:51 +0200)
Issue-ID: VID-724
Signed-off-by: Alexey Sandler <alexey.sandler@intl.att.com>
Change-Id: Ie6de2dd42c21c1bf1c93b1569ec84050618f410a
Signed-off-by: Alexey Sandler <alexey.sandler@intl.att.com>
vid-webpack-master/src/app/shared/storeUtil/utils/main.reducer.ts
vid-webpack-master/src/app/shared/storeUtil/utils/useTemplate/useTemplate.action.ts [new file with mode: 0644]
vid-webpack-master/src/app/shared/storeUtil/utils/useTemplate/useTemplate.reducer.spec.ts [new file with mode: 0644]
vid-webpack-master/src/app/shared/storeUtil/utils/useTemplate/useTemplate.reducer.ts [new file with mode: 0644]

index c02049e..a135563 100644 (file)
@@ -9,9 +9,11 @@ import {VNFActions} from "./vnf/vnf.actions";
 import {vnfReducer} from "./vnf/vnf.reducers";
 import {generalReducer} from "./general/general.reducers";
 import {serviceReducer} from "./service/service.reducers";
+import {useTemplateReducer} from "./useTemplate/useTemplate.reducer";
 import {networkReducer} from "./network/network.reducers";
 import {vfModuleReducer} from "./vfModule/vfModule.reducers";
 import {ServiceInstance} from "../../models/serviceInstance";
+import {UseTemplateActions} from "./useTemplate/useTemplate.action";
 import {SelectOptionInterface} from "../../models/selectOption";
 import {ServiceType} from "../../models/serviceType";
 import {VnfGroupActions} from "./vnfGroup/vnfGroup.actions";
@@ -72,6 +74,8 @@ export const MainReducer = function (state: ServiceState = initialState, action:
       return crReducer(state, action);
   }else if(Object.values(NcfActions).includes(action.type)){
       return ncfReducer(state, action);
+  } else if(Object.values(UseTemplateActions).includes(action.type)) {
+    return useTemplateReducer(state, action);
   } else {
     return Object.assign({}, state);
   }
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/useTemplate/useTemplate.action.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/useTemplate/useTemplate.action.ts
new file mode 100644 (file)
index 0000000..2cfd384
--- /dev/null
@@ -0,0 +1,17 @@
+import {Action, ActionCreator} from "redux";
+import {ServiceInstance} from "../../../models/serviceInstance";
+
+export enum UseTemplateActions {
+  CREATE_SERVICE_INSTANCE_FROM_TEMPLATE = 'CREATE_SERVICE_INSTANCE_FROM_TEMPLATE',
+}
+
+export interface CreateServiceInstanceFromTemplate extends Action {
+  serviceInstantiationTemplate?: ServiceInstance;
+  serviceModelId?: string;
+}
+
+export const createServiceInstanceFromTemplate: ActionCreator<CreateServiceInstanceFromTemplate> = (serviceInstantiationTemplate, serviceModelId) => ({
+    type: UseTemplateActions.CREATE_SERVICE_INSTANCE_FROM_TEMPLATE,
+    serviceInstantiationTemplate: serviceInstantiationTemplate,
+    serviceModelId: serviceModelId
+});
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/useTemplate/useTemplate.reducer.spec.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/useTemplate/useTemplate.reducer.spec.ts
new file mode 100644 (file)
index 0000000..e0f46e1
--- /dev/null
@@ -0,0 +1,18 @@
+import {ServiceInstance} from "../../../models/serviceInstance";
+import {useTemplateReducer} from "./useTemplate.reducer";
+import {CreateServiceInstanceFromTemplate, UseTemplateActions} from "./useTemplate.action";
+
+test('#CREATE_SERVICE_INSTANCE_FROM_TEMPLATE should add new service instance from template to redux ', () => {
+  let serviceFromTemplateInstance: ServiceInstance = <any>{
+    instanceName: 'templateInstanceName'
+  };
+  let serviceState = useTemplateReducer(<any>{
+    serviceInstance:{}},
+    <CreateServiceInstanceFromTemplate> {
+    type: UseTemplateActions.CREATE_SERVICE_INSTANCE_FROM_TEMPLATE,
+      serviceModelId: 'serviceModelID',
+      serviceInstantiationTemplate: serviceFromTemplateInstance,
+  })
+  expect (serviceState).toBeDefined();
+  expect (serviceState.serviceInstance['serviceModelID'].instanceName).toEqual('templateInstanceName');
+});
diff --git a/vid-webpack-master/src/app/shared/storeUtil/utils/useTemplate/useTemplate.reducer.ts b/vid-webpack-master/src/app/shared/storeUtil/utils/useTemplate/useTemplate.reducer.ts
new file mode 100644 (file)
index 0000000..5a06d6e
--- /dev/null
@@ -0,0 +1,20 @@
+import {ServiceState} from "../main.reducer";
+import {Action} from "redux";
+import {
+  createServiceInstanceFromTemplate,
+  CreateServiceInstanceFromTemplate,
+  UseTemplateActions
+} from "./useTemplate.action";
+import * as _ from "lodash";
+
+export function useTemplateReducer(state: ServiceState, action: Action) : ServiceState {
+   switch (action.type) {
+     case UseTemplateActions.CREATE_SERVICE_INSTANCE_FROM_TEMPLATE : {
+        const updateServiceInstanceFromTemplateAction = <CreateServiceInstanceFromTemplate>action;
+        const uuid = updateServiceInstanceFromTemplateAction.serviceModelId;
+        let newState = _.cloneDeep(state);
+        newState.serviceInstance[uuid] = updateServiceInstanceFromTemplateAction.serviceInstantiationTemplate;
+        return newState;
+     }
+   }
+}