[SDC-29] Amdocs OnBoard 1707 initial commit.

Change-Id: Ie4d12a3f574008b792899b368a0902a8b46b5370
Signed-off-by: AviZi <avi.ziv@amdocs.com>
diff --git a/openecomp-ui/test/flows/FlowsListEditor.test.js b/openecomp-ui/test/flows/FlowsListEditor.test.js
index 5342535..007b137 100644
--- a/openecomp-ui/test/flows/FlowsListEditor.test.js
+++ b/openecomp-ui/test/flows/FlowsListEditor.test.js
@@ -1,33 +1,30 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import React from 'react';
 import TestUtils from 'react-addons-test-utils';
 import {mapStateToProps} from 'sdc-app/flows/FlowsListEditor.js';
 import FlowsListEditorView from 'sdc-app/flows/FlowsListEditorView.jsx';
 
+import {FlowUpdateRequestFactory, FlowBasicFactory} from 'test-utils/factories/flows/FlowsFactories.js';
+
 describe('Flows List Editor Mapper and View Classes: ', function () {
 
 	it('mapStateToProps mapper exists', () => {
-		expect(mapStateToProps).toExist();
+		expect(mapStateToProps).toBeTruthy();
 	});
 
 	it('mapStateToProps mapper - without flowList', () => {
@@ -37,242 +34,106 @@
 			shouldShowWorkflowsEditor: undefined
 		};
 		let results = mapStateToProps({flows});
-		expect(results.flowList).toExist();
+		expect(results.flowList).toBeTruthy();
 		expect(results.flowList.length).toEqual(0);
 		expect(results.shouldShowWorkflowsEditor).toBe(true);
 	});
 
 	it('mapStateToProps mapper - populated flowList', () => {
-		let artifactName = 'test1', description = 'desc';
 		let flows = {
-			flowList: [{artifactName, description}],
+			flowList: FlowBasicFactory.buildList(1),
 			isDisplayModal: true,
 			isModalInEditMode: false,
 			shouldShowWorkflowsEditor: false
 		};
 		let results = mapStateToProps({flows});
-		expect(results.flowList).toExist();
+		expect(results.flowList).toBeTruthy();
 		expect(results.flowList.length).toEqual(1);
 		expect(results.shouldShowWorkflowsEditor).toBe(false);
 	});
 
 	it('mapStateToProps mapper - populated flowList and currentFlow is in readonly', () => {
-		let artifactName = 'test1', description = 'desc';
-		let currentFlow = {artifactName, description, readonly: true};
+		let currentFlow = FlowBasicFactory.build();
+		currentFlow.readonly = true;
 		let flows = {
 			flowList: [currentFlow],
-			currentFlow,
+			data: currentFlow,
 			isDisplayModal: true,
 			isModalInEditMode: false,
 			shouldShowWorkflowsEditor: false
 		};
 		let results = mapStateToProps({flows});
-		expect(results.currentFlow).toExist();
+		expect(results.currentFlow).toBeTruthy();
 		expect(results.isCheckedOut).toEqual(false);
 	});
 
 	it('mapStateToProps mapper - populated flowList and currentFlow is in not readonly', () => {
-		let artifactName = 'test1', description = 'desc';
-		let currentFlow = {artifactName, description, readonly: false};
+		let currentFlow = FlowBasicFactory.build();
+		currentFlow.readonly = false;
 		let flows = {
 			flowList: [currentFlow],
-			currentFlow,
+			data: currentFlow,
 			isDisplayModal: true,
 			isModalInEditMode: false,
 			shouldShowWorkflowsEditor: false
 		};
 		let results = mapStateToProps({flows});
-		expect(results.currentFlow).toExist();
+		expect(results.currentFlow).toBeTruthy();
+		expect(results.isCheckedOut).toEqual(true);
+	});
+
+	it('mapStateToProps mapper - populated flowList and service is in readonly', () => {
+		let currentFlow = FlowBasicFactory.build();
+		let flows = {
+			flowList: [currentFlow],
+			data: currentFlow,
+			isDisplayModal: true,
+			isModalInEditMode: false,
+			shouldShowWorkflowsEditor: false,
+			readonly: true
+		};
+		let results = mapStateToProps({flows});
+		expect(results.currentFlow).toBeTruthy();
+		expect(results.isCheckedOut).toEqual(false);
+	});
+
+	it('mapStateToProps mapper - populated flowList and service is in not readonly', () => {
+		let currentFlow = FlowBasicFactory.build();
+		let flows = {
+			flowList: [currentFlow],
+			data: currentFlow,
+			isDisplayModal: true,
+			isModalInEditMode: false,
+			shouldShowWorkflowsEditor: false,
+			readonly: false
+		};
+		let results = mapStateToProps({flows});
+		expect(results.currentFlow).toBeTruthy();
 		expect(results.isCheckedOut).toEqual(true);
 	});
 
 	it('basic view component run with empty flowList and should show the list', () => {
 		let renderer = TestUtils.createRenderer();
-		let artifactName = 'test1', description = 'desc';
-		let currentFlow = {artifactName, description, readonly: false};
+		let currentFlow = FlowBasicFactory.build();
 		renderer.render(<FlowsListEditorView shouldShowWorkflowsEditor={true} flowList={[currentFlow]}/>);
 		let renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 	});
 
 	it('basic view component run with empty flowList and should show the diagram', () => {
-		const flow = {
-			'artifactType': 'WORKFLOW',
-			'participants': [
-				{
-					'id': '1',
-					'name': 'Customer'
-				},
-				{
-					'id': '2',
-					'name': 'CCD'
-				},
-				{
-					'id': '3',
-					'name': 'Infrastructure'
-				},
-				{
-					'id': '4',
-					'name': 'MSO'
-				},
-				{
-					'id': '5',
-					'name': 'SDN-C'
-				},
-				{
-					'id': '6',
-					'name': 'A&AI'
-				},
-				{
-					'id': '7',
-					'name': 'APP-C'
-				},
-				{
-					'id': '8',
-					'name': 'Cloud'
-				},
-				{
-					'id': '9',
-					'name': 'DCAE'
-				},
-				{
-					'id': '10',
-					'name': 'ALTS'
-				},
-				{
-					'id': '11',
-					'name': 'VF'
-				}
-			],
-			'serviceID': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b',
-			'artifactDisplayName': 'zizizi',
-			'artifactGroupType': 'INFORMATIONAL',
-			'uniqueId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-			'artifactName': 'zizizi',
-			'artifactLabel': 'zizizi',
-			'artifactUUID': '0295a7cc-8c02-4105-9d7e-c30ce67ecd07',
-			'artifactVersion': '1',
-			'creationDate': 1470144601623,
-			'lastUpdateDate': 1470144601623,
-			'description': 'aslkjdfl asfdasdf',
-			'mandatory': false,
-			'timeout': 0,
-			'esId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-			'artifactChecksum': 'NjBmYjc4NGM5MWIwNmNkMDhmMThhMDAwYmQxYjBiZTU=',
-			'heatParameters': [],
-			'sequenceDiagramModel': {
-				'diagram': {
-					'metadata': {
-						'id': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-						'name': 'zizizi',
-						'ref': 'BLANK'
-					},
-					'lifelines': [
-						{
-							'id': '1',
-							'name': 'Customer',
-							'index': 1,
-							'x': 175
-						},
-						{
-							'id': '2',
-							'name': 'CCD',
-							'index': 2,
-							'x': 575
-						},
-						{
-							'id': '3',
-							'name': 'Infrastructure',
-							'index': 3,
-							'x': 975
-						},
-						{
-							'id': '4',
-							'name': 'MSO',
-							'index': 4,
-							'x': 1375
-						},
-						{
-							'id': '5',
-							'name': 'SDN-C',
-							'index': 5,
-							'x': 1775
-						},
-						{
-							'id': '6',
-							'name': 'A&AI',
-							'index': 6,
-							'x': 2175
-						},
-						{
-							'id': '7',
-							'name': 'APP-C',
-							'index': 7,
-							'x': 2575
-						},
-						{
-							'id': '8',
-							'name': 'Cloud',
-							'index': 8,
-							'x': 2975
-						},
-						{
-							'id': '9',
-							'name': 'DCAE',
-							'index': 9,
-							'x': 3375
-						},
-						{
-							'id': '10',
-							'name': 'ALTS',
-							'index': 10,
-							'x': 3775
-						},
-						{
-							'id': '11',
-							'name': 'VF',
-							'index': 11,
-							'x': 4175
-						}
-					],
-					'steps': [
-						{
-							'message': {
-								'id': '9377-5036-c011-cb95-3a8b-82c6-bbb5-bc84',
-								'name': '[Unnamed Message]',
-								'type': 'request',
-								'from': '1',
-								'to': '2',
-								'index': 1
-							}
-						},
-						{
-							'message': {
-								'id': '64c4-4fd1-b1da-4355-a060-6e48-ee47-c85c',
-								'name': '[Unnamed Message]',
-								'type': 'request',
-								'from': '1',
-								'to': '2',
-								'index': 2
-							}
-						}
-					]
-				}
-			}
-		};
+		const flow = FlowUpdateRequestFactory.build();
 		let renderer = TestUtils.createRenderer();
 		renderer.render(<FlowsListEditorView currentFlow={flow} shouldShowWorkflowsEditor={false} flowList={[flow]}/>);
 		let renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 	});
 
 	it('basic view component run with empty flowList and should show popup modal', () => {
 		let renderer = TestUtils.createRenderer();
-		let artifactName = 'test1', description = 'desc';
-		let currentFlow = {artifactName, description, readonly: false};
+		let currentFlow = FlowBasicFactory.build();
 		renderer.render(<FlowsListEditorView isDisplayModal={true} shouldShowWorkflowsEditor={true} flowList={[currentFlow]}/>);
 		let renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 	});
 
 
diff --git a/openecomp-ui/test/flows/flowsEditorModal.test.js b/openecomp-ui/test/flows/flowsEditorModal.test.js
index d8da97a..8371432 100644
--- a/openecomp-ui/test/flows/flowsEditorModal.test.js
+++ b/openecomp-ui/test/flows/flowsEditorModal.test.js
@@ -1,33 +1,30 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import React from 'react';
 import TestUtils from 'react-addons-test-utils';
 import {mapStateToProps} from 'sdc-app/flows/FlowsEditorModal.js';
 import FlowsEditorModalView from 'sdc-app/flows/FlowsEditorModalView.jsx';
 
+import {FlowBasicFactory} from 'test-utils/factories/flows/FlowsFactories.js';
+
 describe('Flows Editor Modal Mapper and View Classes: ', function () {
 
 	it('mapStateToProps mapper exists', () => {
-		expect(mapStateToProps).toExist();
+		expect(mapStateToProps).toBeTruthy();
 	});
 
 	it('mapStateToProps mapper - without currentFlow', () => {
@@ -36,22 +33,22 @@
 			diagramType: 'SOME_TYPE'
 		};
 		var results = mapStateToProps({flows});
-		expect(results.currentFlow).toExist();
+		expect(results.currentFlow).toBeTruthy();
 		expect(results.currentFlow.artifactName).toBe('');
 		expect(results.currentFlow.description).toBe('');
 	});
 
 	it('mapStateToProps mapper - populated currentFlow', () => {
-		let artifactName = 'test1', description = 'desc';
+		const currentFlow = FlowBasicFactory.build({artifactType: 'WORKFLOW'});
 		var flows = {
-			currentFlow: {artifactName, description},
+			data: currentFlow,
 			serviceID: '123',
-			diagramType: 'SOME_TYPE'
+			diagramType: 'WORKFLOW'
 		};
 		var results = mapStateToProps({flows});
-		expect(results.currentFlow).toExist();
-		expect(results.currentFlow.artifactName).toBe(artifactName);
-		expect(results.currentFlow.description).toBe(description);
+		expect(results.currentFlow).toBeTruthy();
+		expect(results.currentFlow.artifactName).toBe(currentFlow.artifactName);
+		expect(results.currentFlow.description).toBe(currentFlow.description);
 		expect(results.currentFlow.serviceID).toBe(flows.serviceID);
 		expect(results.currentFlow.artifactType).toBe(flows.diagramType);
 	});
@@ -62,9 +59,9 @@
 			<FlowsEditorModalView
 				onCancel={()=>{}}
 				onDataChanged={()=>{}}
-				currentFlow={{artifactName: '', description: ''}}/>);
+				currentFlow={FlowBasicFactory.build({artifactName: '', description: ''})}/>);
 		let renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 	});
 
 	it('modal view component run with data changed handler', done => {
@@ -73,10 +70,11 @@
 			<FlowsEditorModalView
 				onCancel={()=>{}}
 				onDataChanged={handler}
-				currentFlow={{artifactName: '', description: ''}}/>);
+				currentFlow={FlowBasicFactory.build({artifactName: '', description: ''})}
+				genericFieldInfo={{artifactName : {isValid: true, errorText: ''}, description: {isValid: true, errorText: ''}}} />);
 		let result = TestUtils.scryRenderedDOMComponentsWithTag(document, 'input');
-		expect(result).toExist();
-		expect(result.length).toExist();
+		expect(result).toBeTruthy();
+		expect(result.length).toBeTruthy();
 		TestUtils.Simulate.change(result[0]);
 	});
 
diff --git a/openecomp-ui/test/flows/test.js b/openecomp-ui/test/flows/test.js
index 4c5ab78..6e02e54 100644
--- a/openecomp-ui/test/flows/test.js
+++ b/openecomp-ui/test/flows/test.js
@@ -1,30 +1,36 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
 import store from 'sdc-app/AppStore.js';
 import FlowsActions from 'sdc-app/flows/FlowsActions.js';
 import {enums} from 'sdc-app/flows/FlowsConstants.js';
 
+import {
+	FlowCreateFactory,
+	FlowPostRequestFactory,
+	FlowPostResponseFactory,
+	FlowFetchRequestFactory,
+	FlowFetchResponseFactory,
+	FlowDeleteRequestFactory,
+ 	FlowUpdateRequestFactory } from 'test-utils/factories/flows/FlowsFactories.js';
+
+import {buildFromExistingObject} from 'test-utils/Util.js';
+
 const NEW_FLOW = true;
 
 let assertFlowDataAfterCreateFetchAndUpdate = (data) => {
@@ -33,13 +39,13 @@
 	expect(diagramType).toBe(data.artifactType);
 	let uniqueId = data.uniqueId || `${data.serviceID}.${data.artifactName}`;
 	let index = flowList.findIndex(flow => flow.uniqueId === uniqueId);
-	expect(index).toNotBe(-1);
+	expect(index).not.toBe(-1);
 };
 
 describe('Workflows and Management Flows Module Tests:', function () {
 
 
-	it('empty artifact should open flow creation modal', done => {
+	it('empty artifact should open flow creation modal', () => {
 
 		const artifacts = {};
 
@@ -51,96 +57,30 @@
 			participants: [],
 			serviceID: '1234'
 		});
-		setTimeout(() => {
-			let state = store.getState();
-			expect(state.flows.isDisplayModal).toBe(true);
-			expect(state.flows.isModalInEditMode).toBe(false);
-			done();
-		}, 50);
+		let state = store.getState();
+		expect(state.flows.isDisplayModal).toBe(true);
+		expect(state.flows.isModalInEditMode).toBe(false);
 	});
 
-	it('Close flow details editor modal', done => {
+	it('Close flow details editor modal', () => {
 		deepFreeze(store.getState());
 		FlowsActions.closeFlowDetailsEditor(store.dispatch);
-		setTimeout(() => {
-			let state = store.getState();
-			expect(state.flows.isDisplayModal).toBe(false);
-			expect(state.flows.isModalInEditMode).toBe(false);
-			done();
-		}, 50);
+		let state = store.getState();
+		expect(state.flows.isDisplayModal).toBe(false);
+		expect(state.flows.isModalInEditMode).toBe(false);
 	});
 
-	it('Get Flows List from loaded artifact', done => {
+	it('Get Flows List from loaded artifact', () => {
 
 		deepFreeze(store.getState());
 
 		const artifacts = {
-			'test1': {
-				'uniqueId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.test1',
-				'artifactType': 'NETWORK_CALL_FLOW',
-				'artifactName': 'test1',
-				'artifactChecksum': 'MzYxZGIyNjlkNjRmMTM4ZWMxM2FjNDUyNDQwMTI3NzM=',
-				'attUidLastUpdater': 'cs0008',
-				'updaterFullName': 'Carlos Santana',
-				'creationDate': 1468164899724,
-				'lastUpdateDate': 1468164899724,
-				'esId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.test1',
-				'artifactLabel': 'test1',
-				'artifactCreator': 'cs0008',
-				'description': 'www',
-				'mandatory': false,
-				'artifactDisplayName': 'test1',
-				'serviceApi': false,
-				'artifactGroupType': 'INFORMATIONAL',
-				'timeout': 0,
-				'artifactVersion': '1',
-				'artifactUUID': '28d4cb95-bb46-4666-b858-e333671e6444',
-				'payloadUpdateDate': 1468164900232
-			},
-			'kukuriku': {
-				'uniqueId': '0280b577-2c7b-426e-b7a2-f0dc16508c37.kukuriku',
+			'test1': FlowPostResponseFactory.build({artifactName: 'test1'}),
+			'kukuriku': FlowPostResponseFactory.build({
 				'artifactType': 'PUPPET',
-				'artifactName': 'fuel.JPG',
-				'artifactChecksum': 'OWEyYTVjMWFiNWQ4ZDIwZDUxYTE3Y2EzZmI3YTYyMjA=',
-				'attUidLastUpdater': 'cs0008',
-				'updaterFullName': 'Carlos Santana',
-				'creationDate': 1467877631512,
-				'lastUpdateDate': 1467877631512,
-				'esId': '0280b577-2c7b-426e-b7a2-f0dc16508c37.kukuriku',
-				'artifactLabel': 'kukuriku',
-				'artifactCreator': 'cs0008',
-				'description': 'asdfasdf',
-				'mandatory': false,
-				'artifactDisplayName': 'kukuriku',
-				'serviceApi': false,
-				'artifactGroupType': 'INFORMATIONAL',
-				'timeout': 0,
-				'artifactVersion': '1',
-				'artifactUUID': 'c1e98336-03f4-4b2a-b6a5-08eca44fe3c4',
-				'payloadUpdateDate': 1467877632722
-			},
-			'test3': {
-				'uniqueId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.test3',
-				'artifactType': 'NETWORK_CALL_FLOW',
-				'artifactName': 'test3',
-				'artifactChecksum': 'ZmJkZGU1M2M2ZWUxZTdmNGU5NTNiNTdiYTAzMmM1YzU=',
-				'attUidLastUpdater': 'cs0008',
-				'updaterFullName': 'Carlos Santana',
-				'creationDate': 1468165068570,
-				'lastUpdateDate': 1468165128827,
-				'esId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.test3',
-				'artifactLabel': 'test3',
-				'artifactCreator': 'cs0008',
-				'description': '333',
-				'mandatory': false,
-				'artifactDisplayName': 'test3',
-				'serviceApi': false,
-				'artifactGroupType': 'INFORMATIONAL',
-				'timeout': 0,
-				'artifactVersion': '2',
-				'artifactUUID': '0988027c-d19c-43db-8315-2c68fc773775',
-				'payloadUpdateDate': 1468165129335
-			}
+				'artifactName': 'kukuriku',
+			}),
+			'test3': FlowPostResponseFactory.build({artifactName: 'test3'})
 		};
 
 		const artifactsArray = Object.keys(artifacts).map(artifact => artifact);
@@ -157,41 +97,25 @@
 		};
 		FlowsActions.fetchFlowArtifacts(store.dispatch, actionData);
 
-		setTimeout(() => {
-			let state = store.getState();
-			expect(state.flows.isDisplayModal).toBe(false);
-			expect(state.flows.isModalInEditMode).toBe(false);
-			expect(state.flows.flowList.length).toEqual(artifactsArray.length);
-			expect(state.flows.flowParticipants).toEqual(actionData.participants);
-			expect(state.flows.serviceID).toBe(actionData.serviceID);
-			expect(state.flows.diagramType).toBe(actionData.diagramType);
-			done();
-		}, 50);
+		let state = store.getState();
+		expect(state.flows.isDisplayModal).toBe(false);
+		expect(state.flows.isModalInEditMode).toBe(false);
+		expect(state.flows.flowList.length).toEqual(artifactsArray.length);
+		expect(state.flows.flowParticipants).toEqual(actionData.participants);
+		expect(state.flows.serviceID).toBe(actionData.serviceID);
+		expect(state.flows.diagramType).toBe(actionData.diagramType);
 
 	});
 
 
-	it('Add New Flow', done => {
+	it('Add New Flow', () => {
 
 		deepFreeze(store.getState());
 
-		const flowCreateData = deepFreeze({
-			artifactName: 'zizizi',
-			artifactType: 'WORKFLOW',
-			description: 'aslkjdfl asfdasdf',
-			serviceID: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b',
-		});
+		const flowCreateData = FlowCreateFactory.build();
+		let expectedDataToBeSentInTheRequest = buildFromExistingObject(FlowPostRequestFactory, flowCreateData);
 
-
-		let expectedDataToBeSentInTheRequest = {
-			artifactGroupType: 'INFORMATIONAL',
-			artifactLabel: 'zizizi',
-			artifactName: 'zizizi',
-			artifactType: 'WORKFLOW',
-			description: 'aslkjdfl asfdasdf',
-			payloadData: 'eyJWRVJTSU9OIjp7Im1ham9yIjoxLCJtaW5vciI6MH0sImRlc2NyaXB0aW9uIjoiYXNsa2pkZmwgYXNmZGFzZGYifQ=='
-		};
-		mockRest.addHandler('create', ({data, baseUrl, options}) => {
+		mockRest.addHandler('post', ({data, baseUrl, options}) => {
 			expect(baseUrl).toBe(`/sdc1/feProxy/rest/v1/catalog/services/${flowCreateData.serviceID}/artifacts/`);
 			expect(data.artifactLabel).toBe(expectedDataToBeSentInTheRequest.artifactLabel);
 			expect(data.artifactName).toBe(expectedDataToBeSentInTheRequest.artifactName);
@@ -199,299 +123,65 @@
 			expect(data.description).toBe(expectedDataToBeSentInTheRequest.description);
 			expect(data.payloadData).toBe(expectedDataToBeSentInTheRequest.payloadData);
 			expect(options.md5).toBe(true);
-			return {
-				artifactChecksum: 'NjBmYjc4NGM5MWIwNmNkMDhmMThhMDAwYmQxYjBiZTU=',
-				artifactCreator: 'cs0008',
-				artifactDisplayName: 'zizizi',
-				artifactGroupType: 'INFORMATIONAL',
-				artifactLabel: 'zizizi',
-				artifactName: 'zizizi',
-				artifactType: 'WORKFLOW',
-				artifactUUID: '0295a7cc-8c02-4105-9d7e-c30ce67ecd07',
-				artifactVersion: '1',
-				attUidLastUpdater: 'cs0008',
-				creationDate: 1470144601623,
-				description: 'aslkjdfl asfdasdf',
-				esId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-				lastUpdateDate: 1470144601623,
-				mandatory: false,
-				payloadUpdateDate: 1470144602131,
-				serviceApi: false,
-				timeout: 0,
-				uniqueId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-				updaterFullName: 'Carlos Santana',
-			};
+			return buildFromExistingObject(FlowPostResponseFactory, expectedDataToBeSentInTheRequest);
 		});
 
-		FlowsActions.createOrUpdateFlow(store.dispatch, {flow: flowCreateData}, NEW_FLOW);
-
-		setTimeout(() => {
+		return FlowsActions.createOrUpdateFlow(store.dispatch, {flow: flowCreateData}, NEW_FLOW).then(() => {
 			assertFlowDataAfterCreateFetchAndUpdate(flowCreateData);
-			done();
-		}, 50);
+		});
+
+		
 	});
 
-	it('Fetch Flow', done => {
+	it('Fetch Flow', () => {
 
 		deepFreeze(store.getState());
 
-		const flowFetchData = {
-			artifactName: 'zizizi',
-			artifactType: 'WORKFLOW',
-			description: 'aslkjdfl asfdasdf',
-			serviceID: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b',
-			uniqueId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-			participants: []
-		};
+		const flowFetchData = FlowFetchRequestFactory.build();
 
 		mockRest.addHandler('fetch', ({baseUrl}) => {
 			//sdc1/feProxy/rest/v1/catalog/services/338d75f0-aec8-4eb4-89c9-8733fcd9bf3b/artifacts/338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi
 			expect(baseUrl).toBe(`/sdc1/feProxy/rest/v1/catalog/services/${flowFetchData.serviceID}/artifacts/${flowFetchData.uniqueId}`);
-			return {
-				artifactName: 'zizizi',
-				base64Contents: 'eyJWRVJTSU9OIjp7Im1ham9yIjoxLCJtaW5vciI6MH0sImRlc2NyaXB0aW9uIjoiYXNsa2pkZmwgYXNmZGFzZGYifQ=='
-			};
+			return buildFromExistingObject(FlowFetchResponseFactory, flowFetchData);
 		});
 
-		FlowsActions.fetchArtifact(store.dispatch, {flow: flowFetchData});
-
-		setTimeout(() => {
+		return FlowsActions.fetchArtifact(store.dispatch, {flow: flowFetchData}).then(() => {
 			assertFlowDataAfterCreateFetchAndUpdate(flowFetchData);
-			done();
-		}, 50);
+		});
 	});
 
-	it('Update Existing Flow', done => {
+	it('Update Existing Flow', () => {
 
 		deepFreeze(store.getState());
+		const flowUpdateData = FlowUpdateRequestFactory.build();
 
-		const flowUpdateData = {
-			'artifactType': 'WORKFLOW',
-			'participants': [
-				{
-					'id': '1',
-					'name': 'Customer'
-				},
-				{
-					'id': '2',
-					'name': 'CCD'
-				},
-				{
-					'id': '3',
-					'name': 'Infrastructure'
-				},
-				{
-					'id': '4',
-					'name': 'MSO'
-				},
-				{
-					'id': '5',
-					'name': 'SDN-C'
-				},
-				{
-					'id': '6',
-					'name': 'A&AI'
-				},
-				{
-					'id': '7',
-					'name': 'APP-C'
-				},
-				{
-					'id': '8',
-					'name': 'Cloud'
-				},
-				{
-					'id': '9',
-					'name': 'DCAE'
-				},
-				{
-					'id': '10',
-					'name': 'ALTS'
-				},
-				{
-					'id': '11',
-					'name': 'VF'
-				}
-			],
-			'serviceID': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b',
-			'artifactDisplayName': 'zizizi',
-			'artifactGroupType': 'INFORMATIONAL',
-			'uniqueId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-			'artifactName': 'zizizi',
-			'artifactLabel': 'zizizi',
-			'artifactUUID': '0295a7cc-8c02-4105-9d7e-c30ce67ecd07',
-			'artifactVersion': '1',
-			'creationDate': 1470144601623,
-			'lastUpdateDate': 1470144601623,
-			'description': 'aslkjdfl asfdasdf',
-			'mandatory': false,
-			'timeout': 0,
-			'esId': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-			'artifactChecksum': 'NjBmYjc4NGM5MWIwNmNkMDhmMThhMDAwYmQxYjBiZTU=',
-			'heatParameters': [],
-			'sequenceDiagramModel': {
-				'diagram': {
-					'metadata': {
-						'id': '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-						'name': 'zizizi',
-						'ref': 'BLANK'
-					},
-					'lifelines': [
-						{
-							'id': '1',
-							'name': 'Customer',
-							'index': 1,
-							'x': 175
-						},
-						{
-							'id': '2',
-							'name': 'CCD',
-							'index': 2,
-							'x': 575
-						},
-						{
-							'id': '3',
-							'name': 'Infrastructure',
-							'index': 3,
-							'x': 975
-						},
-						{
-							'id': '4',
-							'name': 'MSO',
-							'index': 4,
-							'x': 1375
-						},
-						{
-							'id': '5',
-							'name': 'SDN-C',
-							'index': 5,
-							'x': 1775
-						},
-						{
-							'id': '6',
-							'name': 'A&AI',
-							'index': 6,
-							'x': 2175
-						},
-						{
-							'id': '7',
-							'name': 'APP-C',
-							'index': 7,
-							'x': 2575
-						},
-						{
-							'id': '8',
-							'name': 'Cloud',
-							'index': 8,
-							'x': 2975
-						},
-						{
-							'id': '9',
-							'name': 'DCAE',
-							'index': 9,
-							'x': 3375
-						},
-						{
-							'id': '10',
-							'name': 'ALTS',
-							'index': 10,
-							'x': 3775
-						},
-						{
-							'id': '11',
-							'name': 'VF',
-							'index': 11,
-							'x': 4175
-						}
-					],
-					'steps': [
-						{
-							'message': {
-								'id': '9377-5036-c011-cb95-3a8b-82c6-bbb5-bc84',
-								'name': '[Unnamed Message]',
-								'type': 'request',
-								'from': '1',
-								'to': '2',
-								'index': 1
-							}
-						},
-						{
-							'message': {
-								'id': '64c4-4fd1-b1da-4355-a060-6e48-ee47-c85c',
-								'name': '[Unnamed Message]',
-								'type': 'request',
-								'from': '1',
-								'to': '2',
-								'index': 2
-							}
-						}
-					]
-				}
-			}
-		};
-
-		mockRest.addHandler('create', ({baseUrl}) => {
+		mockRest.addHandler('post', ({baseUrl}) => {
 			expect(baseUrl).toBe(`/sdc1/feProxy/rest/v1/catalog/services/${flowUpdateData.serviceID}/artifacts/${flowUpdateData.uniqueId}`);
 
-			return {
-				artifactChecksum: 'MmE5MWJmN2ZlN2FhM2JhMzA0NGQ1ODMyOWFhNWI0NDA=',
-				artifactCreator: 'cs0008',
-				artifactDisplayName: 'zizizi',
-				artifactGroupType: 'INFORMATIONAL',
-				artifactLabel: 'zizizi',
-				artifactName: 'zizizi',
-				artifactType: 'WORKFLOW',
-				artifactUUID: '3319335b-969e-4d72-b5a2-409645de6d64',
-				artifactVersion: '3',
-				attUidLastUpdater: 'cs0008',
-				creationDate: 1470144601623,
-				description: 'aslkjdfl asfdasdf',
-				esId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-				lastUpdateDate: 1470208425904,
-				mandatory: false,
-				payloadUpdateDate: 1470208426424,
-				serviceApi: false,
-				timeout: 0,
-				uniqueId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-				updaterFullName: 'Carlos Santana'
-			};
+			return buildFromExistingObject(FlowPostResponseFactory, flowUpdateData);
 		});
 
-		FlowsActions.createOrUpdateFlow(store.dispatch, {flow: flowUpdateData}, !NEW_FLOW);
-
-		setTimeout(() => {
+		return FlowsActions.createOrUpdateFlow(store.dispatch, {flow: flowUpdateData}, !NEW_FLOW).then(() => {
 			assertFlowDataAfterCreateFetchAndUpdate(flowUpdateData);
-			done();
-		}, 50);
+		});
+
 	});
 
-	it('Delete Flow', done => {
+	it('Delete Flow', () => {
 
 		deepFreeze(store.getState());
 
-		const flowDeleteData = deepFreeze({
-			artifactName: 'zizizi',
-			artifactType: 'WORKFLOW',
-			description: 'aslkjdfl asfdasdf',
-			serviceID: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b',
-			uniqueId: '338d75f0-aec8-4eb4-89c9-8733fcd9bf3b.zizizi',
-			participants: []
-		});
+		const flowDeleteData = FlowDeleteRequestFactory.build();
 
 		mockRest.addHandler('destroy', ({baseUrl}) => {
 			expect(baseUrl).toBe(`/sdc1/feProxy/rest/v1/catalog/services/${flowDeleteData.serviceID}/artifacts/${flowDeleteData.uniqueId}`);
 			return {};
 		});
 
-		FlowsActions.deleteFlow(store.dispatch, {flow: flowDeleteData});
-
-		setTimeout(() => {
+		return FlowsActions.deleteFlow(store.dispatch, {flow: flowDeleteData}).then(() => {
 			let {flowList} = store.getState().flows;
 			let index = flowList.findIndex(flow => flow.uniqueId === flowDeleteData.uniqueId);
 			expect(index).toBe(-1);
-			done();
-		}, 50);
+		});
 	});
-
 });
-
diff --git a/openecomp-ui/test/licenseModel/creation/LicenseModelCreation.test.js b/openecomp-ui/test/licenseModel/creation/LicenseModelCreation.test.js
new file mode 100644
index 0000000..0d8ce94
--- /dev/null
+++ b/openecomp-ui/test/licenseModel/creation/LicenseModelCreation.test.js
@@ -0,0 +1,75 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {mapStateToProps } from 'sdc-app/onboarding/licenseModel/creation/LicenseModelCreation.js';
+import LicenseModelCreationView from 'sdc-app/onboarding/licenseModel/creation/LicenseModelCreationView.jsx';
+import {LicenseModelCreationFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
+
+describe('License Model Creation Module Tests', function() {
+	it ('mapStateToProps mapper exists', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it ('should return empty data', () => {
+		let state = {
+			licenseModelList: [],
+			licenseModel: {
+				licenseModelCreation: {
+					data: {}
+				}
+			}
+		};
+		let props = mapStateToProps(state);
+		expect(props.data).toEqual({});
+	});
+
+	it ('should return vlm names list', () => {
+		let state = {
+			licenseModelList: [{
+				vendorName: 'vlm1',
+				id: 'vlm1_id'
+			}, {
+				vendorName: 'vlm2',
+				id: 'vlm2_id'
+			}],
+			licenseModel: {
+				licenseModelCreation: {
+					data: {}
+				}
+			}
+		};
+		let props = mapStateToProps(state);
+		expect(props.data).toEqual({});
+		expect(props.VLMNames).toEqual({vlm1: 'vlm1_id', vlm2: 'vlm2_id'});
+	});
+
+	it('simple jsx test', () => {
+		let data = LicenseModelCreationFactory.build();
+		var renderer = TestUtils.createRenderer();
+		renderer.render(
+			<LicenseModelCreationView
+				data={data}
+				onDataChanged={() => {}}
+				onValidateForm={() => {}}
+				onSubmit={() => {}}
+				onCancel={() => {}}/>
+			);
+		var renderedOutput = renderer.getRenderOutput();
+		expect(renderedOutput).toBeTruthy();
+	});
+});
diff --git a/openecomp-ui/test/licenseModel/entitlementPools/test.js b/openecomp-ui/test/licenseModel/entitlementPools/test.js
index 3270538..15e1dee 100644
--- a/openecomp-ui/test/licenseModel/entitlementPools/test.js
+++ b/openecomp-ui/test/licenseModel/entitlementPools/test.js
@@ -1,52 +1,34 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
 import deepFreeze from 'deep-freeze';
-import {expect} from 'chai';
 import mockRest from 'test-utils/MockRest.js';
-import {cloneAndSet} from 'test-utils/Util.js';
+import {cloneAndSet, buildListFromFactory} from 'test-utils/Util.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 import EntitlementPoolsActionHelper from 'sdc-app/onboarding/licenseModel/entitlementPools/EntitlementPoolsActionHelper.js';
+import {EntitlementPoolStoreFactory, EntitlementPoolPostFactory} from 'test-utils/factories/licenseModel/EntitlementPoolFactories.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
 
 describe('Entitlement Pools Module Tests', function () {
 
 	const LICENSE_MODEL_ID = '555';
+	const version = VersionControllerUtilsFactory.build().version;
 
 	it('Load Entitlement Pools List', () => {
-		const entitlementPoolsList = [
-			{
-				name: 'ep1',
-				description: 'string',
-				thresholdValue: 75,
-				thresholdUnits: '%',
-				entitlementMetric: {'choice': 'User', 'other': ''},
-				increments: 'string',
-				aggregationFunction: {'choice': 'Average', 'other': ''},
-				operationalScope: {'choices': ['Other'], 'other': 'blabla'},
-				time: {'choice': 'Hour', 'other': ''},
-				sku: 'DEF2-385A-4521-AAAA',
-				id: '1',
-				referencingFeatureGroups: [],
-				partNumber: '51529'
-			}
-		];
+
+		const entitlementPoolsList = buildListFromFactory(EntitlementPoolStoreFactory);
 		deepFreeze(entitlementPoolsList);
 		const store = storeCreator();
 		deepFreeze(store.getState());
@@ -54,36 +36,20 @@
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolsList', entitlementPoolsList);
 
 		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/entitlement-pools`);
-			expect(data).to.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {results: entitlementPoolsList};
 		});
 
-		return EntitlementPoolsActionHelper.fetchEntitlementPoolsList(store.dispatch, {licenseModelId: LICENSE_MODEL_ID}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		return EntitlementPoolsActionHelper.fetchEntitlementPoolsList(store.dispatch, {licenseModelId: LICENSE_MODEL_ID, version}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Delete Entitlement Pool', () => {
-		const entitlementPoolsList = [
-			{
-				name: 'ep1',
-				description: 'string',
-				thresholdValue: 75,
-				thresholdUnits: '%',
-				entitlementMetric: {'choice': 'User', 'other': ''},
-				increments: 'string',
-				aggregationFunction: {'choice': 'Average', 'other': ''},
-				operationalScope: {'choices': ['Other'], 'other': 'blabla'},
-				time: {'choice': 'Hour', 'other': ''},
-				sku: 'DEF2-385A-4521-AAAA',
-				id: '1',
-				referencingFeatureGroups: [],
-				partNumber: '51529'
-			}
-		];
 
+		const entitlementPoolsList = buildListFromFactory(EntitlementPoolStoreFactory,1);
 		deepFreeze(entitlementPoolsList);
 		const store = storeCreator({
 			licenseModel: {
@@ -97,9 +63,9 @@
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolsList', []);
 
 		mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/entitlement-pools/${entitlementPoolsList[0].id}`);
-			expect(data).to.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${entitlementPoolsList[0].id}`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {
 				results: {
 					returnCode: 'OK'
@@ -109,9 +75,10 @@
 
 		return EntitlementPoolsActionHelper.deleteEntitlementPool(store.dispatch, {
 			licenseModelId: LICENSE_MODEL_ID,
+			version,
 			entitlementPoolId: entitlementPoolsList[0].id
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
@@ -120,43 +87,20 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const entitlementPoolPostRequest = {
-			name: 'ep1',
-			description: 'string',
-			thresholdValue: 75,
-			thresholdUnits: '%',
-			entitlementMetric: {'choice': 'User', 'other': ''},
-			increments: 'string',
-			aggregationFunction: {'choice': 'Average', 'other': ''},
-			operationalScope: {'choices': ['Other'], 'other': 'blabla'},
-			time: {'choice': 'Hour', 'other': ''},
-			manufacturerReferenceNumber: 'DEF2-385A-4521-AAAA',
-		};
-		const entitlementPoolToAdd = {
-			name: 'ep1',
-			description: 'string',
-			thresholdValue: 75,
-			thresholdUnits: '%',
-			entitlementMetric: {'choice': 'User', 'other': ''},
-			increments: 'string',
-			aggregationFunction: {'choice': 'Average', 'other': ''},
-			operationalScope: {'choices': ['Other'], 'other': 'blabla'},
-			time: {'choice': 'Hour', 'other': ''},
-			manufacturerReferenceNumber: 'DEF2-385A-4521-AAAA',
-			referencingFeatureGroups: []
-		};
+		const EntitlementPoolPostRequest = EntitlementPoolPostFactory.build();
+
+		deepFreeze(EntitlementPoolPostRequest);
+
 		const entitlementPoolIdFromResponse = 'ADDED_ID';
-		const entitlementPoolAfterAdd = {
-			...entitlementPoolToAdd,
-			id: entitlementPoolIdFromResponse
-		};
+		const entitlementPoolAfterAdd = EntitlementPoolStoreFactory.build({id: entitlementPoolIdFromResponse});
+		deepFreeze(entitlementPoolAfterAdd);
 
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolsList', [entitlementPoolAfterAdd]);
 
-		mockRest.addHandler('create', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/entitlement-pools`);
-			expect(data).to.deep.equal(entitlementPoolPostRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('post', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools`);
+			expect(data).toEqual(EntitlementPoolPostRequest);
+			expect(options).toEqual(undefined);
 			return {
 				returnCode: 'OK',
 				value: entitlementPoolIdFromResponse
@@ -166,28 +110,18 @@
 		return EntitlementPoolsActionHelper.saveEntitlementPool(store.dispatch,
 			{
 				licenseModelId: LICENSE_MODEL_ID,
+				version,
 				previousEntitlementPool: null,
-				entitlementPool: entitlementPoolToAdd
+				entitlementPool: EntitlementPoolPostRequest
 			}
 		).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Update Entitlement Pool', () => {
-		const entitlementPoolsList = [{
-			name: 'ep1',
-			id: '0',
-			description: 'string',
-			thresholdValue: 75,
-			thresholdUnits: '%',
-			entitlementMetric: {'choice': 'User', 'other': ''},
-			increments: 'string',
-			aggregationFunction: {'choice': 'Average', 'other': ''},
-			operationalScope: {'choices': ['Other'], 'other': 'blabla'},
-			time: {'choice': 'Hour', 'other': ''},
-			manufacturerReferenceNumber: 'DEF2-385A-4521-AAAA'
-		}];
+
+		const entitlementPoolsList = buildListFromFactory(EntitlementPoolStoreFactory, 1);
 		deepFreeze(entitlementPoolsList);
 
 		const store = storeCreator({
@@ -197,47 +131,34 @@
 				}
 			}
 		});
+
 		deepFreeze(store.getState());
 
 		const toBeUpdatedEntitlementPoolId = entitlementPoolsList[0].id;
 		const previousEntitlementPoolData = entitlementPoolsList[0];
-		const entitlementPoolUpdateData = {
-			...entitlementPoolsList[0],
-			name: 'ep1_UPDATED',
-			description: 'string_UPDATED'
-		};
+		const entitlementPoolUpdateData = EntitlementPoolStoreFactory.build({name: 'ep1_UPDATED', description: 'string_UPDATED', id: toBeUpdatedEntitlementPoolId});
 		deepFreeze(entitlementPoolUpdateData);
 
-		const entitlementPoolPutRequest = {
-			name: 'ep1_UPDATED',
-			description: 'string_UPDATED',
-			thresholdValue: 75,
-			thresholdUnits: '%',
-			entitlementMetric: {'choice': 'User', 'other': ''},
-			increments: 'string',
-			aggregationFunction: {'choice': 'Average', 'other': ''},
-			operationalScope: {'choices': ['Other'], 'other': 'blabla'},
-			time: {'choice': 'Hour', 'other': ''},
-			manufacturerReferenceNumber: 'DEF2-385A-4521-AAAA'
-		};
+		const entitlementPoolPutRequest = EntitlementPoolPostFactory.build({name: 'ep1_UPDATED', description: 'string_UPDATED'});
 		deepFreeze(entitlementPoolPutRequest);
 
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.entitlementPool.entitlementPoolsList', [entitlementPoolUpdateData]);
 
 
-		mockRest.addHandler('save', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/entitlement-pools/${toBeUpdatedEntitlementPoolId}`);
-			expect(data).to.deep.equal(entitlementPoolPutRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools/${toBeUpdatedEntitlementPoolId}`);
+			expect(data).toEqual(entitlementPoolPutRequest);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
 		return EntitlementPoolsActionHelper.saveEntitlementPool(store.dispatch, {
 			licenseModelId: LICENSE_MODEL_ID,
+			version,
 			previousEntitlementPool: previousEntitlementPoolData,
 			entitlementPool: entitlementPoolUpdateData
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
diff --git a/openecomp-ui/test/licenseModel/featureGroups/LicenseModelFeatureGroupEditor.test.js b/openecomp-ui/test/licenseModel/featureGroups/LicenseModelFeatureGroupEditor.test.js
new file mode 100644
index 0000000..5f5e2a0
--- /dev/null
+++ b/openecomp-ui/test/licenseModel/featureGroups/LicenseModelFeatureGroupEditor.test.js
@@ -0,0 +1,74 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {mapStateToProps} from 'sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupEditor.js';
+import FeatureGroupEditorView from 'sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupEditorView.jsx';
+import {LicenseModelOverviewFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
+import {FeatureGroupStoreFactory} from 'test-utils/factories/licenseModel/FeatureGroupFactories.js';
+
+describe('License Model  Feature Groups Editor Module Tests', function () {
+
+	it('should mapper exist', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it('should return empty data', () => {
+
+		let licenseModel = LicenseModelOverviewFactory.build({
+			featureGroup: {
+				featureGroupEditor: {
+					data: FeatureGroupStoreFactory.build()
+				},
+				featureGroupsList: []
+			}
+		});
+
+		var results = mapStateToProps({licenseModel});
+		expect(results.entitlementPoolsList).toEqual([]);
+		expect(results.licenseKeyGroupsList).toEqual([]);
+	});
+
+	it ('should return fg names list', () => {
+		let licenseModel = LicenseModelOverviewFactory.build({
+			featureGroup: {
+				featureGroupEditor: {
+					data: FeatureGroupStoreFactory.build()
+				},
+				featureGroupsList: [{
+					name: 'fg1',
+					id: 'fg1_id'
+				}, {
+					name: 'fg2',
+					id: 'fg2_id'
+				}]
+			}
+		});
+		var results = mapStateToProps({licenseModel});
+		expect(results.FGNames).toEqual({fg1: 'fg1_id', fg2: 'fg2_id'});
+	});
+
+	it('jsx view test', () => {
+		var view = TestUtils.renderIntoDocument(<FeatureGroupEditorView
+			isReadOnlyMode={true}
+			onTabSelect={() => {}}
+			entitlementPoolsList={[{id: '1', name: '1'}]}
+			licenseKeyGroupsList={[{id: '1', name: '1'}]}/>);
+		expect(view).toBeTruthy();
+	});
+
+});
diff --git a/openecomp-ui/test/licenseModel/featureGroups/LicenseModelFeatureGroupListEditor.test.js b/openecomp-ui/test/licenseModel/featureGroups/LicenseModelFeatureGroupListEditor.test.js
new file mode 100644
index 0000000..5dc2004
--- /dev/null
+++ b/openecomp-ui/test/licenseModel/featureGroups/LicenseModelFeatureGroupListEditor.test.js
@@ -0,0 +1,90 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {mapStateToProps} from 'sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupListEditor.js';
+import FeatureGroupsListEditorView from 'sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupListEditorView.jsx';
+import { FeatureGroupStoreFactory } from 'test-utils/factories/licenseModel/FeatureGroupFactories.js';
+import {LicenseModelOverviewFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
+import { buildListFromFactory } from 'test-utils/Util.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+
+describe('License Model  Feature Group List  Module Tests', function () {
+
+	it('should mapper exist', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+
+	it('should return empty data', () => {
+
+
+		let licenseModel = LicenseModelOverviewFactory.build({
+			featureGroup: {
+				featureGroupEditor: {},
+				featureGroupsList: []
+			},
+			licenseModelEditor: {
+				data:{
+					...VersionControllerUtilsFactory.build()
+				}
+			}
+		});
+		var results = mapStateToProps({licenseModel});
+		expect(results.vendorName).toEqual(undefined);
+		expect(results.featureGroupsModal.show).toEqual(false);
+		expect(results.featureGroupsModal.editMode).toEqual(false);
+		expect(results.featureGroupsList).toEqual([]);
+	});
+
+	it('should return true for show and edit mode and vendorName should be not empty', () => {
+
+		let licenseModel = LicenseModelOverviewFactory.build({
+			featureGroup: {
+				featureGroupEditor: {
+					data: FeatureGroupStoreFactory.build()
+				},
+				featureGroupsList: []
+			}
+		});
+		var results = mapStateToProps({licenseModel});
+		expect(results.featureGroupsModal.show).toEqual(true);
+		expect(results.featureGroupsModal.editMode).toEqual(true);
+		expect(results.vendorName).toEqual(licenseModel.licenseModelEditor.data.vendorName);
+	});
+
+	it('jsx view test', () => {
+		var view = TestUtils.renderIntoDocument(<FeatureGroupsListEditorView  vendorName=''
+			licenseModelId=''
+			featureGroupsModal={{show: false, editMode: false}}
+			isReadOnlyMode={false}
+			onAddFeatureGroupClick={()=>{}}
+			featureGroupsList={[]} />);
+		expect(view).toBeTruthy();
+	});
+
+	it('jsx view list test', () => {
+		var view = TestUtils.renderIntoDocument(<FeatureGroupsListEditorView  vendorName=''
+			licenseModelId=''
+			featureGroupsModal={{show: false, editMode: true}}
+			isReadOnlyMode={false}
+			onAddFeatureGroupClick={()=>{}}
+			featureGroupsList={buildListFromFactory(FeatureGroupStoreFactory)} />);
+		expect(view).toBeTruthy();
+	});
+
+});
diff --git a/openecomp-ui/test/licenseModel/featureGroups/test.js b/openecomp-ui/test/licenseModel/featureGroups/test.js
index d334ab7..7d0d724 100644
--- a/openecomp-ui/test/licenseModel/featureGroups/test.js
+++ b/openecomp-ui/test/licenseModel/featureGroups/test.js
@@ -1,75 +1,56 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
-import {expect} from 'chai';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
-import {cloneAndSet} from 'test-utils/Util.js';
+import {cloneAndSet, buildListFromFactory} from 'test-utils/Util.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 import FeatureGroupsActionHelper from 'sdc-app/onboarding/licenseModel/featureGroups/FeatureGroupsActionHelper.js';
+import { FeatureGroupStoreFactory, FeatureGroupPostFactory, FeatureGroupDispatchFactory, FeatureGroupPutFactory } from 'test-utils/factories/licenseModel/FeatureGroupFactories.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
 
 
 describe('Feature Groups Module Tests', function () {
 
 	const LICENSE_MODEL_ID = '555';
+	const version = VersionControllerUtilsFactory.build().version;
 
 	it('Load Feature Groups List', () => {
-		const featureGroupsList = [
-			{
-				name: 'fs1',
-				id: 0,
-				description: 'fs1-d',
-				licenseKeyGroupsIds: [1],
-				entitlementPoolsIds: [1],
-				refCount: 0
-			}
-		];
+
+		const featureGroupsList = buildListFromFactory(FeatureGroupStoreFactory);
 		deepFreeze(featureGroupsList);
+
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.featureGroup.featureGroupsList', featureGroupsList);
 
 		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/feature-groups`);
-			expect(data).to.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/feature-groups`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {results: featureGroupsList};
 		});
 
-		return FeatureGroupsActionHelper.fetchFeatureGroupsList(store.dispatch, {licenseModelId: LICENSE_MODEL_ID}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		return FeatureGroupsActionHelper.fetchFeatureGroupsList(store.dispatch, {licenseModelId: LICENSE_MODEL_ID, version}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Delete Feature Group', () => {
-		const featureGroupsList = [
-			{
-				name: 'fs1',
-				id: 0,
-				description: 'fs1-d',
-				licenseKeyGroupsIds: [1],
-				entitlementPoolsIds: [1],
-				refCount: 0
-			}
-		];
+		const featureGroupsList = buildListFromFactory(FeatureGroupStoreFactory, 1);
 		deepFreeze(featureGroupsList);
 		const store = storeCreator({
 			licenseModel: {
@@ -82,10 +63,12 @@
 
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.featureGroup.featureGroupsList', []);
 
+		const idToDelete = featureGroupsList[0].id;
+
 		mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/feature-groups/${featureGroupsList[0].id}`);
-			expect(data).to.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/feature-groups/${idToDelete}`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {
 				results: {
 					returnCode: 'OK'
@@ -95,9 +78,10 @@
 
 		return FeatureGroupsActionHelper.deleteFeatureGroup(store.dispatch, {
 			licenseModelId: LICENSE_MODEL_ID,
-			featureGroupId: featureGroupsList[0].id
+			version,
+			featureGroupId: idToDelete
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
@@ -106,56 +90,62 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const featureGroupPostRequest = {
-			name: 'fs1',
-			description: 'fs1-d',
-			partNumber: '123',
+		const FeatureGroupPostRequest = FeatureGroupPostFactory.build({
 			addedLicenseKeyGroupsIds: [1],
 			addedEntitlementPoolsIds: [1]
-		};
-		const featureGroupToAdd = {
-			name: 'fs1',
-			description: 'fs1-d',
-			partNumber: '123',
+		});
+		const featureGroupToAdd = FeatureGroupDispatchFactory.build({
 			licenseKeyGroupsIds: [1],
 			entitlementPoolsIds: [1]
-		};
+		});
+
 		const featureGroupIdFromResponse = 'ADDED_ID';
-		const featureGroupAfterAdd = {
+		const featureGroupAfterAdd = FeatureGroupStoreFactory.build({
 			...featureGroupToAdd,
 			id: featureGroupIdFromResponse
-		};
+		});
 
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.featureGroup.featureGroupsList', [featureGroupAfterAdd]);
 
-		mockRest.addHandler('create', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/feature-groups`);
-			expect(data).to.deep.equal(featureGroupPostRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('post', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/feature-groups`);
+			expect(data).toEqual(FeatureGroupPostRequest);
+			expect(options).toEqual(undefined);
 			return {
 				returnCode: 'OK',
 				value: featureGroupIdFromResponse
 			};
 		});
 
+		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: []};
+		});
+
+		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: []};
+		});
+
+
 		return FeatureGroupsActionHelper.saveFeatureGroup(store.dispatch, {
 			licenseModelId: LICENSE_MODEL_ID,
+			version,
 			featureGroup: featureGroupToAdd
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Update Feature Group', () => {
-		const featureGroupsList = [{
-			name: 'fs1',
-			id: 0,
-			description: 'fs1-d',
-			partNumber: '123',
+		const featureGroupsList = buildListFromFactory(FeatureGroupStoreFactory, 1, {
 			licenseKeyGroupsIds: [1],
-			entitlementPoolsIds: [1],
-			refCount: 0
-		}];
+			entitlementPoolsIds: [1]
+		});
 		deepFreeze(featureGroupsList);
 
 		const store = storeCreator({
@@ -169,44 +159,92 @@
 
 		const toBeUpdatedFeatureGroupId = featureGroupsList[0].id;
 		const previousFeatureGroupData = featureGroupsList[0];
-		const featureGroupUpdateData = {
-			...featureGroupsList[0],
-			name: 'fs_UPDATED',
-			description: 'description_UPDATED',
-			partNumber: '123_UPDATED',
+
+		const featureGroupUpdateData = FeatureGroupStoreFactory.build({
+			...previousFeatureGroupData,
 			licenseKeyGroupsIds: [7],
 			entitlementPoolsIds: [7]
-		};
+		});
 		deepFreeze(featureGroupUpdateData);
 
-		const featureGroupPutRequest = {
-			name: 'fs_UPDATED',
-			description: 'description_UPDATED',
-			partNumber: '123_UPDATED',
+		const FeatureGroupPutFactoryRequest = FeatureGroupPutFactory.build({
+			name: featureGroupUpdateData.name,
+			description: featureGroupUpdateData.description,
+			partNumber: featureGroupUpdateData.partNumber,
 			addedLicenseKeyGroupsIds: [7],
 			addedEntitlementPoolsIds: [7],
 			removedLicenseKeyGroupsIds: [1],
 			removedEntitlementPoolsIds: [1]
-		};
-		deepFreeze(featureGroupPutRequest);
+		});
+		deepFreeze(FeatureGroupPutFactoryRequest);
 
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.featureGroup.featureGroupsList', [featureGroupUpdateData]);
 
 
-		mockRest.addHandler('save', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/feature-groups/${toBeUpdatedFeatureGroupId}`);
-			expect(data).to.deep.equal(featureGroupPutRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/feature-groups/${toBeUpdatedFeatureGroupId}`);
+			expect(data).toEqual(FeatureGroupPutFactoryRequest);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
+		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: []};
+		});
+
+		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: []};
+		});
+
 		return FeatureGroupsActionHelper.saveFeatureGroup(store.dispatch, {
 			licenseModelId: LICENSE_MODEL_ID,
+			version,
 			previousFeatureGroup: previousFeatureGroupData,
 			featureGroup: featureGroupUpdateData
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
+
+	});
+
+	it('Open Editor', () => {
+
+		const store = storeCreator();
+		deepFreeze(store.getState());
+
+		const editorData = FeatureGroupStoreFactory.build();
+		deepFreeze(editorData);
+		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.featureGroup.featureGroupEditor.data', editorData);
+		const LICENSE_MODEL_ID = '123';
+
+		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/entitlement-pools`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: []};
+		});
+
+		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: []};
+		});
+
+
+		FeatureGroupsActionHelper.openFeatureGroupsEditor(store.dispatch, {featureGroup: editorData, licenseModelId: '123', version});
+		setTimeout(() =>{
+			expect(store.getState()).toEqual(expectedStore);
+		}, 100);
+
+
+
 	});
 
 });
diff --git a/openecomp-ui/test/licenseModel/licenseAgreement/test.js b/openecomp-ui/test/licenseModel/licenseAgreement/test.js
index a6e8a3d..442f7bf 100644
--- a/openecomp-ui/test/licenseModel/licenseAgreement/test.js
+++ b/openecomp-ui/test/licenseModel/licenseAgreement/test.js
@@ -1,75 +1,54 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
-import {expect} from 'chai';
 import deepFreeze from 'deep-freeze';
+import pickBy from 'lodash/pickBy';
 import mockRest from 'test-utils/MockRest.js';
-import {cloneAndSet} from 'test-utils/Util.js';
+import {cloneAndSet, buildListFromFactory} from 'test-utils/Util.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 import LicenseAgreementActionHelper from 'sdc-app/onboarding/licenseModel/licenseAgreement/LicenseAgreementActionHelper.js';
 
+import { LicenseAgreementStoreFactory, LicenseAgreementDispatchFactory, LicenseAgreementPostFactory, LicenseAgreementPutFactory } from 'test-utils/factories/licenseModel/LicenseAgreementFactories.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
 
 describe('License Agreement Module Tests', () => {
 
 	const LICENSE_MODEL_ID = '777';
+	const version = VersionControllerUtilsFactory.build().version;
 
 	it('Load License Agreement List', () => {
-		const licenseAgreementList = [
-			{
-				id: '0',
-				name: 'name0',
-				description: 'description0',
-				licenseTerm: 'licenseTerm0',
-				requirementsAndConstrains: 'req_and_constraints0',
-				featureGroupsIds: ['77']
-			}
-		];
-		deepFreeze(licenseAgreementList);
+		const licenseAgreementList = buildListFromFactory(LicenseAgreementStoreFactory);
+
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseAgreement.licenseAgreementList', licenseAgreementList);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/license-agreements`);
-			expect(data).to.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-agreements`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {results: licenseAgreementList};
 		});
-		return LicenseAgreementActionHelper.fetchLicenseAgreementList(store.dispatch, {licenseModelId: LICENSE_MODEL_ID}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		return LicenseAgreementActionHelper.fetchLicenseAgreementList(store.dispatch, {licenseModelId: LICENSE_MODEL_ID, version}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Delete License Agreement', () => {
-		const licenseAgreementList = [
-			{
-				id: '0',
-				name: 'name0',
-				description: 'description0',
-				licenseTerm: 'licenseTerm0',
-				requirementsAndConstrains: 'req_and_constraints0',
-				featureGroupsIds: ['77']
-			}
-		];
-		deepFreeze(licenseAgreementList);
+		const licenseAgreementList = buildListFromFactory(LicenseAgreementStoreFactory, 1);
 		const store = storeCreator({
 			licenseModel: {
 				licenseAgreement: {
@@ -78,57 +57,49 @@
 			}
 		});
 		deepFreeze(store.getState());
-		const toBeDeletedLicenseAgreementId = '0';
+		const toBeDeletedLicenseAgreementId = licenseAgreementList[0].id;
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseAgreement.licenseAgreementList', []);
 
 		mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/license-agreements/${toBeDeletedLicenseAgreementId}`);
-			expect(data).to.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-agreements/${toBeDeletedLicenseAgreementId}`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 		});
 
 		return LicenseAgreementActionHelper.deleteLicenseAgreement(store.dispatch, {
 			licenseAgreementId: toBeDeletedLicenseAgreementId,
-			licenseModelId: LICENSE_MODEL_ID
+			licenseModelId: LICENSE_MODEL_ID,
+			version
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Add License Agreement', () => {
 		const store = storeCreator();
 		deepFreeze(store.getState());
-		const licenseAgreementPostRequest = {
-			name: 'name_ADDED_LA',
-			description: 'description_ADDED_LA',
-			licenseTerm: 'licenseTerm_ADDED_LA',
-			requirementsAndConstrains: 'req_and_constraints_ADDED_LA',
-			addedFeatureGroupsIds: []
-		};
-		deepFreeze(licenseAgreementPostRequest);
 
-		const licenseAgreementToAdd = {
-			name: 'name_ADDED_LA',
-			description: 'description_ADDED_LA',
-			licenseTerm: 'licenseTerm_ADDED_LA',
-			requirementsAndConstrains: 'req_and_constraints_ADDED_LA',
-			featureGroupsIds: []
-		};
-		deepFreeze(licenseAgreementToAdd);
+		const licenseAgreementToAdd = LicenseAgreementDispatchFactory.build();
+
+		const LicenseAgreementPostRequest = LicenseAgreementPostFactory.build(
+			pickBy(licenseAgreementToAdd, (val, key) => key !== 'featureGroupsIds')
+		);
+
+		deepFreeze(LicenseAgreementPostRequest);
 
 		const licenseAgreementIdFromResponse = 'ADDED_ID';
-		const licenseAgreementAfterAdd = {
+		const licenseAgreementAfterAdd = LicenseAgreementStoreFactory.build({
 			...licenseAgreementToAdd,
 			id: licenseAgreementIdFromResponse
-		};
+		});
 		deepFreeze(licenseAgreementAfterAdd);
 
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseAgreement.licenseAgreementList', [licenseAgreementAfterAdd]);
 
-		mockRest.addHandler('create', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/license-agreements`);
-			expect(data).to.deep.equal(licenseAgreementPostRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('post', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-agreements`);
+			expect(data).toEqual(LicenseAgreementPostRequest);
+			expect(options).toEqual(undefined);
 			return {
 				value: licenseAgreementIdFromResponse
 			};
@@ -136,23 +107,15 @@
 
 		return LicenseAgreementActionHelper.saveLicenseAgreement(store.dispatch, {
 			licenseAgreement: licenseAgreementToAdd,
-			licenseModelId: LICENSE_MODEL_ID
+			licenseModelId: LICENSE_MODEL_ID,
+			version
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Update License Agreement', () => {
-		const licenseAgreementList = [
-			{
-				id: '0',
-				name: 'name0',
-				description: 'description0',
-				licenseTerm: 'licenseTerm0',
-				requirementsAndConstrains: 'req_and_constraints0',
-				featureGroupsIds: ['77']
-			}
-		];
+		const licenseAgreementList = buildListFromFactory(LicenseAgreementStoreFactory, 1, {featureGroupsIds: ['77']});
 		const store = storeCreator({
 			licenseModel: {
 				licenseAgreement: {
@@ -162,43 +125,40 @@
 		});
 		deepFreeze(store.getState());
 
-		const toBeUpdatedLicenseAgreementId = licenseAgreementList[0].id;
 		const previousLicenseAgreementData = licenseAgreementList[0];
+		const toBeUpdatedLicenseAgreementId = previousLicenseAgreementData.id;
+		const oldFeatureGroupIds = previousLicenseAgreementData.featureGroupsIds;
 
-		const licenseAgreementUpdateData = {
-			...licenseAgreementList[0],
-			name: 'name_UPDATED',
-			description: 'description_UPDATED',
-			licenseTerm: 'licenseTerm_UPDATED_LA',
-			requirementsAndConstrains: 'req_and_constraints_UPDATED_LA',
-			featureGroupsIds: ['update_id_1', 'update_id_2']
-		};
+		const newFeatureGroupsIds = ['update_id_1', 'update_id_2'];
+
+		const licenseAgreementUpdateData = LicenseAgreementStoreFactory.build({
+			id: toBeUpdatedLicenseAgreementId,
+			featureGroupsIds: newFeatureGroupsIds
+		});
 		deepFreeze(licenseAgreementUpdateData);
 
-		const licenseAgreementPutRequest = {
-			name: 'name_UPDATED',
-			description: 'description_UPDATED',
-			licenseTerm: 'licenseTerm_UPDATED_LA',
-			requirementsAndConstrains: 'req_and_constraints_UPDATED_LA',
-			addedFeatureGroupsIds: ['update_id_1', 'update_id_2'],
-			removedFeatureGroupsIds: ['77']
-		};
-		deepFreeze(licenseAgreementPutRequest);
+		const LicenseAgreementPutFactoryRequest = LicenseAgreementPutFactory.build({
+			addedFeatureGroupsIds: newFeatureGroupsIds,
+			removedFeatureGroupsIds: oldFeatureGroupIds
+		});
+
+		deepFreeze(LicenseAgreementPutFactoryRequest);
 
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseAgreement.licenseAgreementList', [licenseAgreementUpdateData]);
 
-		mockRest.addHandler('save', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/license-agreements/${toBeUpdatedLicenseAgreementId}`);
-			expect(data).to.deep.equal(licenseAgreementPutRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-agreements/${toBeUpdatedLicenseAgreementId}`);
+			expect(data).toEqual(LicenseAgreementPutFactoryRequest);
+			expect(options).toEqual(undefined);
 		});
 
 		return LicenseAgreementActionHelper.saveLicenseAgreement(store.dispatch, {
 			licenseModelId: LICENSE_MODEL_ID,
+			version,
 			previousLicenseAgreement: previousLicenseAgreementData,
 			licenseAgreement: licenseAgreementUpdateData
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
diff --git a/openecomp-ui/test/licenseModel/licenseKeyGroups/test.js b/openecomp-ui/test/licenseModel/licenseKeyGroups/test.js
index 944bd44..dd09030 100644
--- a/openecomp-ui/test/licenseModel/licenseKeyGroups/test.js
+++ b/openecomp-ui/test/licenseModel/licenseKeyGroups/test.js
@@ -1,44 +1,36 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
-import {expect} from 'chai';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
-import {cloneAndSet} from 'test-utils/Util.js';
+import {cloneAndSet, buildListFromFactory} from 'test-utils/Util.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
+import {LicenseKeyGroupStoreFactory, LicenseKeyGroupPostFactory} from 'test-utils/factories/licenseModel/LicenseKeyGroupFactories.js';
 
 import LicenseKeyGroupsActionHelper from 'sdc-app/onboarding/licenseModel/licenseKeyGroups/LicenseKeyGroupsActionHelper.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
 
 describe('License Key Groups Module Tests', function () {
 
 	const LICENSE_MODEL_ID = '555';
+	const version = VersionControllerUtilsFactory.build().version;
+
 	it('Load License Key Group', () => {
-		const licenseKeyGroupsList = [
-			{
-				name: 'lsk1',
-				description: 'string',
-				type: 'Unique',
-				operationalScope: {'choices': ['Data_Center'], 'other': ''},
-				id: '0'
-			}
-		];
+
+		const licenseKeyGroupsList = buildListFromFactory(LicenseKeyGroupStoreFactory);
+
 		deepFreeze(licenseKeyGroupsList);
 		const store = storeCreator();
 		deepFreeze(store.getState());
@@ -46,27 +38,21 @@
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseKeyGroup.licenseKeyGroupsList', licenseKeyGroupsList);
 
 		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/license-key-groups`);
-			expect(data).to.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {results: licenseKeyGroupsList};
 		});
 
-		return LicenseKeyGroupsActionHelper.fetchLicenseKeyGroupsList(store.dispatch, {licenseModelId: LICENSE_MODEL_ID}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		return LicenseKeyGroupsActionHelper.fetchLicenseKeyGroupsList(store.dispatch, {licenseModelId: LICENSE_MODEL_ID, version}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Delete License Key Group', () => {
-		const licenseKeyGroupsList = [
-			{
-				name: 'lsk1',
-				description: 'string',
-				type: 'Unique',
-				operationalScope: {'choices': ['Data_Center'], 'other': ''},
-				id: '0'
-			}
-		];
+
+		const licenseKeyGroupsList = buildListFromFactory(LicenseKeyGroupStoreFactory, 1);
+
 		deepFreeze(licenseKeyGroupsList);
 		const store = storeCreator({
 			licenseModel: {
@@ -76,20 +62,21 @@
 			}
 		});
 		deepFreeze(store.getState());
-		const toBeDeletedLicenseKeyGroupId = '0';
+		const toBeDeletedLicenseKeyGroupId = licenseKeyGroupsList[0].id;
 		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseKeyGroup.licenseKeyGroupsList', []);
 
 		mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/license-key-groups/${toBeDeletedLicenseKeyGroupId}`);
-			expect(data).to.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups/${toBeDeletedLicenseKeyGroupId}`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 		});
 
 		return LicenseKeyGroupsActionHelper.deleteLicenseKeyGroup(store.dispatch, {
 			licenseKeyGroupId: toBeDeletedLicenseKeyGroupId,
-			licenseModelId: LICENSE_MODEL_ID
+			licenseModelId: LICENSE_MODEL_ID,
+			version
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
@@ -98,56 +85,34 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const licenseKeyGroupPostRequest = {
-			name: 'lsk1_ADDED',
-			description: 'string_ADDED',
-			type: 'Unique_ADDED',
-			operationalScope: {'choices': ['Data_Center'], 'other': ''}
-		};
-		deepFreeze(licenseKeyGroupPostRequest);
+		const LicenseKeyGroupPost = LicenseKeyGroupPostFactory.build();
+		deepFreeze(LicenseKeyGroupPost);
 
-		const licenseKeyGroupToAdd = {
-			...licenseKeyGroupPostRequest
-		};
+		const LicenseKeyGroupStore = LicenseKeyGroupStoreFactory.build();
+		deepFreeze(LicenseKeyGroupStore);
 
-		deepFreeze(licenseKeyGroupToAdd);
+		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseKeyGroup.licenseKeyGroupsList', [LicenseKeyGroupStore]);
 
-		const licenseKeyGroupIdFromResponse = 'ADDED_ID';
-		const licenseKeyGroupAfterAdd = {
-			...licenseKeyGroupToAdd,
-			id: licenseKeyGroupIdFromResponse
-		};
-		deepFreeze(licenseKeyGroupAfterAdd);
-
-		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseKeyGroup.licenseKeyGroupsList', [licenseKeyGroupAfterAdd]);
-
-		mockRest.addHandler('create', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/license-key-groups`);
-			expect(data).to.deep.equal(licenseKeyGroupPostRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('post', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups`);
+			expect(data).toEqual(LicenseKeyGroupPost);
+			expect(options).toEqual(undefined);
 			return {
-				value: licenseKeyGroupIdFromResponse
+				value: LicenseKeyGroupStore.id
 			};
 		});
 
 		return LicenseKeyGroupsActionHelper.saveLicenseKeyGroup(store.dispatch, {
-			licenseKeyGroup: licenseKeyGroupToAdd,
-			licenseModelId: LICENSE_MODEL_ID
+			licenseKeyGroup: LicenseKeyGroupPost,
+			licenseModelId: LICENSE_MODEL_ID,
+			version
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Update License Key Group', () => {
-		const licenseKeyGroupsList = [
-			{
-				name: 'lsk1',
-				description: 'string',
-				type: 'Unique',
-				operationalScope: {'choices': ['Data_Center'], 'other': ''},
-				id: '0'
-			}
-		];
+		const licenseKeyGroupsList = buildListFromFactory(LicenseKeyGroupStoreFactory, 1);
 		deepFreeze(licenseKeyGroupsList);
 		const store = storeCreator({
 			licenseModel: {
@@ -160,37 +125,35 @@
 		const toBeUpdatedLicenseKeyGroupId = licenseKeyGroupsList[0].id;
 		const previousLicenseKeyGroupData = licenseKeyGroupsList[0];
 
-		const licenseKeyGroupUpdateData = {
-			...licenseKeyGroupsList[0],
+		const licenseKeyGroupUpdatedData = LicenseKeyGroupPostFactory.build({
 			name: 'lsk1_UPDATE',
 			description: 'string_UPDATE',
-			type: 'Unique',
-			operationalScope: {'choices': ['Data_Center'], 'other': ''}
-		};
-		deepFreeze(licenseKeyGroupUpdateData);
+			id: toBeUpdatedLicenseKeyGroupId
+		});
+		deepFreeze(licenseKeyGroupUpdatedData);
 
-		const licenseKeyGroupPutRequest = {
+		const licenseKeyGroupPutRequest = LicenseKeyGroupPostFactory.build({
 			name: 'lsk1_UPDATE',
-			description: 'string_UPDATE',
-			type: 'Unique',
-			operationalScope: {'choices': ['Data_Center'], 'other': ''}
-		};
+			description: 'string_UPDATE'
+		});
+
 		deepFreeze(licenseKeyGroupPutRequest);
 
-		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseKeyGroup.licenseKeyGroupsList', [licenseKeyGroupUpdateData]);
+		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.licenseKeyGroup.licenseKeyGroupsList', [licenseKeyGroupUpdatedData]);
 
-		mockRest.addHandler('save', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/license-key-groups/${toBeUpdatedLicenseKeyGroupId}`);
-			expect(data).to.deep.equal(licenseKeyGroupPutRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${LICENSE_MODEL_ID}/versions/${version.id}/license-key-groups/${toBeUpdatedLicenseKeyGroupId}`);
+			expect(data).toEqual(licenseKeyGroupPutRequest);
+			expect(options).toEqual(undefined);
 		});
 
 		return LicenseKeyGroupsActionHelper.saveLicenseKeyGroup(store.dispatch, {
 			previousLicenseKeyGroup: previousLicenseKeyGroupData,
-			licenseKeyGroup: licenseKeyGroupUpdateData,
-			licenseModelId: LICENSE_MODEL_ID
+			licenseKeyGroup: licenseKeyGroupUpdatedData,
+			licenseModelId: LICENSE_MODEL_ID,
+			version
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
diff --git a/openecomp-ui/test/licenseModel/overview/listItems/EntitlementPool.test.js b/openecomp-ui/test/licenseModel/overview/listItems/EntitlementPool.test.js
new file mode 100644
index 0000000..6c4a05e
--- /dev/null
+++ b/openecomp-ui/test/licenseModel/overview/listItems/EntitlementPool.test.js
@@ -0,0 +1,31 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import EntitlementPool from 'src/sdc-app/onboarding/licenseModel/overview/listItems/EntitlementPool.jsx';
+import {EntitlementPoolListItemFactory} from 'test-utils/factories/licenseModel/EntitlementPoolFactories.js';
+
+describe('Entitlement Pool List Item Module Tests', function () {
+	it('Entitlement Pool List Item should exist', () => {
+		expect(EntitlementPool).toBeTruthy();
+	});
+	it('renders Entitlement Pool List Item', () => {
+		const epData =  EntitlementPoolListItemFactory.build();
+		const itemView = TestUtils.renderIntoDocument( <EntitlementPool epData={epData} /> );
+		expect(itemView).toBeTruthy();
+	});
+});
diff --git a/openecomp-ui/test/licenseModel/overview/listItems/FeatureGroup.test.js b/openecomp-ui/test/licenseModel/overview/listItems/FeatureGroup.test.js
new file mode 100644
index 0000000..10b7801
--- /dev/null
+++ b/openecomp-ui/test/licenseModel/overview/listItems/FeatureGroup.test.js
@@ -0,0 +1,58 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import FeatureGroup from 'src/sdc-app/onboarding/licenseModel/overview/listItems/FeatureGroup.jsx';
+import {scryRenderedDOMComponentsWithTestId} from 'test-utils/Util.js';
+import {FeatureGroupListItemFactory} from 'test-utils/factories/licenseModel/FeatureGroupFactories.js';
+import {EntitlementPoolListItemFactory} from 'test-utils/factories/licenseModel/EntitlementPoolFactories.js';
+import {LicenseKeyGroupListItemFactory} from 'test-utils/factories/licenseModel/LicenseKeyGroupFactories.js';
+
+describe('Feature Group List Item Module Tests', function () {
+	it('Feature Group List Item should exist', () => {
+		expect(FeatureGroup).toBeTruthy();
+	});
+
+	it('renders Feature Group List Item Collapsed', () => {
+		const fgData =  FeatureGroupListItemFactory.build();
+		const itemView = TestUtils.renderIntoDocument( <FeatureGroup fgData={fgData} /> );
+		expect(itemView).toBeTruthy();
+		const elem = TestUtils.scryRenderedDOMComponentsWithClass(itemView,'down');
+		expect(elem).toBeTruthy();
+	});
+
+	it('renders Feature Group List Item Expanded', () => {
+		const fgData =  FeatureGroupListItemFactory.build({isCollpased: false});
+		const itemView = TestUtils.renderIntoDocument( <FeatureGroup fgData={fgData} /> );
+		expect(itemView).toBeTruthy();
+		const elem = TestUtils.scryRenderedDOMComponentsWithClass(itemView,'right');
+		expect(elem).toBeTruthy();
+	});
+
+	it('renders Feature Group List Item with Children Count', () => {
+		const children = [EntitlementPoolListItemFactory.build(), LicenseKeyGroupListItemFactory.build()];
+		const fgData =  FeatureGroupListItemFactory.build({children: children, isCollpased: false});
+		const itemView = TestUtils.renderIntoDocument( <FeatureGroup fgData={fgData} /> );
+		expect(itemView).toBeTruthy();
+		let elem = scryRenderedDOMComponentsWithTestId(itemView,'vlm-list-ep-count-value');
+		expect(elem).toBeTruthy();
+		expect(elem[0].innerHTML).toBe('1');
+		elem = scryRenderedDOMComponentsWithTestId(itemView,'vlm-list-lkg-count-value');
+		expect(elem).toBeTruthy();
+		expect(elem[0].innerHTML).toBe('1');
+	});
+});
diff --git a/openecomp-ui/test/licenseModel/overview/listItems/LicenseAgreement.test.js b/openecomp-ui/test/licenseModel/overview/listItems/LicenseAgreement.test.js
new file mode 100644
index 0000000..608a769
--- /dev/null
+++ b/openecomp-ui/test/licenseModel/overview/listItems/LicenseAgreement.test.js
@@ -0,0 +1,54 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import LicenseAgreement from 'src/sdc-app/onboarding/licenseModel/overview/listItems/LicenseAgreement.jsx';
+import {scryRenderedDOMComponentsWithTestId} from 'test-utils/Util.js';
+import {LicenseAgreementListItemFactory} from 'test-utils/factories/licenseModel/LicenseAgreementFactories.js';
+import {FeatureGroupListItemFactory} from 'test-utils/factories/licenseModel/FeatureGroupFactories.js';
+
+describe('License Agreement List Item Module Tests', function () {
+	it('License Agreement List Item should exist', () => {
+		expect(LicenseAgreement).toBeTruthy();
+	});
+
+	it('renders License Agreement List Item Collapsed', () => {
+		const laData =  LicenseAgreementListItemFactory.build();
+		const itemView = TestUtils.renderIntoDocument( <LicenseAgreement laData={laData} /> );
+		expect(itemView).toBeTruthy();
+		const elem = TestUtils.scryRenderedDOMComponentsWithClass(itemView,'down');
+		expect(elem).toBeTruthy();
+	});
+
+	it('renders License Agreement List Item Expanded', () => {
+		const laData =  LicenseAgreementListItemFactory.build({isCollpased: false});
+		const itemView = TestUtils.renderIntoDocument( <LicenseAgreement laData={laData} /> );
+		expect(itemView).toBeTruthy();
+		const elem = TestUtils.scryRenderedDOMComponentsWithClass(itemView,'right');
+		expect(elem).toBeTruthy();
+	});
+
+	it('renders License Agreement List Item with Children Count', () => {
+		const fgData =  FeatureGroupListItemFactory.build();
+		const laData =  LicenseAgreementListItemFactory.build({children: [fgData]});
+		const itemView = TestUtils.renderIntoDocument( <LicenseAgreement laData={laData} /> );
+		expect(itemView).toBeTruthy();
+		const elem = scryRenderedDOMComponentsWithTestId(itemView,'vlm-list-fg-count-value');
+		expect(elem).toBeTruthy();
+		expect(elem[0].innerHTML).toBe('1');
+	});
+});
diff --git a/openecomp-ui/test/licenseModel/overview/listItems/LicenseKeyGroup.test.js b/openecomp-ui/test/licenseModel/overview/listItems/LicenseKeyGroup.test.js
new file mode 100644
index 0000000..b9c097b
--- /dev/null
+++ b/openecomp-ui/test/licenseModel/overview/listItems/LicenseKeyGroup.test.js
@@ -0,0 +1,31 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import LicenseKeyGroup from 'src/sdc-app/onboarding/licenseModel/overview/listItems/LicenseKeyGroup.jsx';
+import {LicenseKeyGroupListItemFactory} from 'test-utils/factories/licenseModel/LicenseKeyGroupFactories.js';
+
+describe('LicenseKeyGroup List Item Module Tests', function () {
+	it('LicenseKeyGroup List Item should exist', () => {
+		expect(LicenseKeyGroup).toBeTruthy();
+	});
+	it('renders LicenseKeyGroup List Item', () => {
+		const lkgData =  LicenseKeyGroupListItemFactory.build();
+		const itemView = TestUtils.renderIntoDocument( <LicenseKeyGroup lkgData={lkgData} /> );
+		expect(itemView).toBeTruthy();
+	});
+});
diff --git a/openecomp-ui/test/licenseModel/overview/summary/SummaryCountList.test.js b/openecomp-ui/test/licenseModel/overview/summary/SummaryCountList.test.js
new file mode 100644
index 0000000..27f7aa6
--- /dev/null
+++ b/openecomp-ui/test/licenseModel/overview/summary/SummaryCountList.test.js
@@ -0,0 +1,87 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+
+import {mapStateToProps, SummaryCountList} from 'sdc-app/onboarding/licenseModel/overview/summary/SummaryCountList.js';
+import LicenseModelDescriptionEdit from 'sdc-app/onboarding/licenseModel/overview/summary/LicenseModelDescriptionEdit.jsx';
+import {overviewItems} from 'sdc-app/onboarding/licenseModel/overview/LicenseModelOverviewConstants.js';
+import {LicenseModelOverviewFactory, LicenseModelStoreFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
+
+describe('License Model Overview Summary Count List module test', () => {
+
+	it('should mapper exist', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it('mapper data return test',() => {
+
+		var obj = {
+			licenseModel: LicenseModelOverviewFactory.build({
+				entitlementPool: {
+					entitlementPoolsList: []
+				},
+				licenseAgreement: {
+					licenseAgreementList: []
+				},
+				featureGroup: {
+					featureGroupsList: []
+				},
+				licenseKeyGroup: {
+					licenseKeyGroupsList: []
+				}
+			})
+		};
+
+		let counts = [
+			{name: overviewItems.LICENSE_AGREEMENTS, count: 0},
+			{name: overviewItems.FEATURE_GROUPS, count: 0},
+			{name: overviewItems.ENTITLEMENT_POOLS, count: 0},
+			{name: overviewItems.LICENSE_KEY_GROUPS, count: 0},
+		];
+
+		var result = mapStateToProps(obj);
+		expect(result.isReadOnlyMode).toEqual(true);
+		expect(result.description).toEqual(obj.licenseModel.licenseModelEditor.data.description);
+		expect(result.counts).toEqual(counts);
+	});
+
+	it('jsx view test', () => {
+
+		var counts = [
+			{name: overviewItems.LICENSE_AGREEMENTS, count: 0},
+			{name: overviewItems.FEATURE_GROUPS, count: 0},
+			{name: overviewItems.ENTITLEMENT_POOLS, count: 0},
+			{name: overviewItems.LICENSE_KEY_GROUPS, count: 0},
+		];
+
+		var view = TestUtils.renderIntoDocument(<SummaryCountList counts={counts} licenseModelId='1' isReadOnlyMode={false}/>);
+		expect(view).toBeTruthy();
+	});
+
+	it('description editor jsx view test', () => {
+		var data = LicenseModelStoreFactory.build();
+		var genericFieldInfo = {
+			description: {
+				isValid : true
+			}
+		}
+		var view = TestUtils.renderIntoDocument(<LicenseModelDescriptionEdit data={data} genericFieldInfo={genericFieldInfo} description='desc'/>);
+		expect(view).toBeTruthy();
+	});
+
+});
diff --git a/openecomp-ui/test/licenseModel/overview/summary/VendorDataView.test.js b/openecomp-ui/test/licenseModel/overview/summary/VendorDataView.test.js
new file mode 100644
index 0000000..8fea3e4
--- /dev/null
+++ b/openecomp-ui/test/licenseModel/overview/summary/VendorDataView.test.js
@@ -0,0 +1,48 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {mapStateToProps, VendorDataView} from 'sdc-app/onboarding/licenseModel/overview/summary/VendorDataView.js';
+import {LicenseModelOverviewFactory, LicenseModelStoreFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
+
+
+describe('License Model Overview Summary module test', () => {
+
+	it('should mapper exist', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it('mapper data return test',() => {
+
+		var state = {
+			licenseModel: LicenseModelOverviewFactory.build()
+		};
+
+		var props = mapStateToProps(state);
+		expect(props.isReadOnlyMode).toEqual(true);
+		expect(props.description).toEqual(null);
+		expect(props.data).toEqual(state.licenseModel.licenseModelEditor.data);
+
+	});
+
+	it('jsx view test', () => {
+		var data = LicenseModelStoreFactory.build();
+		var view = TestUtils.renderIntoDocument(<VendorDataView isReadOnlyMode={false} description='' data={data} />);
+		expect(view).toBeTruthy();
+	});
+
+});
diff --git a/openecomp-ui/test/licenseModel/overview/test.js b/openecomp-ui/test/licenseModel/overview/test.js
new file mode 100644
index 0000000..c78c3e4
--- /dev/null
+++ b/openecomp-ui/test/licenseModel/overview/test.js
@@ -0,0 +1,355 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import {mapStateToProps} from 'sdc-app/onboarding/licenseModel/overview/LicenseModelOverview.js';
+import {overviewEditorHeaders, selectedButton} from 'sdc-app/onboarding/licenseModel/overview/LicenseModelOverviewConstants.js';
+
+import {LicenseModelOverviewFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
+import { EntitlementPoolStoreFactory as EntitlementPool, EntitlementPoolDataListFactory } from 'test-utils/factories/licenseModel/EntitlementPoolFactories.js';
+import { FeatureGroupStoreFactory as FeatureGroup, FeatureGroupDataListFactory} from 'test-utils/factories/licenseModel/FeatureGroupFactories.js';
+import {LicenseAgreementStoreFactory as LicenseAgreement, LicenseAgreementDataListFactory} from 'test-utils/factories/licenseModel/LicenseAgreementFactories.js';
+import { LicenseKeyGroupStoreFactory as LicenseKeyGroup, LicenseKeyGroupDataListFactory} from 'test-utils/factories/licenseModel/LicenseKeyGroupFactories.js';
+
+describe('License Model Overview: ', function () {
+
+	it('should mapper exist', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	const VLM1 = LicenseModelOverviewFactory.build();
+
+	it('should mapper return vlm overview basic data', () => {
+		const state = {
+			licenseModel: VLM1
+		};
+
+		var props = mapStateToProps(state);
+		expect(props.isReadOnlyMode).toEqual(true);
+		expect(props.isDisplayModal).toEqual(false);
+		expect(props.modalHeader).toEqual(undefined);
+		expect(props.licenseModelId).toEqual(VLM1.licenseModelEditor.data.id);
+		expect(props.licensingDataList).toEqual([]);
+		expect(props.selectedTab).toEqual(selectedButton.VLM_LIST_VIEW);
+	});
+
+	it('should mapper return overview data for show LA modal', () => {
+		const VLM1 = LicenseModelOverviewFactory.build({
+			licenseAgreement: {
+				licenseAgreementEditor: {
+					data: LicenseAgreement.build()
+				}
+			}
+		});
+
+		var state = {
+			licenseModel: VLM1
+		};
+
+		var props = mapStateToProps(state);
+		expect(props.isReadOnlyMode).toEqual(true);
+		expect(props.isDisplayModal).toEqual(true);
+		expect(props.modalHeader).toEqual(overviewEditorHeaders.LICENSE_AGREEMENT);
+		expect(props.licenseModelId).toEqual(VLM1.licenseModelEditor.data.id);
+		expect(props.licensingDataList).toEqual([]);
+		expect(props.selectedTab).toEqual(selectedButton.VLM_LIST_VIEW);
+	});
+
+	it('should mapper return overview data for show FG modal', () => {
+
+		const VLM1 = LicenseModelOverviewFactory.build({
+			featureGroup: {
+				featureGroupsList: [],
+				featureGroupEditor: {
+					data: FeatureGroup.build()
+				}
+			},
+			entitlementPool: {
+				entitlementPoolsList: []
+			},
+			licenseKeyGroup: {
+				licenseKeyGroupsList: []
+			},
+			licenseModelOverview: {
+				selectedTab: selectedButton.NOT_IN_USE
+			}
+		});
+
+		var state = {
+			licenseModel: VLM1
+		};
+
+		var props = mapStateToProps(state);
+		expect(props.isReadOnlyMode).toEqual(true);
+		expect(props.isDisplayModal).toEqual(true);
+		expect(props.modalHeader).toEqual(overviewEditorHeaders.FEATURE_GROUP);
+		expect(props.licenseModelId).toEqual(VLM1.licenseModelEditor.data.id);
+		expect(props.licensingDataList).toEqual([]);
+		expect(props.selectedTab).toEqual(selectedButton.NOT_IN_USE);
+	});
+
+	it('should mapper return overview data for show EP modal', () => {
+		const VLM1 = LicenseModelOverviewFactory.build({
+			entitlementPool: {
+				entitlementPoolEditor: {
+					data: EntitlementPool.build()
+				}
+			}
+		});
+
+		var state = {
+			licenseModel: VLM1
+		};
+
+		var props = mapStateToProps(state);
+		expect(props.isReadOnlyMode).toEqual(true);
+		expect(props.isDisplayModal).toEqual(true);
+		expect(props.modalHeader).toEqual(overviewEditorHeaders.ENTITLEMENT_POOL);
+		expect(props.licenseModelId).toEqual(VLM1.licenseModelEditor.data.id);
+		expect(props.licensingDataList).toEqual([]);
+		expect(props.selectedTab).toEqual(selectedButton.VLM_LIST_VIEW);
+	});
+
+	it('should mapper return overview data for show LKG modal', () => {
+		const VLM1 = LicenseModelOverviewFactory.build({
+			licenseKeyGroup: {
+				licenseKeyGroupsList: [],
+				licenseKeyGroupsEditor: {
+					data: LicenseKeyGroup.build()
+				}
+			},
+			entitlementPool: {
+				entitlementPoolsList: []
+			},
+			featureGroup: {
+				featureGroupsList: []
+			},
+			licenseModelOverview: {
+				selectedTab: selectedButton.NOT_IN_USE
+			}
+		});
+
+		var state = {
+			licenseModel: VLM1
+		};
+
+		var props = mapStateToProps(state);
+		expect(props.isReadOnlyMode).toEqual(true);
+		expect(props.isDisplayModal).toEqual(true);
+		expect(props.modalHeader).toEqual(overviewEditorHeaders.LICENSE_KEY_GROUP);
+		expect(props.licenseModelId).toEqual(VLM1.licenseModelEditor.data.id);
+		expect(props.licensingDataList).toEqual([]);
+		expect(props.selectedTab).toEqual(selectedButton.NOT_IN_USE);
+	});
+
+	it('should mapper return overview data for Full-hierarchy list view', () => {
+		let EP1 = EntitlementPool.build();
+		let LKG1 = LicenseKeyGroup.build();
+		let FG1 = FeatureGroup.build({
+			entitlementPoolsIds: [EP1.id],
+			licenseKeyGroupsIds: [LKG1.id]
+		});
+		EP1.referencingFeatureGroups = [FG1.id];
+		LKG1.referencingFeatureGroups = [FG1.id];
+		let LA1 = LicenseAgreement.build({
+			featureGroupsIds: [FG1.id]
+		});
+		FG1.referencingLicenseAgreements = LA1.id;
+		let LA2 = LicenseAgreement.build();
+
+		const VLM1 = LicenseModelOverviewFactory.build({
+			licenseAgreement: {
+				licenseAgreementList: [LA1, LA2]
+			},
+			featureGroup: {
+				featureGroupsList: [FG1]
+			},
+			entitlementPool: {
+				entitlementPoolsList: [EP1]
+			},
+			licenseKeyGroup: {
+				licenseKeyGroupsList: [LKG1]
+			},
+		});
+
+		const state = {
+			licenseModel: VLM1
+		};
+
+		const expectedLicensingDataList = [
+			LicenseAgreementDataListFactory.build({
+				...LA1,
+				children: [
+					FeatureGroupDataListFactory.build({
+						...FG1,
+						children: [
+							EntitlementPoolDataListFactory.build(EP1),
+							LicenseKeyGroupDataListFactory.build(LKG1)
+						]
+					})
+				]
+			}),
+			LicenseAgreementDataListFactory.build(LA2)
+		];
+
+		var props = mapStateToProps(state);
+
+		expect(props.isReadOnlyMode).toEqual(true);
+		expect(props.isDisplayModal).toEqual(false);
+		expect(props.modalHeader).toEqual(undefined);
+		expect(props.licenseModelId).toEqual(VLM1.licenseModelEditor.data.id);
+		expect(props.licensingDataList).toEqual(expectedLicensingDataList);
+		expect(props.selectedTab).toEqual(selectedButton.VLM_LIST_VIEW);
+	});
+
+	it('should mapper return overview data for list view with 2 levels', () => {
+		let EP1 = EntitlementPool.build();
+		let LKG1 = LicenseKeyGroup.build();
+		let FG1 = FeatureGroup.build();
+		let LA1 = LicenseAgreement.build({
+			featureGroupsIds: [FG1.id]
+		});
+		let LA2 = LicenseAgreement.build();
+		FG1.referencingLicenseAgreements = [LA1.id];
+
+		const VLM1 = LicenseModelOverviewFactory.build({
+			licenseAgreement: {
+				licenseAgreementList: [LA1, LA2]
+			},
+			featureGroup: {
+				featureGroupsList: [FG1]
+			},
+			entitlementPool: {
+				entitlementPoolsList: [EP1]
+			},
+			licenseKeyGroup: {
+				licenseKeyGroupsList: [LKG1]
+			},
+		});
+
+		const state = {
+			licenseModel: VLM1
+		};
+
+		const expectedLicensingDataList = [
+			LicenseAgreementDataListFactory.build({
+				...LA1,
+				children: [
+					FeatureGroupDataListFactory.build(FG1)
+				]
+			}),
+			LicenseAgreementDataListFactory.build(LA2)
+		];
+
+		var props = mapStateToProps(state);
+
+		expect(props.isReadOnlyMode).toEqual(true);
+		expect(props.isDisplayModal).toEqual(false);
+		expect(props.modalHeader).toEqual(undefined);
+		expect(props.licenseModelId).toEqual(VLM1.licenseModelEditor.data.id);
+		expect(props.licensingDataList).toEqual(expectedLicensingDataList);
+		expect(props.selectedTab).toEqual(selectedButton.VLM_LIST_VIEW);
+	});
+
+	it('should mapper return overview data for Full NOT-IN-USE list view', () => {
+		let EP1 = EntitlementPool.build();
+		let LKG1 = LicenseKeyGroup.build();
+		let FG1 = FeatureGroup.build();
+
+		const VLM1 = LicenseModelOverviewFactory.build({
+			licenseAgreement: { licenseAgreementList: [] },
+			featureGroup: {
+				featureGroupsList: [FG1]
+			},
+			entitlementPool: {
+				entitlementPoolsList: [EP1]
+			},
+			licenseKeyGroup: {
+				licenseKeyGroupsList: [LKG1]
+			},
+			licenseModelOverview: {
+				selectedTab: selectedButton.NOT_IN_USE
+			}
+		});
+
+		const state = {
+			licenseModel: VLM1
+		};
+
+		const expectedLicensingDataList = [
+			FeatureGroupDataListFactory.build(FG1),
+			EntitlementPoolDataListFactory.build(EP1),
+			LicenseKeyGroupDataListFactory.build(LKG1)
+		];
+
+		var props = mapStateToProps(state);
+
+		expect(props.isReadOnlyMode).toEqual(true);
+		expect(props.isDisplayModal).toEqual(false);
+		expect(props.modalHeader).toEqual(undefined);
+		expect(props.licenseModelId).toEqual(VLM1.licenseModelEditor.data.id);
+		expect(props.licensingDataList).toEqual(expectedLicensingDataList);
+		expect(props.selectedTab).toEqual(selectedButton.NOT_IN_USE);
+	});
+
+	it('should mapper return overview data for NOT-IN-USE list view (FG with children)', () => {
+		let EP1 = EntitlementPool.build();
+		let LKG1 = LicenseKeyGroup.build();
+		let FG1 = FeatureGroup.build({
+			entitlementPoolsIds: [EP1.id],
+			licenseKeyGroupsIds: [LKG1.id]
+		});
+		EP1.referencingFeatureGroups = [FG1.id];
+		LKG1.referencingFeatureGroups = [FG1.id];
+
+		const VLM1 = LicenseModelOverviewFactory.build({
+			licenseAgreement: { licenseAgreementList: [] },
+			featureGroup: {
+				featureGroupsList: [FG1]
+			},
+			entitlementPool: {
+				entitlementPoolsList: [EP1]
+			},
+			licenseKeyGroup: {
+				licenseKeyGroupsList: [LKG1]
+			},
+			licenseModelOverview: {
+				selectedTab: selectedButton.NOT_IN_USE
+			}
+		});
+
+		const state = {
+			licenseModel: VLM1
+		};
+
+		const expectedLicensingDataList = [
+			FeatureGroupDataListFactory.build({
+				...FG1,
+				children: [
+					EntitlementPoolDataListFactory.build(EP1),
+					LicenseKeyGroupDataListFactory.build(LKG1)]
+			})
+		];
+
+		var props = mapStateToProps(state);
+
+		expect(props.isReadOnlyMode).toEqual(true);
+		expect(props.isDisplayModal).toEqual(false);
+		expect(props.modalHeader).toEqual(undefined);
+		expect(props.licenseModelId).toEqual(VLM1.licenseModelEditor.data.id);
+		expect(props.licensingDataList).toEqual(expectedLicensingDataList);
+		expect(props.selectedTab).toEqual(selectedButton.NOT_IN_USE);
+	});
+});
diff --git a/openecomp-ui/test/licenseModel/overview/views.test.js b/openecomp-ui/test/licenseModel/overview/views.test.js
new file mode 100644
index 0000000..4a38afc
--- /dev/null
+++ b/openecomp-ui/test/licenseModel/overview/views.test.js
@@ -0,0 +1,159 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {scryRenderedDOMComponentsWithTestId} from 'test-utils/Util.js';
+import SummaryView from 'sdc-app/onboarding/licenseModel/overview/SummaryView.jsx';
+import LicenseModelOverviewView from 'sdc-app/onboarding/licenseModel/overview/LicenseModelOverviewView.jsx';
+import VLMListView from 'sdc-app/onboarding/licenseModel/overview/VLMListView.jsx';
+import {selectedButton} from 'sdc-app/onboarding/licenseModel/overview/LicenseModelOverviewConstants.js';
+
+import {FeatureGroupListItemFactory} from 'test-utils/factories/licenseModel/FeatureGroupFactories.js';
+import {EntitlementPoolListItemFactory} from 'test-utils/factories/licenseModel/EntitlementPoolFactories.js';
+import {LicenseKeyGroupListItemFactory} from 'test-utils/factories/licenseModel/LicenseKeyGroupFactories.js';
+import {LicenseAgreementListItemFactory} from 'test-utils/factories/licenseModel/LicenseAgreementFactories.js';
+
+describe('License Model Overview - View: ', function () {
+
+	const lkgChild = LicenseKeyGroupListItemFactory.build();
+
+	const epChild = EntitlementPoolListItemFactory.build();
+
+	const baseFGData =  FeatureGroupListItemFactory.build({isCollapsed: false});
+	const baseLAData =  LicenseAgreementListItemFactory.build({isCollapse: false});
+
+	it('should render SummaryView', () => {
+		var renderer = TestUtils.createRenderer();
+		renderer.render(
+			<SummaryView />
+		);
+		let renderedOutput = renderer.getRenderOutput();
+		expect(renderedOutput).toBeTruthy();
+	});
+
+	it('should render LicenseModelOverviewView', () => {
+		let fgData = {...baseFGData};
+		fgData.children = Array.of(epChild, lkgChild);
+		let laData = {...baseLAData};
+		laData.children = [fgData];
+
+		const params = {
+			licenseModelId: 'VLM1',
+			isDisplayModal: false,
+			modalHeader: undefined,
+			licensingDataList: [laData],
+			selectedTab: selectedButton.VLM_LIST_VIEW,
+			onTabSelect: () => {}
+		};
+		var renderer = TestUtils.createRenderer();
+		renderer.render(
+			<LicenseModelOverviewView {...params}/>
+		);
+		let renderedOutput = renderer.getRenderOutput();
+		expect(renderedOutput).toBeTruthy();
+	});
+
+
+	it('should render empty VLMListView', () => {
+		const listview = TestUtils.renderIntoDocument( <VLMListView /> );
+		expect(listview).toBeTruthy();
+		const elem = scryRenderedDOMComponentsWithTestId(listview,'vlm-list');
+		expect(elem).toBeTruthy();
+		expect(elem[0].children.length).toBe(0);
+	});
+
+	it('should render VLMListView with licenseAgreement', () => {
+		const listview = TestUtils.renderIntoDocument( <VLMListView licensingDataList={[baseLAData]}/> );
+		expect(listview).toBeTruthy();
+		let elem = scryRenderedDOMComponentsWithTestId(listview,'vlm-list');
+		expect(elem).toBeTruthy();
+		expect(elem[0].children.length).toBe(1);
+		elem = scryRenderedDOMComponentsWithTestId(listview,'vlm-list-la-item');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+	});
+
+	it('should render VLMListView with Feature Group', () => {
+		let laData = {...baseLAData};
+		laData.children = [baseFGData];
+		const listview = TestUtils.renderIntoDocument( <VLMListView licensingDataList={[laData]}/> );
+		expect(listview).toBeTruthy();
+		const elem = scryRenderedDOMComponentsWithTestId(listview,'vlm-list-item-fg');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+	});
+
+	it('should render VLMListView with Entitlement Pool', () => {
+		let fgData = {...baseFGData};
+		fgData.children = [epChild];
+		let laData = {...baseLAData};
+		laData.children = [fgData];
+
+		const listview = TestUtils.renderIntoDocument( <VLMListView licensingDataList={[laData]} showInUse={true} /> );
+		expect(listview).toBeTruthy();
+		const elem = scryRenderedDOMComponentsWithTestId(listview,'vlm-list-item-ep');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+	});
+
+	it('should render VLMListView with LicenseKeyGroup', () => {
+		let fgData = {...baseFGData};
+		fgData.children = [lkgChild];
+		let laData = {...baseLAData};
+		laData.children = [fgData];
+
+		const listview = TestUtils.renderIntoDocument( <VLMListView licensingDataList={[laData]} showInUse={true} /> );
+		expect(listview).toBeTruthy();
+		const elem = scryRenderedDOMComponentsWithTestId(listview,'vlm-list-item-lkg');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+	});
+
+	it('should render VLMListView with all items', () => {
+		let fgData = {...baseFGData};
+		fgData.children = Array.of(epChild, lkgChild);
+		let laData = {...baseLAData};
+		laData.children = [fgData];
+
+		const listview = TestUtils.renderIntoDocument( <VLMListView licensingDataList={[laData]} showInUse={true} /> );
+		expect(listview).toBeTruthy();
+		let elem = scryRenderedDOMComponentsWithTestId(listview,'vlm-list-item-fg');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+		elem = scryRenderedDOMComponentsWithTestId(listview,'vlm-list-item-lkg');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+		elem = scryRenderedDOMComponentsWithTestId(listview,'vlm-list-item-ep');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+	});
+
+	it('should update collapsing item', () => {
+		let fgData = {...baseFGData};
+		fgData.children = Array.of(epChild, lkgChild);
+		let laData = {...baseLAData};
+		laData.children = [fgData];
+
+		var renderer = TestUtils.renderIntoDocument(
+			<VLMListView licensingDataList={[laData]} showInUse={true}/>
+		);
+		expect(renderer).toBeTruthy();
+
+		renderer.updateCollapsable(new Event('click'), 'LA1');
+		expect(renderer.state['LA1']).toEqual(true);
+	});
+});
diff --git a/openecomp-ui/test/licenseModel/test.js b/openecomp-ui/test/licenseModel/test.js
index c21d18f..eac1297 100644
--- a/openecomp-ui/test/licenseModel/test.js
+++ b/openecomp-ui/test/licenseModel/test.js
@@ -1,57 +1,40 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
-import {expect} from 'chai';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
-import {cloneAndSet} from 'test-utils/Util.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 import LicenseModelCreationActionHelper from 'sdc-app/onboarding/licenseModel/creation/LicenseModelCreationActionHelper.js';
 
+import {LicenseModelPostFactory, LicenseModelDispatchFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
+
 describe('License Model Module Tests', function () {
 	it('Add License Model', () => {
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const licenseModelPostRequest = deepFreeze({
-			vendorName: 'vlm1',
-			description: 'string',
-			iconRef: 'icon'
-		});
+		const licenseModelPostRequest = LicenseModelPostFactory.build();
 
-		const licenseModelToAdd = deepFreeze({
-			...licenseModelPostRequest
-		});
+		const licenseModelToAdd = LicenseModelDispatchFactory.build();
 
 		const licenseModelIdFromResponse = 'ADDED_ID';
-		const licenseModelAfterAdd = deepFreeze({
-			...licenseModelToAdd,
-			id: licenseModelIdFromResponse
-		});
-
-		const expectedStore = cloneAndSet(store.getState(), 'licenseModelList', [licenseModelAfterAdd]);
-
-		mockRest.addHandler('create', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal('/onboarding-api/v1.0/vendor-license-models/');
-			expect(data).to.deep.equal(licenseModelPostRequest);
-			expect(options).to.equal(undefined);
+		
+		mockRest.addHandler('post', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual('/onboarding-api/v1.0/vendor-license-models/');
+			expect(data).toEqual(licenseModelPostRequest);
+			expect(options).toEqual(undefined);
 			return {
 				value: licenseModelIdFromResponse
 			};
@@ -59,8 +42,8 @@
 
 		return LicenseModelCreationActionHelper.createLicenseModel(store.dispatch, {
 			licenseModel: licenseModelToAdd
-		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		}).then((response) => {
+			expect(response.value).toEqual(licenseModelIdFromResponse);
 		});
 	});
 });
diff --git a/openecomp-ui/test/nfvo-components/SubmitErrorResponse.test.js b/openecomp-ui/test/nfvo-components/SubmitErrorResponse.test.js
new file mode 100644
index 0000000..7231fe4
--- /dev/null
+++ b/openecomp-ui/test/nfvo-components/SubmitErrorResponse.test.js
@@ -0,0 +1,33 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+
+import SubmitErrorResponse from 'nfvo-components/SubmitErrorResponse.jsx';
+import {SubmitErrorMessageFactory} from 'test-utils/factories/SubnitErrorMessageFactorie.js';
+
+describe('SubmitErrorResponse test: ', function () {
+	it('basic render test', () => {
+		let props = {
+			validationResponse: SubmitErrorMessageFactory.build()
+		};
+
+		let view = TestUtils.renderIntoDocument(<SubmitErrorResponse {...props} />);
+		expect(view).toBeTruthy();
+	});
+});
diff --git a/openecomp-ui/test/nfvo-components/__snapshots__/storyshots.test.js.snap b/openecomp-ui/test/nfvo-components/__snapshots__/storyshots.test.js.snap
new file mode 100644
index 0000000..f7df976
--- /dev/null
+++ b/openecomp-ui/test/nfvo-components/__snapshots__/storyshots.test.js.snap
@@ -0,0 +1,686 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`Storyshots ListEditor regular 1`] = `
+<div
+  className="list-editor-view"
+>
+  <div
+    className="list-editor-view-header"
+  >
+    <div
+      className="list-editor-view-title"
+    >
+      List Editor
+    </div>
+    <div
+      className="list-editor-view-add-controller"
+    />
+  </div>
+  <div
+    className="list-editor-view-list-scroller"
+  >
+    <div
+      className="list-editor-view-list"
+    >
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+      </div>
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+`;
+
+exports[`Storyshots ListEditor two columns 1`] = `
+<div
+  className="list-editor-view"
+>
+  <div
+    className="list-editor-view-header"
+  >
+    <div
+      className="list-editor-view-title"
+    >
+      List Editor
+    </div>
+    <div
+      className="list-editor-view-add-controller"
+    />
+  </div>
+  <div
+    className="list-editor-view-list-scroller"
+  >
+    <div
+      className="list-editor-view-list two-columns"
+    >
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+      </div>
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+`;
+
+exports[`Storyshots ListEditor with add 1`] = `
+<div
+  className="list-editor-view"
+>
+  <div
+    className="list-editor-view-header"
+  >
+    <div
+      className="list-editor-view-title"
+    >
+      List Editor
+    </div>
+    <div
+      className="list-editor-view-add-controller"
+    >
+      <div
+        className="list-editor-view-add-title"
+        data-test-id="add-button"
+        onClick={[Function]}
+      >
+        <span>
+          + Add
+        </span>
+      </div>
+    </div>
+  </div>
+  <div
+    className="list-editor-view-list-scroller"
+  >
+    <div
+      className="list-editor-view-list two-columns"
+    >
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+      </div>
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+`;
+
+exports[`Storyshots ListEditor with delete 1`] = `
+<div
+  className="list-editor-view"
+>
+  <div
+    className="list-editor-view-header"
+  >
+    <div
+      className="list-editor-view-title"
+    >
+      List Editor
+    </div>
+    <div
+      className="list-editor-view-add-controller"
+    >
+      <div
+        className="list-editor-view-add-title"
+        data-test-id="add-button"
+        onClick={[Function]}
+      >
+        <span>
+          + Add
+        </span>
+      </div>
+    </div>
+  </div>
+  <div
+    className="list-editor-view-list-scroller"
+  >
+    <div
+      className="list-editor-view-list two-columns"
+    >
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+        <div
+          className="list-editor-item-view-controller"
+        >
+          <div
+            className="svg-icon-wrapper  clickable bottom"
+            onClick={[Function]}
+          >
+            <svg
+              className="svg-icon trash-o "
+            >
+              <use
+                xlinkHref="test-file-stub"
+              />
+            </svg>
+            
+          </div>
+        </div>
+      </div>
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+        <div
+          className="list-editor-item-view-controller"
+        >
+          <div
+            className="svg-icon-wrapper  clickable bottom"
+            onClick={[Function]}
+          >
+            <svg
+              className="svg-icon trash-o "
+            >
+              <use
+                xlinkHref="test-file-stub"
+              />
+            </svg>
+            
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+`;
+
+exports[`Storyshots ListEditor with edit 1`] = `
+<div
+  className="list-editor-view"
+>
+  <div
+    className="list-editor-view-header"
+  >
+    <div
+      className="list-editor-view-title"
+    >
+      List Editor
+    </div>
+    <div
+      className="list-editor-view-add-controller"
+    >
+      <div
+        className="list-editor-view-add-title"
+        data-test-id="add-button"
+        onClick={[Function]}
+      >
+        <span>
+          + Add
+        </span>
+      </div>
+    </div>
+  </div>
+  <div
+    className="list-editor-view-list-scroller"
+  >
+    <div
+      className="list-editor-view-list two-columns"
+    >
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+        <div
+          className="list-editor-item-view-controller"
+        >
+          <div
+            className="svg-icon-wrapper  clickable bottom"
+            onClick={[Function]}
+          >
+            <svg
+              className="svg-icon sliders "
+            >
+              <use
+                xlinkHref="test-file-stub"
+              />
+            </svg>
+            
+          </div>
+        </div>
+      </div>
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+        <div
+          className="list-editor-item-view-controller"
+        >
+          <div
+            className="svg-icon-wrapper  clickable bottom"
+            onClick={[Function]}
+          >
+            <svg
+              className="svg-icon sliders "
+            >
+              <use
+                xlinkHref="test-file-stub"
+              />
+            </svg>
+            
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+`;
+
+exports[`Storyshots ListEditor with edit and delete 1`] = `
+<div
+  className="list-editor-view"
+>
+  <div
+    className="list-editor-view-header"
+  >
+    <div
+      className="list-editor-view-title"
+    >
+      List Editor
+    </div>
+    <div
+      className="list-editor-view-add-controller"
+    >
+      <div
+        className="list-editor-view-add-title"
+        data-test-id="add-button"
+        onClick={[Function]}
+      >
+        <span>
+          + Add
+        </span>
+      </div>
+    </div>
+  </div>
+  <div
+    className="list-editor-view-list-scroller"
+  >
+    <div
+      className="list-editor-view-list two-columns"
+    >
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+        <div
+          className="list-editor-item-view-controller"
+        >
+          <div
+            className="svg-icon-wrapper  clickable bottom"
+            onClick={[Function]}
+          >
+            <svg
+              className="svg-icon sliders "
+            >
+              <use
+                xlinkHref="test-file-stub"
+              />
+            </svg>
+            
+          </div>
+          <div
+            className="svg-icon-wrapper  clickable bottom"
+            onClick={[Function]}
+          >
+            <svg
+              className="svg-icon trash-o "
+            >
+              <use
+                xlinkHref="test-file-stub"
+              />
+            </svg>
+            
+          </div>
+        </div>
+      </div>
+      <div
+        className="list-editor-item-view"
+        data-test-id="list-editor-item"
+      >
+        <div
+          className="list-editor-item-view-content"
+          onClick={undefined}
+        >
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+          <div
+            className="list-editor-item-view-field"
+          >
+            <div>
+              Lorum Ipsum
+            </div>
+          </div>
+        </div>
+        <div
+          className="list-editor-item-view-controller"
+        >
+          <div
+            className="svg-icon-wrapper  clickable bottom"
+            onClick={[Function]}
+          >
+            <svg
+              className="svg-icon sliders "
+            >
+              <use
+                xlinkHref="test-file-stub"
+              />
+            </svg>
+            
+          </div>
+          <div
+            className="svg-icon-wrapper  clickable bottom"
+            onClick={[Function]}
+          >
+            <svg
+              className="svg-icon trash-o "
+            >
+              <use
+                xlinkHref="test-file-stub"
+              />
+            </svg>
+            
+          </div>
+        </div>
+      </div>
+    </div>
+  </div>
+</div>
+`;
+
+exports[`Storyshots SVGIcon icon 1`] = `
+<div
+  className="svg-icon-wrapper   bottom"
+  onClick={undefined}
+  style={
+    Object {
+      "fill": "",
+    }
+  }
+>
+  <svg
+    className="svg-icon locked "
+  >
+    <use
+      xlinkHref="test-file-stub"
+    />
+  </svg>
+  
+</div>
+`;
+
+exports[`Storyshots SVGIcon icon with label 1`] = `
+<div
+  className="svg-icon-wrapper   bottom"
+  onClick={undefined}
+  style={
+    Object {
+      "fill": "",
+    }
+  }
+>
+  <svg
+    className="svg-icon locked "
+  >
+    <use
+      xlinkHref="test-file-stub"
+    />
+  </svg>
+  <span
+    className="svg-icon-label "
+  >
+    locked
+  </span>
+</div>
+`;
+
+exports[`Storyshots SVGIcon locked clickable 1`] = `
+<div
+  className="svg-icon-wrapper  clickable bottom"
+  onClick={[Function]}
+  style={
+    Object {
+      "fill": "",
+    }
+  }
+>
+  <svg
+    className="svg-icon locked "
+  >
+    <use
+      xlinkHref="test-file-stub"
+    />
+  </svg>
+  
+</div>
+`;
diff --git a/openecomp-ui/test/nfvo-components/activity-log/ActivityLog.test.js b/openecomp-ui/test/nfvo-components/activity-log/ActivityLog.test.js
new file mode 100644
index 0000000..2f377a3
--- /dev/null
+++ b/openecomp-ui/test/nfvo-components/activity-log/ActivityLog.test.js
@@ -0,0 +1,89 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import {mount} from 'enzyme';
+import {cloneAndSet} from 'test-utils/Util.js';
+import ActivityLogView, {ActivityListItem} from 'nfvo-components/activity-log/ActivityLogView.jsx';
+import ListEditorView from 'nfvo-components/listEditor/ListEditorView.jsx';
+import ActivityLogActionHelper from 'nfvo-components/activity-log/ActivityLogActionHelper.js';
+import {mapStateToProps} from 'nfvo-components/activity-log/ActivityLog.js';
+import {storeCreator} from 'sdc-app/AppStore.js';
+import mockRest from 'test-utils/MockRest.js';
+import {ActivityLogStoreFactory} from 'test-utils/factories/activity-log/ActivityLogFactories.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+
+describe('Activity Log Module Tests', function () {
+	const LICENSE_MODEL_ID = '555';
+	const version = VersionControllerUtilsFactory.build().version;
+
+	it('mapStateToProps mapper exists', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it('Loads Activity Log and renders into jsx', () => {
+		const store = storeCreator();
+		const dispatch = store.dispatch;
+		let ActivityLogList = ActivityLogStoreFactory.buildList(1);
+		const expectedStore = cloneAndSet(store.getState(), 'licenseModel.activityLog', ActivityLogList);
+
+		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/activity-logs/${LICENSE_MODEL_ID}/versions/${version.id}`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: ActivityLogList};
+		});
+
+		return ActivityLogActionHelper.fetchActivityLog(dispatch, {itemId: LICENSE_MODEL_ID, versionId: version.id}).then(() => {
+			const state = store.getState();
+			expect(state).toEqual(expectedStore);
+			const props = mapStateToProps(state);
+			expect(props.activities).toEqual(ActivityLogList);
+			const wrapper = mount(<ActivityLogView {...props}/>);
+			expect(wrapper).toBeTruthy();
+		});
+	});
+
+	it('Tests Activity Log filter and sorting abilities', () => {
+		const firstDate = new Date();
+		const secondDate = new Date();
+		secondDate.setDate(firstDate.getDate() - 1);
+
+		const firstTimestamp = firstDate.getTime();
+		const secondTimestamp = secondDate.getTime();
+
+		let firstActivity = ActivityLogStoreFactory.build({user: 'first', timestamp: firstTimestamp});
+		let secondActivity = ActivityLogStoreFactory.build({user: 'second', timestamp: secondTimestamp, status: {success: false, message: 'error'}});
+		let props = mapStateToProps({licenseModel: {activityLog: [firstActivity, secondActivity]}});
+		const wrapper = mount(<ActivityLogView {...props}/>);
+		expect(wrapper.find(ActivityListItem).length).toEqual(3); // Includes Header component
+
+		const firstInstance = wrapper.find(ActivityListItem).at(1);
+		const firstInstanceProps = firstInstance.props();
+		expect(firstInstanceProps.activity.timestamp).toEqual(secondTimestamp); // Default sorting is descending
+
+		const header = wrapper.find(ActivityListItem).at(0);
+		header.props().onSort();
+		const newFirstInstance = wrapper.find(ActivityListItem).at(1);
+		const newFirstInstanceProps = newFirstInstance.props();
+		expect(newFirstInstanceProps.activity.timestamp).toEqual(firstTimestamp);
+
+		const listEditor = wrapper.find(ListEditorView);
+		listEditor.props().onFilter('second');
+		expect(wrapper.find(ActivityListItem).length).toEqual(2);
+		expect(wrapper.find(ActivityListItem).at(1).props().activity.user).toEqual('second');
+	});
+});
diff --git a/openecomp-ui/test/nfvo-components/editor/TabulatedEditor.test.js b/openecomp-ui/test/nfvo-components/editor/TabulatedEditor.test.js
new file mode 100644
index 0000000..e61261e
--- /dev/null
+++ b/openecomp-ui/test/nfvo-components/editor/TabulatedEditor.test.js
@@ -0,0 +1,52 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import TabulatedEditor from 'nfvo-components/editor/TabulatedEditor.jsx';
+
+describe('Tabulated Editor test: ', function () {
+
+	it('basic view test', () => {
+		let renderer = TestUtils.createRenderer();
+		renderer.render(
+			<TabulatedEditor><button>test</button></TabulatedEditor>
+		);
+		let renderedOutput = renderer.getRenderOutput();
+		expect(renderedOutput).toBeTruthy();
+
+	});
+
+	it('handle func test', () => {
+		let props = {
+			navigationBarProps: {
+				groups: [],
+				onNavigationItemClick: ()=>{}
+			},
+			versionControllerProps: {
+				isCheckedOut: false,
+				version: {id: '0.1', label: '0.1'},
+				viewableVersions: [{id: '0.1', label: '0.1'}],
+				onSubmit: ()=>{},
+				onRevert: ()=>{}
+			}
+		};
+		const view = TestUtils.renderIntoDocument(<TabulatedEditor {...props}><button>test</button></TabulatedEditor>);
+		expect(view).toBeTruthy();
+	});
+
+});
diff --git a/openecomp-ui/test/nfvo-components/input/dualListBox/dualListbox.test.js b/openecomp-ui/test/nfvo-components/input/dualListBox/dualListbox.test.js
index eaa06ee..c578178 100644
--- a/openecomp-ui/test/nfvo-components/input/dualListBox/dualListbox.test.js
+++ b/openecomp-ui/test/nfvo-components/input/dualListBox/dualListbox.test.js
@@ -1,24 +1,19 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import React from 'react';
 import TestUtils from 'react-addons-test-utils';
 import DualListboxView from 'nfvo-components/input/dualListbox/DualListboxView.jsx';
@@ -32,42 +27,62 @@
 		var renderer = TestUtils.createRenderer();
 		renderer.render(<DualListboxView onChange={()=>{}}/>);
 		var renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 	});
 
 	it('should render with available list and 4 control buttons', () => {
 		var view = TestUtils.renderIntoDocument(<DualListboxView availableList={ITEMS} onChange={()=>{}}/>);
-		expect(view).toExist();
+		expect(view).toBeTruthy();
 		var results = TestUtils.scryRenderedDOMComponentsWithClass(view, 'dual-list-option');
 		expect(results.length).toBe(4);
 	});
 
 	it('should add item to selected list', done => {
-		const newItemValue = 'new item';
-		let onChange = (value)=> {
-			expect(value).toEqual(newItemValue);
+		const onChange = (values)=> {
+			expect(values).toEqual([ITEMS[2].id, ITEMS[0].id]);
 			done();
 		};
-		var view = new DualListboxView({availableList:ITEMS, onChange, selectedValuesList:[]});
-		expect(view).toExist();
-		view.refs = {
-			availableValues: {getValue(){return newItemValue;}}
-		};
-		view.addToSelectedList();
+		const document = TestUtils.renderIntoDocument(
+			<DualListboxView
+				availableList={ITEMS}
+				onChange={onChange}
+				selectedValuesList={[ITEMS[2].id]}/>);
+
+		const result = TestUtils.scryRenderedDOMComponentsWithTag(document, 'select');
+		const options = TestUtils.scryRenderedDOMComponentsWithTag(document, 'option');
+		const listBox = TestUtils.findRenderedComponentWithType(document, DualListboxView);
+		expect(result).toBeTruthy();
+		expect(options).toBeTruthy();
+		expect(listBox).toBeTruthy();
+
+		TestUtils.Simulate.change(result[0], {target: {selectedOptions: [options[0]]}});
+		expect(listBox.state.selectedValues).toEqual([ITEMS[0].id]);
+
+		listBox.addToSelectedList();
 	});
 
 	it('should remove item from selected list', done => {
-		const selectedValuesList = ['a','b'];
-		let onChange = (value)=> {
-			expect(value).toEqual(selectedValuesList[1]);
+		const onChange = (values)=> {
+			expect(values).toEqual([ITEMS[0].id]);
 			done();
 		};
-		var view = new DualListboxView({availableList:ITEMS, onChange, selectedValuesList});
-		expect(view).toExist();
-		view.refs = {
-			selectedValues: {getValue(){return ['a'];}}
-		};
-		view.removeFromSelectedList();
+		const document = TestUtils.renderIntoDocument(
+			<DualListboxView
+				availableList={ITEMS}
+				onChange={onChange}
+				selectedValuesList={[ITEMS[0].id, ITEMS[1].id]}/>);
+
+		const result = TestUtils.scryRenderedDOMComponentsWithTag(document, 'select');
+		const options = TestUtils.scryRenderedDOMComponentsWithTag(document, 'option');
+		const listBox = TestUtils.findRenderedComponentWithType(document, DualListboxView);
+		expect(result).toBeTruthy();
+		expect(options).toBeTruthy();
+		expect(listBox).toBeTruthy();
+
+		TestUtils.Simulate.change(result[1], {target: {selectedOptions: [options[2]]}});
+		expect(listBox.state.selectedValues).toEqual([ITEMS[1].id]);
+
+		listBox.removeFromSelectedList();
 	});
 
 	it('should add all items to selected list', done => {
@@ -76,7 +91,7 @@
 			done();
 		};
 		var view = new DualListboxView({availableList:ITEMS, onChange, selectedValuesList:[]});
-		expect(view).toExist();
+		expect(view).toBeTruthy();
 		view.addAllToSelectedList();
 	});
 
@@ -86,7 +101,7 @@
 			done();
 		};
 		var view = new DualListboxView({availableList:ITEMS, onChange, selectedValuesList:[]});
-		expect(view).toExist();
+		expect(view).toBeTruthy();
 		view.removeAllFromSelectedList();
 	});
 
diff --git a/openecomp-ui/test/nfvo-components/input/validation/input.test.js b/openecomp-ui/test/nfvo-components/input/validation/input.test.js
new file mode 100644
index 0000000..7743483
--- /dev/null
+++ b/openecomp-ui/test/nfvo-components/input/validation/input.test.js
@@ -0,0 +1,141 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {scryRenderedDOMComponentsWithTestId} from 'test-utils/Util.js';
+import Input from 'nfvo-components/input/validation/Input.jsx';
+import Overlay from 'react-bootstrap/lib/Overlay.js';
+
+describe('Input', function () {
+	it('should render with type text', () => {
+		let renderedOutput = TestUtils.renderIntoDocument(<Input type='text' data-test-id='mytest' />);
+		const elem = scryRenderedDOMComponentsWithTestId(renderedOutput,'mytest');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+		expect(elem[0].type).toBe('text');
+	});
+
+	it('should render with type textarea', () => {
+		let renderedOutput = TestUtils.renderIntoDocument(<Input type='textarea' data-test-id='mytest' />);
+		const elem = scryRenderedDOMComponentsWithTestId(renderedOutput,'mytest');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+		expect(elem[0].tagName.toLowerCase()).toBe('textarea');
+	});
+
+	it('should render with type radio', () => {
+		let renderedOutput = TestUtils.renderIntoDocument(<Input type='radio' data-test-id='mytest' />);
+		const elem = scryRenderedDOMComponentsWithTestId(renderedOutput,'mytest');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+		expect(elem[0].type).toBe('radio');
+	});
+
+	it('should render with type select', () => {
+		let renderedOutput = TestUtils.renderIntoDocument(<Input type='select' data-test-id='mytest' />);
+		const elem = scryRenderedDOMComponentsWithTestId(renderedOutput,'mytest');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+		expect(elem[0].tagName.toLowerCase()).toBe('select');
+	});
+
+	it('should render with type number', () => {
+		let renderedOutput = TestUtils.renderIntoDocument(<Input type='number' data-test-id='mytest' />);
+		const elem = scryRenderedDOMComponentsWithTestId(renderedOutput,'mytest');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+		expect(elem[0].tagName.toLowerCase()).toBe('input');
+		expect(elem[0].type).toBe('number');
+	});
+
+	it('should render with type checkbox', () => {
+		let renderedOutput = TestUtils.renderIntoDocument(<Input type='checkbox' data-test-id='mytest' />);
+		const elem = scryRenderedDOMComponentsWithTestId(renderedOutput,'mytest');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+		expect(elem[0].tagName.toLowerCase()).toBe('input');
+		expect(elem[0].type).toBe('checkbox');
+	});
+
+	it('should render error overlay when invalid', () => {
+		let renderedOutput = TestUtils.renderIntoDocument(<Input type='text' data-test-id='mytest' isValid={false} errorText='this is an error'/>);
+		const elem = TestUtils.findRenderedComponentWithType(renderedOutput,Overlay);
+		expect(elem).toBeTruthy();
+		expect(elem.props.show).toBe(true);
+	});
+
+	it('should not render error overlay when valid', () => {
+		let renderedOutput = TestUtils.renderIntoDocument(<Input type='text' data-test-id='mytest' isValid={true} errorText='this is an error'/>);
+		const elem = TestUtils.findRenderedComponentWithType(renderedOutput,Overlay);
+		expect(elem).toBeTruthy();
+		expect(elem.props.show).toBe(false);
+	});
+
+	/*it('should return the value of a select', () => {
+
+	});
+
+	it('should return the value of a checkbox', () => {
+
+	});
+
+	it('should return the value of a radio', () => {
+
+	});
+
+	it('should return the value of a text', () => {
+
+	});
+
+	it('should return the value of a textarea', () => {
+
+	});*/
+
+	/*it('should render and work as a group', () => {
+	 let MockComp = React.createClass({
+	 render: function() {
+	 return (<div>
+	 <Input type='radio' data-test-id='mytest' name='g1' value='0'/><Input type='radio' data-test-id='mytest1' name='g1' value='1' />
+	 </div>);
+	 }
+	 });
+	 let renderedOutput = TestUtils.renderIntoDocument(<MockComp />);
+	 const radio1 = scryRenderedDOMComponentsWithTestId(renderedOutput,'mytest');
+	 expect(radio1).toBeTruthy();
+	 expect(radio1.length).toBe(1);
+	 expect(radio1[0].type).toBe('radio');
+	 expect(radio1[0].value).toBe('0');
+	 const radio2 = scryRenderedDOMComponentsWithTestId(renderedOutput,'mytest1');
+	 expect(radio2).toBeTruthy();
+	 expect(radio2.length).toBe(1);
+	 expect(radio2[0].type).toBe('radio');
+	 expect(radio2[0].value).toBe('1');
+	 TestUtils.Simulate.click(
+	 radio2[0]
+	 );
+	 TestUtils.Simulate.click(
+	 radio1[0]
+	 );
+	 console.log('radio1: ' + radio1[0].checked);
+	 console.log('radio2: ' + radio2[0].checked);
+	 expect(radio2[0].checked).toBe(false);
+	 expect(radio1[0].checked).toBe(true);
+
+
+	 });*/
+
+});
diff --git a/openecomp-ui/test/nfvo-components/listEditor/listEditor.test.js b/openecomp-ui/test/nfvo-components/listEditor/listEditor.test.js
index a3b098f..c1f823c 100644
--- a/openecomp-ui/test/nfvo-components/listEditor/listEditor.test.js
+++ b/openecomp-ui/test/nfvo-components/listEditor/listEditor.test.js
@@ -1,25 +1,21 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import React from 'react';
+import {mount} from 'enzyme';
 import TestUtils from 'react-addons-test-utils';
 import ListEditorView from 'src/nfvo-components/listEditor/ListEditorView.jsx';
 import ListEditorItemView from 'src/nfvo-components/listEditor/ListEditorItemView.jsx';
@@ -28,11 +24,11 @@
 
 
 	it('list editor view should exist', () => {
-		expect(ListEditorView).toExist();
+		expect(ListEditorView).toBeTruthy();
 	});
 
 	it('list editor item view should exist', () => {
-		expect(ListEditorItemView).toExist();
+		expect(ListEditorItemView).toBeTruthy();
 	});
 
 	it('should render list and list item and call onEdit', done => {
@@ -43,22 +39,18 @@
 				</ListEditorItemView>
 			</ListEditorView>
 		);
-		expect(itemView).toExist();
-		let sliderIcon = TestUtils.findRenderedDOMComponentWithClass(itemView, 'fa-sliders');
+		expect(itemView).toBeTruthy();
+		let sliderIcon = TestUtils.findRenderedDOMComponentWithClass(itemView, 'sliders');
 		TestUtils.Simulate.click(sliderIcon);
 	});
 
-	it('should render list and list item and call onFilter', done => {
-		let itemView = TestUtils.renderIntoDocument(
-			<ListEditorView onFilter={()=>{done();}}>
-				<ListEditorItemView>
-					<div></div>
-				</ListEditorItemView>
-			</ListEditorView>
+	it('should render list and list item and call onFilter', () => {
+		let itemView = mount(
+			<ListEditorView onFilter={()=>{}} children={[(<ListEditorItemView key='id'/>)]} />
 		);
-		expect(itemView).toExist();
-		let filterInput = TestUtils.findRenderedDOMComponentWithTag(itemView, 'input');
-		TestUtils.Simulate.change(filterInput);
+		expect(itemView).toBeTruthy();
+		let inputComponent = itemView.find('ExpandableInput');
+		expect(inputComponent.length).toBe(1);
 	});
 
 	it('should render READONLY list item and not call onEdit', done => {
@@ -67,8 +59,8 @@
 				<div></div>
 			</ListEditorItemView>
 		);
-		expect(itemView).toExist();
-		let sliderIcon = TestUtils.findRenderedDOMComponentWithClass(itemView, 'fa-sliders');
+		expect(itemView).toBeTruthy();
+		let sliderIcon = TestUtils.findRenderedDOMComponentWithClass(itemView, 'sliders');
 		TestUtils.Simulate.click(sliderIcon);
 	});
 
@@ -78,8 +70,8 @@
 				<div></div>
 			</ListEditorItemView>
 		);
-		expect(itemView).toExist();
-		let sliderIcon = TestUtils.findRenderedDOMComponentWithClass(itemView, 'fa-trash-o');
+		expect(itemView).toBeTruthy();
+		let sliderIcon = TestUtils.findRenderedDOMComponentWithClass(itemView, 'trash-o');
 		TestUtils.Simulate.click(sliderIcon);
 	});
 
@@ -89,8 +81,8 @@
 				<div></div>
 			</ListEditorItemView>
 		);
-		expect(itemView).toExist();
-		let sliderIcon = TestUtils.scryRenderedDOMComponentsWithClass(itemView, 'fa-trash-o');
-		expect(sliderIcon).toEqual(0);
+		expect(itemView).toBeTruthy();
+		let trashIcon = TestUtils.scryRenderedDOMComponentsWithClass(itemView, 'fa-trash-o');
+		expect(trashIcon).toEqual([]);
 	});
 });
diff --git a/openecomp-ui/test/nfvo-components/modal/globalModal.test.js b/openecomp-ui/test/nfvo-components/modal/globalModal.test.js
new file mode 100644
index 0000000..efe43b6
--- /dev/null
+++ b/openecomp-ui/test/nfvo-components/modal/globalModal.test.js
@@ -0,0 +1,92 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import GlobalModal, {GlobalModalView, mapStateToProps} from 'src/nfvo-components/modal/GlobalModal.js';
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import store from 'sdc-app/AppStore.js';
+import {actionTypes, typeEnum} from 'src/nfvo-components/modal/GlobalModalConstants.js';
+
+const title = 'TITLE';
+const msg = 'message';
+
+describe('Global Modal tests: ', function () {
+	it (' mapStateToProps exists', function () {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it ('mapStateToProps should return show as true', () => {
+		let state = {
+			modal: {
+				type: ''				
+			}
+		};
+		let props = mapStateToProps(state);
+		expect(props.show).toEqual(true);
+	});
+
+	it('modal should show with default values', () => {
+		store.dispatch({
+			type: actionTypes.GLOBAL_MODAL_SHOW,
+			data: {
+				title,
+				msg
+			}
+		});
+		const modal = store.getState().modal;
+		expect(modal).toBeTruthy();
+		expect(modal.title).toBe(title);
+		expect(modal.msg).toBe(msg);	
+	});
+
+	it('global modal should show with type success with connected component', () => {
+		store.dispatch({type: actionTypes.GLOBAL_MODAL_SHOW, data: {title, msg}});
+
+		expect(store.getState().modal).toBeTruthy();
+			
+		let renderer = TestUtils.createRenderer();
+		renderer.render(<GlobalModal store={store}/>);
+		let renderedOutput = renderer.getRenderOutput();
+		expect(renderedOutput).toBeTruthy();
+
+	});
+
+
+	it('global modal should show with type success with connected component and closed after', () => {
+		store.dispatch({type: actionTypes.GLOBAL_MODAL_SHOW, data: {title, msg}});
+		
+		expect(store.getState().modal).toBeTruthy();
+			
+		let renderer = TestUtils.createRenderer();
+		renderer.render(<GlobalModal store={store}/>);
+		let renderedOutput = renderer.getRenderOutput();
+		expect(renderedOutput).toBeTruthy();
+
+		store.dispatch({type: actionTypes.GLOBAL_MODAL_CLOSE});
+		expect(store.getState().modal).toBe(null);
+	});
+
+
+	it('checking component default render', ()=> {
+		expect(window.document).toBeTruthy();		
+		let globalModalView = TestUtils.renderIntoDocument(
+			<GlobalModalView show={true} type={typeEnum.WARNING} title={title} msg={msg} onDeclined={()=>{}} />
+		);
+		expect(globalModalView).toBeTruthy();
+	});
+
+});
+
diff --git a/openecomp-ui/test/nfvo-components/notifications/notificationsModal.test.js b/openecomp-ui/test/nfvo-components/notifications/notificationsModal.test.js
deleted file mode 100644
index f84d382..0000000
--- a/openecomp-ui/test/nfvo-components/notifications/notificationsModal.test.js
+++ /dev/null
@@ -1,144 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-import expect from 'expect';
-import React from 'react';
-import TestUtils from 'react-addons-test-utils';
-import store from 'sdc-app/AppStore.js';
-import ConnectedNotificationModal, {NotificationModal} from 'nfvo-components/notifications/NotificationModal.jsx';
-import NotificationConstants from 'nfvo-components/notifications/NotificationConstants.js';
-
-const title = 'test title';
-const msg = 'test msg';
-
-describe('Notification Modal Mapper and View Class: ', function () {
-
-	it('notification should show with type error', done => {
-		store.dispatch({type: NotificationConstants.NOTIFY_ERROR, data: {title, msg}});
-		setTimeout(()=> {
-			expect(store.getState().notification).toExist();
-			expect(store.getState().notification.type).toBe('error');
-			done();
-		}, 0);
-	});
-
-	it('notification should show with type default', done => {
-		store.dispatch({type: NotificationConstants.NOTIFY_INFO, data: {title, msg}});
-		setTimeout(()=> {
-			expect(store.getState().notification).toExist();
-			expect(store.getState().notification.type).toBe('default');
-			done();
-		}, 0);
-	});
-
-	it('notification should show with type warning', done => {
-		store.dispatch({type: NotificationConstants.NOTIFY_WARNING, data: {title, msg}});
-		setTimeout(()=> {
-			expect(store.getState().notification).toExist();
-			expect(store.getState().notification.type).toBe('warning');
-			done();
-		}, 0);
-	});
-
-	it('notification should show with type success', done => {
-		store.dispatch({type: NotificationConstants.NOTIFY_SUCCESS, data: {title, msg}});
-		setTimeout(()=> {
-			expect(store.getState().notification).toExist();
-			expect(store.getState().notification.type).toBe('success');
-			done();
-		}, 0);
-	});
-
-	it('notification should show with type success with connected component', done => {
-		store.dispatch({type: NotificationConstants.NOTIFY_SUCCESS, data: {title, msg}});
-		setTimeout(()=> {
-			expect(store.getState().notification).toExist();
-			expect(store.getState().notification.type).toBe('success');
-			let renderer = TestUtils.createRenderer();
-			renderer.render(<ConnectedNotificationModal store={store}/>);
-			let renderedOutput = renderer.getRenderOutput();
-			expect(renderedOutput).toExist();
-			done();
-		}, 0);
-	});
-
-	it('notification should hide with connected component', done => {
-		setTimeout(()=> {
-			expect(store.getState().notification).toNotExist();
-			let renderer = TestUtils.createRenderer();
-			renderer.render(<ConnectedNotificationModal store={store}/>);
-			let renderedOutput = renderer.getRenderOutput();
-			expect(renderedOutput).toExist();
-			done();
-		}, 0);
-		store.dispatch({type: NotificationConstants.NOTIFY_CLOSE});
-	});
-
-	it('notification should hide', done => {
-		store.dispatch({type: NotificationConstants.NOTIFY_CLOSE});
-		setTimeout(()=> {
-			expect(store.getState().notification).toNotExist();
-			done();
-		}, 0);
-	});
-
-	it('NotificationModal should not render', ()=> {
-		let renderer = TestUtils.createRenderer();
-		renderer.render(<NotificationModal show={false} title={title} msg={msg} type='error'/>);
-		let renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
-	});
-
-	it('NotificationModal basic default render', ()=> {
-		expect(window.document).toExist();
-		let document = TestUtils.renderIntoDocument(
-			<NotificationModal show={true} title={title} msg={msg} type='default' onCloseClick={()=>{}}/>
-		);
-		var result = TestUtils.findAllInRenderedTree(document, element => element.props.className === 'notification-modal primary');
-		expect(result.length).toBeGreaterThan(0);
-	});
-
-	it('NotificationModal basic error render', ()=> {
-		expect(window.document).toExist();
-		let document = TestUtils.renderIntoDocument(
-			<NotificationModal show={true} title={title} msg={msg} type='error' onCloseClick={()=>{}}/>
-		);
-		var result = TestUtils.findAllInRenderedTree(document, element => element.props.className === 'notification-modal danger');
-		expect(result.length).toBeGreaterThan(0);
-	});
-
-	it('NotificationModal basic warning render', ()=> {
-		expect(window.document).toExist();
-		let document = TestUtils.renderIntoDocument(
-			<NotificationModal show={true} title={title} msg={msg} type='warning' onCloseClick={()=>{}}/>
-		);
-		var result = TestUtils.findAllInRenderedTree(document, element => element.props.className === 'notification-modal warning');
-		expect(result.length).toBeGreaterThan(0);
-	});
-
-	it('NotificationModal basic success render', ()=> {
-		expect(window.document).toExist();
-		let document = TestUtils.renderIntoDocument(
-			<NotificationModal show={true} title={title} msg={msg} type='success' onCloseClick={()=>{}}/>
-		);
-		var result = TestUtils.findAllInRenderedTree(document, element => element.props.className === 'notification-modal success');
-		expect(result.length).toBeGreaterThan(0);
-	});
-});
diff --git a/openecomp-ui/test/nfvo-components/panel/VersionController/versionController.test.js b/openecomp-ui/test/nfvo-components/panel/VersionController/versionController.test.js
index 9ab1813..8f2b7e7 100644
--- a/openecomp-ui/test/nfvo-components/panel/VersionController/versionController.test.js
+++ b/openecomp-ui/test/nfvo-components/panel/VersionController/versionController.test.js
@@ -1,43 +1,152 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
+
 import React from 'react';
+
 import TestUtils from 'react-addons-test-utils';
+import {mount} from 'enzyme';
 import VersionController from 'nfvo-components/panel/versionController/VersionController.jsx';
-import {actionsEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
+import {actionsEnum, statusEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
+import {scryRenderedDOMComponentsWithTestId} from 'test-utils/Util.js';
+import {VSPComponentsVersionControllerFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsNetworkFactories.js';
 
 describe('versionController UI Component', () => {
+	let onSave, onClose, onVersionSwitching = onSave = onClose = () => {return Promise.resolve();};
+	const versionData = VSPComponentsVersionControllerFactory.build();
+	const isFormDataValid = true;
+	const viewableVersions = versionData.viewableVersions;
+	const version = versionData.version;
+	const props = {onSave, onClose, isFormDataValid, viewableVersions, version, onVersionSwitching};
 
 	it('function does exist', () => {
 		var renderer = TestUtils.createRenderer();
-		renderer.render(<VersionController isCheckedOut={false} status={'OUT'} />);
+		renderer.render(<VersionController isCheckedOut={false} status={statusEnum.CHECK_OUT_STATUS} {...props} />);
 		var renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 	});
 
 	it('validating checkin function', () => {
-
-		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={false} status={'OUT'} onSave={()=>{return Promise.resolve();}}/>);
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={true} status={statusEnum.CHECK_OUT_STATUS} {...props} />);
 		let cb = action => expect(action).toBe(actionsEnum.CHECK_IN);
 		versionController.checkin(cb);
+	});
+
+	it('validating checkout function', () => {
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={false} status={statusEnum.CHECK_IN_STATUS} {...props} />);
+		let cb = action => expect(action).toBe(actionsEnum.CHECK_OUT);
+		versionController.checkout(cb);
+	});
+
+	it('validating submit function', () => {
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={false} status={statusEnum.CHECK_IN_STATUS} {...props} />);
+		let cb = action => expect(action).toBe(actionsEnum.SUBMIT);
+		versionController.submit(cb);
+	});
+
+	it('validating revert function', () => {
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={true} status={statusEnum.CHECK_OUT_STATUS} {...props} />);
+		let cb = action => expect(action).toBe(actionsEnum.UNDO_CHECK_OUT);
+		versionController.revertCheckout(cb);
+	});
+
+	it('does not show the save button when no onSave available', () => {
+		let noSaveProps = {...props, onSave: null };
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={true} status={statusEnum.CHECK_OUT_STATUS} {...noSaveProps} />);
+		let elem = scryRenderedDOMComponentsWithTestId(versionController,'vc-save-btn');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(0);
+	});
+
+	it('does not show the submit button when no callVCAction available', () => {
+		let callVCActionProps = {...props, callVCAction: null};
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={false} status={statusEnum.CHECK_IN_STATUS} {...callVCActionProps} />);
+		let elem = scryRenderedDOMComponentsWithTestId(versionController,'vc-submit-btn');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(0);
+	});
+
+	it('does not show the revert button when no callVCAction available', () => {
+		let callVCActionProps = {...props, callVCAction: null};
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={true} status={statusEnum.CHECK_OUT_STATUS} {...callVCActionProps} />);
+		let elem = scryRenderedDOMComponentsWithTestId(versionController,'vc-revert-btn');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(0);
+	});
+
+	it('Shows the save button when onSave available', () => {
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={true} status={statusEnum.CHECK_OUT_STATUS} {...props} />);
+		let elem = scryRenderedDOMComponentsWithTestId(versionController,'vc-save-btn');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+	});
+
+	it('Shows the submit button when callVCAction available', () => {
+		let callVCActionProps = { ...props, callVCAction: function(){} };
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={false} status={statusEnum.CHECK_IN_STATUS} {...callVCActionProps} />);
+		let elem = scryRenderedDOMComponentsWithTestId(versionController,'vc-submit-btn');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+	});
+
+	it('Shows the revert button when callVCAction available', () => {
+		let callVCActionProps = { ...props, callVCAction: function(){} };
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={true} status={statusEnum.CHECK_OUT_STATUS} {...callVCActionProps} />);
+		let elem = scryRenderedDOMComponentsWithTestId(versionController,'vc-revert-btn');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+	});
+
+	it('Shows the checkin button', () => {
+		let callVCActionProps = { ...props, callVCAction: function(){} };
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={true} status={statusEnum.CHECK_OUT_STATUS} {...callVCActionProps} />);
+		let elem = scryRenderedDOMComponentsWithTestId(versionController,'vc-checkout-btn');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+	});
+
+	it('Shows the checkout button', () => {
+		let callVCActionProps = { ...props, callVCAction: function(){} };
+		let versionController = TestUtils.renderIntoDocument(<VersionController isCheckedOut={false} status={statusEnum.CHECK_IN_STATUS} {...callVCActionProps} />);
+		let elem = scryRenderedDOMComponentsWithTestId(versionController,'vc-checkout-btn');
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+
+	});
+
+	it('Doesn\'t show the checkin button for prev version', () => {
+		let callVCActionProps = { ...props, version: '1.0', callVCAction: function(){} };
+		let versionController = mount(<VersionController isCheckedOut={true} status={statusEnum.CHECK_OUT_STATUS} {...callVCActionProps} />);
+		let elem = versionController.find('[data-test-id="vc-checkout-btn"]');
+		let svgIcon = versionController.find('.version-controller-lock-closed');
+
+		expect(elem).toBeTruthy();
+		expect(elem.length).toEqual(1);
+		expect(svgIcon.hasClass('disabled')).toBe(true);
+	});
+
+	it('Doesn\'t show the checkout button', () => {
+		let callVCActionProps = { ...props, version: '1.0', callVCAction: function(){} };
+		let versionController = mount(<VersionController isCheckedOut={false} status={statusEnum.CHECK_IN_STATUS} {...callVCActionProps} />);
+		let elem = versionController.find('[data-test-id="vc-checkout-btn"]');
+		let svgIcon = versionController.find('.version-controller-lock-closed');
+
+		expect(elem).toBeTruthy();
+		expect(elem.length).toBe(1);
+		expect(svgIcon.hasClass('disabled')).toBe(true);
 
 	});
 
diff --git a/openecomp-ui/test/nfvo-components/panel/VersionController/versionControllerUtils.test.js b/openecomp-ui/test/nfvo-components/panel/VersionController/versionControllerUtils.test.js
index 0e4a921..d654e16 100644
--- a/openecomp-ui/test/nfvo-components/panel/VersionController/versionControllerUtils.test.js
+++ b/openecomp-ui/test/nfvo-components/panel/VersionController/versionControllerUtils.test.js
@@ -1,41 +1,38 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
-import deepFreeze from 'deep-freeze';
+
 import Configuration from 'sdc-app/config/Configuration.js';
 import VersionControllerUtils from 'nfvo-components/panel/versionController/VersionControllerUtils.js';
 import {statusEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
 
 const status = 'testStatus';
+const {lockingUser: currentUser, viewableVersions: defaultVersions} = VersionControllerUtilsFactory.build();
 
 describe('versionController UI Component', () => {
 
 	it('function does exist', () => {
-		expect(VersionControllerUtils).toExist();
+		expect(VersionControllerUtils).toBeTruthy();
 	});
 
 	it('validating getCheckOutStatusKindByUserID - without "UserID"', () => {
 		var result = VersionControllerUtils.getCheckOutStatusKindByUserID(status);
 		expect(result.status).toBe(status);
-		expect(result.isCheckedOut).toBe(true);
+		expect(result.isCheckedOut).toBe(false);
 	});
 
 	it('validating getCheckOutStatusKindByUserID - without "UserID" with locking user', () => {
@@ -45,12 +42,11 @@
 	});
 
 	it('validating getCheckOutStatusKindByUserID - with "UserID" with configuration set', () => {
-		const userId = 'att';
+		const Uid = 'ecomp';
 
-		Configuration.set('ATTUserID', userId);
-		var result = VersionControllerUtils.getCheckOutStatusKindByUserID(status, userId);
-		Configuration.set('ATTUserID', undefined);
-
+		Configuration.set('UserID', Uid);
+		var result = VersionControllerUtils.getCheckOutStatusKindByUserID(status, Uid);
+		Configuration.set('UserID', undefined);
 		expect(result.status).toBe(status);
 		expect(result.isCheckedOut).toBe(true);
 	});
@@ -58,48 +54,31 @@
 
 
 	it('validating isCheckedOutByCurrentUser - when resource is not checked out', () => {
-		const currentUser = 'current';
-		const resource = deepFreeze({
-			version: '0.6',
-			viewableVersions: ['0.1', '0.2', '0.3', '0.4', '0.5', '0.6'],
-			status: 'Final'
-		});
+		const resource = VersionControllerUtilsFactory.build({status: statusEnum.SUBMIT_STATUS});
 
-		Configuration.set('ATTUserID', currentUser);
+		Configuration.set('UserID', currentUser);
 		const result = VersionControllerUtils.isCheckedOutByCurrentUser(resource);
-		Configuration.set('ATTUserID', undefined);
+		Configuration.set('UserID', undefined);
 
 		expect(result).toBe(false);
 	});
 
 	it('validating isCheckedOutByCurrentUser - when resource is checked out', () => {
-		const currentUser = 'current';
-		const resource = deepFreeze({
-			version: '0.6',
-			viewableVersions: ['0.1', '0.2', '0.3', '0.4', '0.5', '0.6'],
-			status: 'Locked',
-			lockingUser: 'current'
-		});
+		const resource = VersionControllerUtilsFactory.build();
 
-		Configuration.set('ATTUserID', currentUser);
+		Configuration.set('UserID', currentUser);
 		const result = VersionControllerUtils.isCheckedOutByCurrentUser(resource);
-		Configuration.set('ATTUserID', undefined);
+		Configuration.set('UserID', undefined);
 
 		expect(result).toBe(true);
 	});
 
 	it('validating isCheckedOutByCurrentUser - when resource is checked out by another user', () => {
-		const currentUser = 'current';
-		const resource = deepFreeze({
-			version: '0.6',
-			viewableVersions: ['0.1', '0.2', '0.3', '0.4', '0.5', '0.6'],
-			status: 'Locked',
-			lockingUser: 'another'
-		});
+		const resource = VersionControllerUtilsFactory.build({lockingUser: 'another'});
 
-		Configuration.set('ATTUserID', currentUser);
+		Configuration.set('UserID', currentUser);
 		const result = VersionControllerUtils.isCheckedOutByCurrentUser(resource);
-		Configuration.set('ATTUserID', undefined);
+		Configuration.set('UserID', undefined);
 
 		expect(result).toBe(false);
 	});
@@ -107,66 +86,43 @@
 
 
 	it('validating isReadOnly - when resource is not checked out', () => {
-		const currentUser = 'current';
-		const resource = deepFreeze({
-			version: '0.6',
-			viewableVersions: ['0.1', '0.2', '0.3', '0.4', '0.5', '0.6'],
-			status: 'Final'
-		});
+		const resource = VersionControllerUtilsFactory.build({status: statusEnum.SUBMIT_STATUS});
 
-		Configuration.set('ATTUserID', currentUser);
+		Configuration.set('UserID', currentUser);
 		const result = VersionControllerUtils.isReadOnly(resource);
-		Configuration.set('ATTUserID', undefined);
+		Configuration.set('UserID', undefined);
 
 		expect(result).toBe(true);
 	});
 
 	it('validating isReadOnly - when resource is checked out', () => {
-		const currentUser = 'current';
-		const resource = deepFreeze({
-			version: '0.6',
-			viewableVersions: ['0.1', '0.2', '0.3', '0.4', '0.5', '0.6'],
-			status: 'Locked',
-			lockingUser: 'current'
-		});
+		const resource = VersionControllerUtilsFactory.build();
 
-		Configuration.set('ATTUserID', currentUser);
+		Configuration.set('UserID', currentUser);
 		const result = VersionControllerUtils.isReadOnly(resource);
-		Configuration.set('ATTUserID', undefined);
+		Configuration.set('UserID', undefined);
 
 		expect(result).toBe(false);
 	});
 
 	it('validating isReadOnly - when version of resource is not latest', () => {
-		const currentUser = 'current';
-		const resource = deepFreeze({
-			version: '0.2',
-			viewableVersions: ['0.1', '0.2', '0.3', '0.4', '0.5', '0.6'],
-			status: 'Locked',
-			lockingUser: 'current'
-		});
 
-		Configuration.set('ATTUserID', currentUser);
+		const resource = VersionControllerUtilsFactory.build({version: defaultVersions[defaultVersions.length - 2]});
+
+		Configuration.set('UserID', currentUser);
 		const result = VersionControllerUtils.isReadOnly(resource);
-		Configuration.set('ATTUserID', undefined);
+		Configuration.set('UserID', undefined);
 
 		expect(result).toBe(true);
 	});
 
 	it('validating isReadOnly - when resource is checked out by another user', () => {
-		const currentUser = 'current';
-		const resource = deepFreeze({
-			version: '0.6',
-			viewableVersions: ['0.1', '0.2', '0.3', '0.4', '0.5', '0.6'],
-			status: 'Locked',
-			lockingUser: 'another'
-		});
+		const resource = VersionControllerUtilsFactory.build({lockingUser: 'another'});
 
-		Configuration.set('ATTUserID', currentUser);
+		Configuration.set('UserID', currentUser);
 		const result = VersionControllerUtils.isReadOnly(resource);
-		Configuration.set('ATTUserID', undefined);
+		Configuration.set('UserID', undefined);
 
 		expect(result).toBe(true);
 	});
 });
-
diff --git a/openecomp-ui/test/nfvo-components/storyshots.test.js b/openecomp-ui/test/nfvo-components/storyshots.test.js
new file mode 100644
index 0000000..4d1bdbe
--- /dev/null
+++ b/openecomp-ui/test/nfvo-components/storyshots.test.js
@@ -0,0 +1,2 @@
+import initStoryshots from 'storyshots';
+initStoryshots();
\ No newline at end of file
diff --git a/openecomp-ui/test/onboard/onboardingCatalog/test.js b/openecomp-ui/test/onboard/onboardingCatalog/test.js
new file mode 100644
index 0000000..cc54e31
--- /dev/null
+++ b/openecomp-ui/test/onboard/onboardingCatalog/test.js
@@ -0,0 +1,63 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+import {storeCreator} from 'sdc-app/AppStore.js';
+import {OnboardingCatalogStoreFactory} from 'test-utils/factories/onboard/OnboardingCatalogFactories.js';
+import {LicenseModelStoreFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
+import OnboardingCatalogActionHelper from 'sdc-app/onboarding/onboard/onboardingCatalog/OnboardingCatalogActionHelper.js';
+import {tabsMapping} from 'sdc-app/onboarding/onboard/onboardingCatalog/OnboardingCatalogConstants.js';
+
+
+describe('Onboarding Catalog Module Tests', () => {
+	it('should return default state', () => {
+		const store = storeCreator();
+		const expectedStore = OnboardingCatalogStoreFactory.build();
+		expect(store.getState().onboard.onboardingCatalog).toEqual(expectedStore);
+	});
+
+	it('should change active tab to All', () => {
+		const store = storeCreator();
+		const expectedStore = OnboardingCatalogStoreFactory.build({activeTab: tabsMapping.ALL});
+		OnboardingCatalogActionHelper.changeActiveTab(store.dispatch, tabsMapping.ALL);
+		expect(store.getState().onboard.onboardingCatalog).toEqual(expectedStore);
+	});
+
+
+	it('should change VSP Overlay', () => {
+		const vendor = LicenseModelStoreFactory.build();
+		const store = storeCreator();
+		const expectedStore = OnboardingCatalogStoreFactory.build({vendorCatalog: {vspOverlay: vendor.id}});
+		OnboardingCatalogActionHelper.changeVspOverlay(store.dispatch, vendor);
+		expect(store.getState().onboard.onboardingCatalog).toEqual(expectedStore);
+	});
+
+	it('should close VSP Overlay', () => {
+		const vendor = LicenseModelStoreFactory.build();
+		const store = storeCreator();
+		const expectedStore = OnboardingCatalogStoreFactory.build({vendorCatalog: {vspOverlay: null}});
+		OnboardingCatalogActionHelper.changeVspOverlay(store.dispatch, vendor);
+		OnboardingCatalogActionHelper.changeVspOverlay(store.dispatch, null);
+		expect(store.getState().onboard.onboardingCatalog).toEqual(expectedStore);
+	});
+
+	it('should select vendor', () => {
+		const vendor = LicenseModelStoreFactory.build();
+		const store = storeCreator();
+		const expectedStore = OnboardingCatalogStoreFactory.build({vendorCatalog: {selectedVendor: vendor}});
+		OnboardingCatalogActionHelper.onVendorSelect(store.dispatch, {vendor});
+		expect(store.getState().onboard.onboardingCatalog).toEqual(expectedStore);
+	});
+
+});
diff --git a/openecomp-ui/test/onboard/onboardingCatalog/views.test.js b/openecomp-ui/test/onboard/onboardingCatalog/views.test.js
new file mode 100644
index 0000000..fb038eb
--- /dev/null
+++ b/openecomp-ui/test/onboard/onboardingCatalog/views.test.js
@@ -0,0 +1,143 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {defaultStoreFactory} from 'test-utils/factories/onboard/OnboardingCatalogFactories.js';
+import {FinalizedLicenseModelFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {mapStateToProps} from 'sdc-app/onboarding/onboard/Onboard.js';
+import OnboardingCatalogView from 'sdc-app/onboarding/onboard/onboardingCatalog/OnboardingCatalogView.jsx';
+import VendorItem from 'sdc-app/onboarding/onboard/onboardingCatalog/VendorItem.jsx';
+import VSPOverlay from 'sdc-app/onboarding/onboard/onboardingCatalog/VSPOverlay.jsx';
+import CatalogItemDetails from 'sdc-app/onboarding/onboard/CatalogItemDetails.jsx';
+import DetailsCatalogView from 'sdc-app/onboarding/onboard/DetailsCatalogView.jsx';
+
+describe('OnBoarding Catalog test - View: ', function () {
+
+
+	it('mapStateToProps mapper exists', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it('mapStateToProps data test', () => {
+
+		const licenseModelList = FinalizedLicenseModelFactory.buildList(3);
+		const softwareProductList = VSPEditorFactory.buildList(4);
+		const data = defaultStoreFactory.build({licenseModelList, softwareProductList});
+
+		var results = mapStateToProps(data);
+		expect(results.softwareProductList).toBeTruthy();
+		expect(results.licenseModelList).toBeTruthy();
+		expect(results.activeTab).toBeTruthy();
+		expect(results.licenseModelList.length).toEqual(3);
+	});
+
+	it('licenseModelList creating algorithm test', () => {
+
+		const finalizedLicenseModelList = FinalizedLicenseModelFactory.buildList(3);
+		const licenseModelList = [...finalizedLicenseModelList];
+		const finalizedSoftwareProductList = VSPEditorFactory.buildList(4 ,{vendorId: finalizedLicenseModelList[0].id});
+		const softwareProductList = [...finalizedSoftwareProductList];
+		const data = defaultStoreFactory.build({licenseModelList, finalizedLicenseModelList, softwareProductList, finalizedSoftwareProductList});
+
+		var results = mapStateToProps(data);
+		expect(results.finalizedLicenseModelList[0].softwareProductList.length).toEqual(finalizedSoftwareProductList.length);
+	});
+
+
+	it('Catalog view test', () => {
+
+		const dummyFunc = () => {};
+		const licenseModelList = FinalizedLicenseModelFactory.buildList(3);
+		const softwareProductList = VSPEditorFactory.buildList(4 ,{vendorId: licenseModelList[0].id});
+		const data = defaultStoreFactory.build({licenseModelList, softwareProductList});
+
+		const func = {
+			onAddLicenseModelClick: dummyFunc,
+			onAddSoftwareProductClick: dummyFunc,
+			closeVspOverlay: dummyFunc,
+			onVspOverlayChange: dummyFunc,
+			onTabClick: dummyFunc,
+			onSearch: dummyFunc,
+			onSelectLicenseModel: dummyFunc,
+			onSelectSoftwareProduct: dummyFunc,
+			resetOnboardingCatalogStore: ''
+		};
+
+		let params = {...func, ...mapStateToProps(data)};
+		let CatalogView = TestUtils.renderIntoDocument(<OnboardingCatalogView
+			{...params}/>);
+		expect(CatalogView).toBeTruthy();
+	});
+
+	it('VendorItem view test', () => {
+		let vendor = FinalizedLicenseModelFactory.build();
+		const dummyFunc = () => {};
+		let params = {
+			softwareProductList: VSPEditorFactory.buildList(4 ,{vendorId: vendor.id}),
+			vendor,
+			onSelectVSP: dummyFunc,
+			shouldShowOverlay: false,
+			onVendorSelect: dummyFunc,
+			onAddVSP: dummyFunc,
+			onVSPIconClick: dummyFunc,
+		};
+
+		let VendorItemView = TestUtils.renderIntoDocument(<VendorItem{...params}/>);
+		expect(VendorItemView).toBeTruthy();
+	});
+
+
+	it('VSPOverlay view test', () => {
+
+		let params = {
+			VSPList: VSPEditorFactory.buildList(10 ,{vendorId: '1'}),
+			onSelectVSP: () => {}
+		};
+
+		let VSPOverlayView = TestUtils.renderIntoDocument(<div><VSPOverlay {...params}/></div>);
+		expect(VSPOverlayView).toBeTruthy();
+	});
+
+	it('CatalogItemDetails view test', () => {
+
+		let params = {
+			catalogItemData: FinalizedLicenseModelFactory.build(),
+			onSelect: () => {},
+			catalogItemTypeClass: ''
+		};
+
+		let CatalogItemDetailsView = TestUtils.renderIntoDocument(<div><CatalogItemDetails {...params}/></div>);
+		expect(CatalogItemDetailsView).toBeTruthy();
+	});
+
+	it('DetailsCatalogView view test', () => {
+
+		let params = {
+			VLMList: FinalizedLicenseModelFactory.buildList(3),
+			VSPList:  VSPEditorFactory.buildList(4),
+			onSelectVLM: () => {},
+			onSelectVSP: () => {},
+			onAddVLM: () => {},
+			onAddVSP: () => {},
+			filter: ''
+		};
+
+		let AllCatalog = TestUtils.renderIntoDocument(<DetailsCatalogView {...params}/>);
+		expect(AllCatalog).toBeTruthy();
+	});
+});
diff --git a/openecomp-ui/test/onboard/test.js b/openecomp-ui/test/onboard/test.js
new file mode 100644
index 0000000..18bb042
--- /dev/null
+++ b/openecomp-ui/test/onboard/test.js
@@ -0,0 +1,62 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+import {storeCreator} from 'sdc-app/AppStore.js';
+import {OnboardStoreFactory} from 'test-utils/factories/onboard/OnboardFactories.js';
+import OnboardActionHelper from 'sdc-app/onboarding/onboard/OnboardActionHelper.js';
+import OnboardingCatalogActionHelper from 'sdc-app/onboarding/onboard/onboardingCatalog/OnboardingCatalogActionHelper.js';
+import {tabsMapping as onboardTabsMapping} from 'sdc-app/onboarding/onboard/OnboardConstants.js';
+import {tabsMapping as onboardCatalogTabsMapping} from 'sdc-app/onboarding/onboard/onboardingCatalog/OnboardingCatalogConstants.js';
+
+describe('Onboard Module Tests', () => {
+	it('should return default state', () => {
+		const store = storeCreator();
+		const expectedStore = OnboardStoreFactory.build();
+		expect(store.getState().onboard).toEqual(expectedStore);
+	});
+
+	it('should change active tab to Catalog', () => {
+		const store = storeCreator();
+		const expectedStore = OnboardStoreFactory.build({activeTab: onboardTabsMapping.CATALOG});
+		OnboardActionHelper.changeActiveTab(store.dispatch, onboardTabsMapping.CATALOG);
+		expect(store.getState().onboard).toEqual(expectedStore);
+	});
+
+	it('should change searchValue', () => {
+		const store = storeCreator();
+		const expectedStore = OnboardStoreFactory.build({searchValue: 'hello'});
+		OnboardActionHelper.changeSearchValue(store.dispatch, 'hello');
+		expect(store.getState().onboard).toEqual(expectedStore);
+	});
+
+	it('should clear searchValue', () => {
+		const store = storeCreator();
+		const expectedStore = OnboardStoreFactory.build();
+		OnboardActionHelper.changeSearchValue(store.dispatch, 'hello');
+		OnboardActionHelper.clearSearchValue(store.dispatch);
+		expect(store.getState().onboard).toEqual(expectedStore);
+	});
+
+	it('should reset store', () => {
+		const store = storeCreator();
+		const expectedStore = OnboardStoreFactory.build();
+		OnboardActionHelper.changeSearchValue(store.dispatch, 'hello');
+		OnboardActionHelper.changeActiveTab(store.dispatch, onboardTabsMapping.CATALOG);
+		OnboardingCatalogActionHelper.changeActiveTab(store.dispatch, onboardCatalogTabsMapping.ALL);
+		OnboardActionHelper.resetOnboardStore(store.dispatch, 'hello');
+		expect(store.getState().onboard).toEqual(expectedStore);
+	});
+
+});
diff --git a/openecomp-ui/test/setup.test.js b/openecomp-ui/test/setup.test.js
deleted file mode 100644
index 72f8b95..0000000
--- a/openecomp-ui/test/setup.test.js
+++ /dev/null
@@ -1,25 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-import mockRest from 'test-utils/MockRest.js';
-
-beforeEach(function() {
-	mockRest.resetQueue();
-});
diff --git a/openecomp-ui/test/softwareProduct/attachments/SoftwareProductAttachmentsView.test.js b/openecomp-ui/test/softwareProduct/attachments/SoftwareProductAttachmentsView.test.js
index 839176c..5dfe98f 100644
--- a/openecomp-ui/test/softwareProduct/attachments/SoftwareProductAttachmentsView.test.js
+++ b/openecomp-ui/test/softwareProduct/attachments/SoftwareProductAttachmentsView.test.js
@@ -1,198 +1,76 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import React from 'react';
 import TestUtils from 'react-addons-test-utils';
-import {mapStateToProps}  from 'sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachments.js';
+import {VSPAttachmentTreeNodeWithChildrenFactory, VSPAttachmentDetailedError} from 'test-utils/factories/softwareProduct/SoftwareProductAttachmentsFactories.js';
+import {defaultStoreFactory} from 'test-utils/factories/onboard/OnboardingCatalogFactories.js';
 
+import {mapStateToProps} from 'sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachments.js';
 import SoftwareProductAttachmentsView from 'sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachmentsView.jsx';
-import {statusEnum as versionStatusEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
+import {tabsMapping} from 'sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachmentsConstants.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
 
-
-describe('SoftwareProductAttachments Modal Mapper and View Classes', () => {
-
-	it ('mapStateToProps mapper exists', () => {
-		expect(mapStateToProps).toExist();
+describe('SoftwareProduct Attachments - View: ', function () {
+	it('should mapper exist', () => {
+		expect(mapStateToProps).toBeTruthy();
 	});
 
+	it('should mapper return default data', () => {
 
-	it ('mapStateToProps check data', () => {
+		let attachmentsTree = VSPAttachmentTreeNodeWithChildrenFactory.build();
+		let errorList = VSPAttachmentDetailedError.buildList(3);
+		let versionControllerData = VersionControllerUtilsFactory.build();
 
-		const currentSoftwareProduct = {
-			name: 'VSp',
-			description: 'dfdf',
-			vendorName: 'V1',
-			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
-			category: 'resourceNewCategory.application l4+',
-			subCategory: 'resourceNewCategory.application l4+.database',
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			version: '0.10',
-			viewableVersions: ['0.1', '0.2'],
-			status: versionStatusEnum.CHECK_OUT_STATUS,
-			lockingUser: 'cs0008'
-		};
-		const atTree = {
-			'children': [
-				{
-					'name': 'HEAT',
-					'expanded': true,
-					'type': 'heat',
-					'children': [
-						{
-							'name': 'heat_zxeyCtMHhf2.yaml',
-							'expanded': true,
-							'type': 'heat',
-							'errors': [
-								{
-									'level': 'WARNING',
-									'message': 'Resource is not defined as output and thus cannot be Shared. resource id - network_4'
-								}
-							],
-							'children': [
-								{
-									'name': 'heat_env_zxeyCtMHhf2.env',
-									'type': 'env'
-								}
-							]
-						}
-					]
-				}
-			]
-		};
-		const errorList = [
-			{
-				'errorLevel': 'WARNING',
-				'errorMessage': 'Resource is not defined as output and thus cannot be Shared. resource id - network_4',
-				'name': 'heat_zxeyCtMHhf2.yaml',
-				'hasParent': false,
-				'parentName': 'HEAT',
-				'type': 'heat'
+		let softwareProductAttachments = {
+			heatSetup: {},
+			heatValidation: {
+				attachmentsTree,
+				errorList
 			},
-			{
-				'errorLevel': 'WARNING',
-				'errorMessage': 'Resource is not defined as output and thus cannot be Shared. resource id - network_3',
-				'name': 'heat_zxeyCtMHhf2.yaml',
-				'hasParent': false,
-				'parentName': 'HEAT',
-				'type': 'heat'
-			}
-		];
-
-		var obj = {
-			softwareProduct: {
-				softwareProductEditor: {
-					data:currentSoftwareProduct
-				}, softwareProductAttachments:
-				{
-					attachmentsTree: atTree,
-					errorList: errorList
-				}
-			}
+			heatSetupCache: {},
+			activeTab: tabsMapping.SETUP
 		};
-
-		var results = mapStateToProps(obj);
-		expect(results.attachmentsTree).toExist();
-		expect(results.errorList).toExist();
-		expect(results.hoveredNode).toBe(undefined);
-		expect(results.selectedNode).toBe(undefined);
+		let data = defaultStoreFactory.build({softwareProduct: {softwareProductAttachments, softwareProductEditor: {data: {...versionControllerData}}}});
+		var result = mapStateToProps(data);
+		expect(result).toBeTruthy();
+		expect(result.isValidationAvailable).toBe(false);
 	});
 
+	it('view test', () => {
 
-	it('function does exist', () => {
+		let attachmentsTree = VSPAttachmentTreeNodeWithChildrenFactory.build();
+		let errorList = VSPAttachmentDetailedError.buildList(3);
+		let versionControllerData = VersionControllerUtilsFactory.build();
 
-		const currentSoftwareProduct = {
-			name: 'VSp',
-			description: 'dfdf',
-			vendorName: 'V1',
-			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
-			category: 'resourceNewCategory.application l4+',
-			subCategory: 'resourceNewCategory.application l4+.database',
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			version: '0.10',
-			viewableVersions: ['0.1', '0.2'],
-			status: versionStatusEnum.CHECK_OUT_STATUS,
-			lockingUser: 'cs0008'
-		};
-		const versionControllerData = {
-			version: currentSoftwareProduct.version,
-			viewableVersions:currentSoftwareProduct.viewableVersions,
-			status: currentSoftwareProduct.status,
-			isCheckedOut: true
-		};
-		const atTree = {
-			'children': [
-				{
-					'name': 'HEAT',
-					'expanded': true,
-					'type': 'heat',
-					'children': [
-						{
-							'name': 'heat_zxeyCtMHhf2.yaml',
-							'expanded': true,
-							'type': 'heat',
-							'errors': [
-								{
-									'level': 'WARNING',
-									'message': 'Resource is not defined as output and thus cannot be Shared. resource id - network_4'
-								}
-							],
-							'children': [
-								{
-									'name': 'heat_env_zxeyCtMHhf2.env',
-									'type': 'env'
-								}
-							]
-						}
-					]
-				}
-			]
-		};
-		const errorList = [
-			{
-				'errorLevel': 'WARNING',
-				'errorMessage': 'Resource is not defined as output and thus cannot be Shared. resource id - network_4',
-				'name': 'heat_zxeyCtMHhf2.yaml',
-				'hasParent': false,
-				'parentName': 'HEAT',
-				'type': 'heat'
+		let softwareProductAttachments = {
+			heatSetup: {},
+			heatValidation: {
+				attachmentsTree,
+				errorList
 			},
-			{
-				'errorLevel': 'WARNING',
-				'errorMessage': 'Resource is not defined as output and thus cannot be Shared. resource id - network_3',
-				'name': 'heat_zxeyCtMHhf2.yaml',
-				'hasParent': false,
-				'parentName': 'HEAT',
-				'type': 'heat'
-			}
-		];
-
+			shouldOpenValidationTab: false
+		};
+		let data = defaultStoreFactory.build({softwareProduct: {softwareProductAttachments, softwareProductEditor: {data: {...versionControllerData}}}});
+		var params = mapStateToProps(data);
 
 		var renderer = TestUtils.createRenderer();
-		renderer.render(<SoftwareProductAttachmentsView
-			versionControllerData={versionControllerData}
-			currentSoftwareProduct={currentSoftwareProduct}
-			attachmentsTree={atTree}
-			errorList={errorList}/>);
+		renderer.render(<SoftwareProductAttachmentsView {...params}/>);
 		var renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 	});
 
 });
diff --git a/openecomp-ui/test/softwareProduct/attachments/setup/heatSetup.test.js b/openecomp-ui/test/softwareProduct/attachments/setup/heatSetup.test.js
new file mode 100644
index 0000000..80e9401
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/attachments/setup/heatSetup.test.js
@@ -0,0 +1,49 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+import React from 'react';
+
+import TestUtils from 'react-addons-test-utils';
+import {mapStateToProps} from 'sdc-app/onboarding/softwareProduct/attachments/setup/HeatSetup.js';
+import HeatSetupView from 'sdc-app/onboarding/softwareProduct/attachments/setup/HeatSetupView.jsx';
+import {storeCreator} from 'sdc-app/AppStore.js';
+
+describe('Heat Setup View test: ', function () {
+	it('should mapper exist', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it('should mapper return basic data', () => {
+
+		const store = storeCreator();
+
+		var result = mapStateToProps(store.getState());
+		expect(result).toBeTruthy();
+		expect(result.modules.length).toEqual(0);
+		expect(result.unassigned.length).toEqual(0);
+		expect(result.artifacts.length).toEqual(0);
+		expect(result.nested.length).toEqual(0);
+	});
+
+	it('view test', () => {
+
+		const store = storeCreator();
+
+		var params = mapStateToProps(store.getState());
+
+		let heatSetupView = TestUtils.renderIntoDocument(<HeatSetupView {...params}/>);
+		expect(heatSetupView).toBeTruthy();
+	});
+});
diff --git a/openecomp-ui/test/softwareProduct/attachments/setup/heatSetupActionHelper.test.js b/openecomp-ui/test/softwareProduct/attachments/setup/heatSetupActionHelper.test.js
new file mode 100644
index 0000000..99bbfea
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/attachments/setup/heatSetupActionHelper.test.js
@@ -0,0 +1,142 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import HeatSetupActionHelper from 'sdc-app/onboarding/softwareProduct/attachments/setup/HeatSetupActionHelper.js';
+import {storeCreator} from 'sdc-app/AppStore.js';
+import deepFreeze from 'deep-freeze';
+import {heatSetupManifest} from 'test-utils/factories/softwareProduct/SoftwareProductAttachmentsFactories.js';
+import {actionTypes as HeatSetupActions, fileTypes as HeatSetupFileTypes} from 'sdc-app/onboarding/softwareProduct/attachments/setup/HeatSetupConstants.js';
+
+describe('Heat Setup Action Helper test', () => {
+
+	it('function does exist', () => {
+		expect(HeatSetupActionHelper).toBeTruthy();
+	});
+
+	it('manifest load test', () => {
+
+		const store = storeCreator();
+
+		const manifest = heatSetupManifest.build();
+		store.dispatch({
+			type: HeatSetupActions.MANIFEST_LOADED,
+			response: manifest
+		});
+
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.modules.length).toBe(manifest.modules.length);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.nested.length).toBe(manifest.nested.length);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.unassigned.length).toBe(manifest.unassigned.length);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.artifacts.length).toBe(manifest.artifacts.length);
+
+	});
+
+	it('add module action test', () => {
+		const store = storeCreator();
+		deepFreeze(store.getState());
+
+		const manifest = heatSetupManifest.build();
+		store.dispatch({
+			type: HeatSetupActions.MANIFEST_LOADED,
+			response: manifest
+		});
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.modules.length).toBe(manifest.modules.length);
+		HeatSetupActionHelper.addModule(store.dispatch);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.modules.length).toBe(manifest.modules.length + 1);
+
+	});
+
+	it('delete module action test', () => {
+
+		const store = storeCreator();
+
+		const manifest = heatSetupManifest.build();
+		store.dispatch({
+			type: HeatSetupActions.MANIFEST_LOADED,
+			response: manifest
+		});
+		HeatSetupActionHelper.deleteModule(store.dispatch, manifest.modules[0].name);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.modules.length).toBe(manifest.modules.length - 1);
+
+	});
+
+	it('rename module action test', () => {
+
+		const store = storeCreator();
+
+		const manifest = heatSetupManifest.build();
+		store.dispatch({
+			type: HeatSetupActions.MANIFEST_LOADED,
+			response: manifest
+		});
+		const newName = 'newName';
+		HeatSetupActionHelper.renameModule(store.dispatch, {oldName: manifest.modules[0].name, newName});
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.modules[0].name).toBe(newName);
+
+	});
+
+	it('change module type action test', () => {
+
+		const store = storeCreator();
+
+		const manifest = heatSetupManifest.build();
+		store.dispatch({
+			type: HeatSetupActions.MANIFEST_LOADED,
+			response: manifest
+		});
+		const newValue = 'newvalue.env';
+		HeatSetupActionHelper.changeModuleFileType(store.dispatch,
+			{
+				module: manifest.modules[0],
+				value: {value: newValue},
+				type: HeatSetupFileTypes.ENV.label
+			});
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.modules[0].env).toBe(newValue);
+	});
+
+	it('change artifacts list action test', () => {
+
+		const store = storeCreator();
+
+		const manifest = heatSetupManifest.build();
+		store.dispatch({
+			type: HeatSetupActions.MANIFEST_LOADED,
+			response: manifest
+		});
+		const artifacts = store.getState().softwareProduct.softwareProductAttachments.heatSetup.artifacts;
+		const newArtifacts = [...artifacts,  manifest.unassigned[0]].map(str => (typeof str === 'string' ? {value: str, label: str} : str));;
+		HeatSetupActionHelper.changeArtifactList(store.dispatch, newArtifacts);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.artifacts[1]).toBe(manifest.unassigned[0]);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.unassigned.length).toBe(manifest.unassigned.length - 1);
+	});
+
+	it('add All Unassigned Files To Artifacts action test', () => {
+
+		const store = storeCreator();
+
+		const manifest = heatSetupManifest.build();
+		store.dispatch({
+			type: HeatSetupActions.MANIFEST_LOADED,
+			response: manifest
+		});
+		const artifacts = store.getState().softwareProduct.softwareProductAttachments.heatSetup.artifacts;
+		const unassigned = store.getState().softwareProduct.softwareProductAttachments.heatSetup.unassigned;
+		const newArtifacts = [...artifacts, ...unassigned];
+		HeatSetupActionHelper.addAllUnassignedFilesToArtifacts(store.dispatch, true);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.artifacts).toEqual(newArtifacts);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatSetup.unassigned).toEqual([]);
+	});
+
+});
diff --git a/openecomp-ui/test/softwareProduct/attachments/SoftwareproductAttachmentsHelper.test.js b/openecomp-ui/test/softwareProduct/attachments/validation/HeatValidationActionHelper.test.js
similarity index 70%
rename from openecomp-ui/test/softwareProduct/attachments/SoftwareproductAttachmentsHelper.test.js
rename to openecomp-ui/test/softwareProduct/attachments/validation/HeatValidationActionHelper.test.js
index 851560c..d8a5d1f 100644
--- a/openecomp-ui/test/softwareProduct/attachments/SoftwareproductAttachmentsHelper.test.js
+++ b/openecomp-ui/test/softwareProduct/attachments/validation/HeatValidationActionHelper.test.js
@@ -1,38 +1,29 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
-import SoftwareProductAttachmentsActionHelper from 'sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachmentsActionHelper.js';
+import HeatValidationActionHelper from 'sdc-app/onboarding/softwareProduct/attachments/validation/HeatValidationActionHelper.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 import deepFreeze from 'deep-freeze';
 import {actionTypes} from 'sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js';
+import {nodeFilters} from 'sdc-app/onboarding/softwareProduct/attachments/validation/HeatValidationConstants.js';
 
-
-
-
-
-
-describe('SoftwareProductAttachments ActionHelper', () => {
+describe('HeatValidationActionHelper ActionHelper', () => {
 
 	it('function does exist', () => {
-		expect(SoftwareProductAttachmentsActionHelper).toExist();
+		expect(HeatValidationActionHelper).toBeTruthy();
 	});
 
 	it('toggleExpanded function check', () => {
@@ -86,9 +77,9 @@
 			response: currentSoftwareProduct
 		});
 
-		expect(store.getState().softwareProduct.softwareProductAttachments.attachmentsTree.children[0].expanded).toBe(true);
-		SoftwareProductAttachmentsActionHelper.toggleExpanded(store.dispatch, {path:[0]});
-		expect(store.getState().softwareProduct.softwareProductAttachments.attachmentsTree.children[0].expanded).toBe(false);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatValidation.attachmentsTree.children[0].expanded).toBe(true);
+		HeatValidationActionHelper.toggleExpanded(store.dispatch, {path:[0]});
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatValidation.attachmentsTree.children[0].expanded).toBe(false);
 	});
 
 	it('onSelectNode & onUnselectNode function check', () => {
@@ -96,7 +87,7 @@
 
 		const validationData = {
 			importStructure: {
-				HEAT: [
+				heat: [
 					{
 						fileName: 'hot-mog-0108-bs1271.yml',
 						env: {
@@ -133,7 +124,7 @@
 		};
 
 		deepFreeze(currentSoftwareProduct);
-		
+
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
@@ -142,11 +133,11 @@
 			response: currentSoftwareProduct
 		});
 		let expectedNodeName = 'name';
-		expect(store.getState().softwareProduct.softwareProductAttachments.selectedNode).toBe(undefined);
-		SoftwareProductAttachmentsActionHelper.onSelectNode(store.dispatch, {nodeName:expectedNodeName});
-		expect(store.getState().softwareProduct.softwareProductAttachments.selectedNode).toBe(expectedNodeName);
-		SoftwareProductAttachmentsActionHelper.onUnselectNode(store.dispatch);
-		expect(store.getState().softwareProduct.softwareProductAttachments.selectedNode).toBe(undefined);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatValidation.selectedNode).toBe(nodeFilters.ALL);
+		HeatValidationActionHelper.onSelectNode(store.dispatch, {nodeName:expectedNodeName});
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatValidation.selectedNode).toBe(expectedNodeName);
+		HeatValidationActionHelper.onDeselectNode(store.dispatch);
+		expect(store.getState().softwareProduct.softwareProductAttachments.heatValidation.selectedNode).toBe(nodeFilters.ALL);
 	});
 
 
diff --git a/openecomp-ui/test/softwareProduct/attachments/validation/HeatValidationView.test.js b/openecomp-ui/test/softwareProduct/attachments/validation/HeatValidationView.test.js
new file mode 100644
index 0000000..a5ba297
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/attachments/validation/HeatValidationView.test.js
@@ -0,0 +1,184 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {mapStateToProps}  from 'sdc-app/onboarding/softwareProduct/attachments/validation/HeatValidation.js';
+
+import HeatValidationView from 'sdc-app/onboarding/softwareProduct/attachments/validation/HeatValidationView.jsx';
+import {statusEnum as versionStatusEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
+
+
+describe('SoftwareProductAttachments Modal Mapper and View Classes', () => {
+
+	it ('mapStateToProps mapper exists', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+
+	it ('mapStateToProps check data', () => {
+
+		const currentSoftwareProduct = {
+			name: 'VSp',
+			description: 'dfdf',
+			vendorName: 'V1',
+			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
+			category: 'resourceNewCategory.application l4+',
+			subCategory: 'resourceNewCategory.application l4+.database',
+			id: 'D4774719D085414E9D5642D1ACD59D20',
+			version: '0.10',
+			viewableVersions: ['0.1', '0.2'],
+			status: versionStatusEnum.CHECK_OUT_STATUS,
+			lockingUser: 'cs0008'
+		};
+		const atTree = {
+			'children': [
+				{
+					'name': 'HEAT',
+					'expanded': true,
+					'type': 'heat',
+					'children': [
+						{
+							'name': 'heat_zxeyCtMHhf2.yaml',
+							'expanded': true,
+							'type': 'heat',
+							'errors': [
+								{
+									'level': 'WARNING',
+									'message': 'Resource is not defined as output and thus cannot be Shared. resource id - network_4'
+								}
+							],
+							'children': [
+								{
+									'name': 'heat_env_zxeyCtMHhf2.env',
+									'type': 'env'
+								}
+							]
+						}
+					]
+				}
+			]
+		};
+		const errorList = [
+			{
+				'errorLevel': 'WARNING',
+				'errorMessage': 'Resource is not defined as output and thus cannot be Shared. resource id - network_4',
+				'name': 'heat_zxeyCtMHhf2.yaml',
+				'hasParent': false,
+				'parentName': 'HEAT',
+				'type': 'heat'
+			},
+			{
+				'errorLevel': 'WARNING',
+				'errorMessage': 'Resource is not defined as output and thus cannot be Shared. resource id - network_3',
+				'name': 'heat_zxeyCtMHhf2.yaml',
+				'hasParent': false,
+				'parentName': 'HEAT',
+				'type': 'heat'
+			}
+		];
+
+		var obj = {
+			softwareProduct: {
+				softwareProductEditor: {
+					data:currentSoftwareProduct
+				}, softwareProductAttachments:
+				{
+					heatValidation: {
+						attachmentsTree: atTree,
+						errorList: errorList
+					}
+				}
+			}
+		};
+
+		var results = mapStateToProps(obj);
+		expect(results.attachmentsTree).toBeTruthy();
+		expect(results.errorList).toBeTruthy();
+		expect(results.currentErrors).toBeTruthy();
+		expect(results.currentWarnings).toBeTruthy();
+		expect(results.selectedNode).toBe(undefined);
+	});
+
+
+	it('function does exist', () => {
+
+		const atTree = {
+			'children': [
+				{
+					'name': 'HEAT',
+					'expanded': true,
+					'type': 'heat',
+					'children': [
+						{
+							'name': 'heat_zxeyCtMHhf2.yaml',
+							'expanded': true,
+							'type': 'heat',
+							'errors': [
+								{
+									'level': 'WARNING',
+									'message': 'Resource is not defined as output and thus cannot be Shared. resource id - network_4'
+								}
+							],
+							'children': [
+								{
+									'name': 'heat_env_zxeyCtMHhf2.env',
+									'type': 'env'
+								}
+							]
+						}
+					]
+				}
+			]
+		};
+		const errorList = [
+			{
+				'errorLevel': 'WARNING',
+				'errorMessage': 'Resource is not defined as output and thus cannot be Shared. resource id - network_4',
+				'name': 'heat_zxeyCtMHhf2.yaml',
+				'hasParent': false,
+				'parentName': 'HEAT',
+				'type': 'heat'
+			},
+			{
+				'errorLevel': 'WARNING',
+				'errorMessage': 'Resource is not defined as output and thus cannot be Shared. resource id - network_3',
+				'name': 'heat_zxeyCtMHhf2.yaml',
+				'hasParent': false,
+				'parentName': 'HEAT',
+				'type': 'heat'
+			}
+		];
+		var currentErrors = [];
+		var currentWarnings = [];
+		var onSelect = () => { return null; } ;
+		var onDeSelect = () => { return null; } ;
+		var onToggle = () => { return null; } ;
+
+		var renderer = TestUtils.createRenderer();
+		renderer.render(<HeatValidationView
+			attachmentsTree={atTree}
+			errorList={errorList}
+			currentWarnings={currentWarnings}
+			currentErrors={currentErrors}
+			onSelectNode={onSelect}
+			onDeselectNode={onDeSelect}
+			toggleExpanded = {onToggle} />);
+		var renderedOutput = renderer.getRenderOutput();
+		expect(renderedOutput).toBeTruthy();
+	});
+
+});
diff --git a/openecomp-ui/test/softwareProduct/components/compute/test.js b/openecomp-ui/test/softwareProduct/components/compute/test.js
index 925de30..8d2d1fb 100644
--- a/openecomp-ui/test/softwareProduct/components/compute/test.js
+++ b/openecomp-ui/test/softwareProduct/components/compute/test.js
@@ -1,24 +1,19 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
 import {cloneAndSet} from 'test-utils/Util.js';
@@ -26,14 +21,18 @@
 import Configuration from 'sdc-app/config/Configuration.js';
 import SoftwareProductComponentsActionHelper from 'sdc-app/onboarding/softwareProduct/components/SoftwareProductComponentsActionHelper.js';
 
+import {default as VSPComponentsComputeFactory, VSPComponentsComputeDataMapFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsComputeFactory.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+
 const softwareProductId = '123';
 const vspComponentId = '111';
+const version = VersionControllerUtilsFactory.build().version;
 
 describe('Software Product Components Compute Module Tests', function () {
 
 	let restPrefix = '';
 
-	before(function() {
+	beforeAll(function() {
 		restPrefix = Configuration.get('restPrefix');
 		deepFreeze(restPrefix);
 	});
@@ -42,28 +41,32 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
+		const compute = VSPComponentsComputeFactory.build();
+		const dataMap = VSPComponentsComputeDataMapFactory.build();
+
 		const softwareProductComponentCompute = {
-			data: JSON.stringify({'vmSizing':{'numOfCPUs':'3','fileSystemSizeGB':'888'},'numOfVMs':{'minimum':'2'}}),
-			schema: JSON.stringify({'vmSizing':{'numOfCPUs':'3','fileSystemSizeGB':'888'},'numOfVMs':{'minimum':'2'}})
+			data: JSON.stringify(compute),
+			schema: JSON.stringify(compute)
 		};
 		deepFreeze(softwareProductComponentCompute);
 
 		const softwareProductComponentComputeData = {
-			qdata: JSON.parse(softwareProductComponentCompute.data),
-			qschema: JSON.parse(softwareProductComponentCompute.schema)
+			qdata: compute,
+			dataMap,
+			qgenericFieldInfo: {}
 		};
 		deepFreeze(softwareProductComponentComputeData);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentEditor', softwareProductComponentComputeData);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/components/${vspComponentId}/questionnaire`);
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${vspComponentId}/questionnaire`);
 			expect(data).toEqual(undefined);
 			expect(options).toEqual(undefined);
 			return softwareProductComponentCompute;
 		});
 
-		return SoftwareProductComponentsActionHelper.fetchSoftwareProductComponentQuestionnaire(store.dispatch, {softwareProductId, vspComponentId}).then(() => {
+		return SoftwareProductComponentsActionHelper.fetchSoftwareProductComponentQuestionnaire(store.dispatch, {softwareProductId, version, vspComponentId}).then(() => {
 			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
@@ -72,61 +75,33 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
+		const compute = VSPComponentsComputeFactory.build();
+
 		const softwareProductComponentQuestionnaire = {
 			data: null,
-			schema: JSON.stringify({'vmSizing':{'numOfCPUs':'3','fileSystemSizeGB':'888'},'numOfVMs':{'minimum':'2'}})
+			schema: JSON.stringify(compute)
 		};
 		deepFreeze(softwareProductComponentQuestionnaire);
 
 		const softwareProductComponentQuestionnaireData = {
 			qdata: {},
-			qschema: JSON.parse(softwareProductComponentQuestionnaire.schema)
+			dataMap: {},
+			qgenericFieldInfo: {}
 		};
 		deepFreeze(softwareProductComponentQuestionnaireData);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentEditor', softwareProductComponentQuestionnaireData);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/components/${vspComponentId}/questionnaire`);
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${vspComponentId}/questionnaire`);
 			expect(data).toEqual(undefined);
 			expect(options).toEqual(undefined);
 			return softwareProductComponentQuestionnaire;
 		});
 
-		return SoftwareProductComponentsActionHelper.fetchSoftwareProductComponentQuestionnaire(store.dispatch, {softwareProductId, vspComponentId}).then(() => {
+		return SoftwareProductComponentsActionHelper.fetchSoftwareProductComponentQuestionnaire(store.dispatch, {softwareProductId, version, vspComponentId}).then(() => {
 			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
-	it('Update Software Products Components Compute', () => {
-		const store = storeCreator({
-			softwareProduct: {
-				softwareProductComponents: {
-					componentEditor: {
-						qdata: {
-							numOfCPUs: 3,
-							fileSystemSizeGB: 999
-						},
-						qschema: {
-							type: 'object',
-							properties: {
-								numOfCPUs: {type: 'number'},
-								fileSystemSizeGB: {type: 'number'}
-							}
-						}
-					}
-				}
-			}
-		});
-		deepFreeze(store);
-
-		const data = {numOfCPUs: 5, fileSystemSizeGB: 300};
-		deepFreeze(data);
-
-		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentEditor.qdata', data);
-
-		SoftwareProductComponentsActionHelper.componentQuestionnaireUpdated(store.dispatch, {data});
-
-		expect(store.getState()).toEqual(expectedStore);
-	});
 });
diff --git a/openecomp-ui/test/softwareProduct/components/general/SoftwareProductComponentsGeneral.test.js b/openecomp-ui/test/softwareProduct/components/general/SoftwareProductComponentsGeneral.test.js
index ce2152b..4f6512a 100644
--- a/openecomp-ui/test/softwareProduct/components/general/SoftwareProductComponentsGeneral.test.js
+++ b/openecomp-ui/test/softwareProduct/components/general/SoftwareProductComponentsGeneral.test.js
@@ -1,113 +1,73 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import React from 'react';
 import TestUtils from 'react-addons-test-utils';
 import {mapStateToProps}  from 'sdc-app/onboarding/softwareProduct/components/general/SoftwareProductComponentsGeneral.js';
 import SoftwareProductComponentsGeneralView from 'sdc-app/onboarding/softwareProduct/components/general/SoftwareProductComponentsGeneralView.jsx';
-import {statusEnum as versionStatusEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
+//import {statusEnum as versionStatusEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
+
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {VSPComponentsVersionControllerFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsNetworkFactories.js';
+import {SoftwareProductFactory} from 'test-utils/factories/softwareProduct/SoftwareProductFactory.js';
+import VSPQSchemaFactory from 'test-utils/factories/softwareProduct/SoftwareProductQSchemaFactory.js';
 
 
 describe('SoftwareProductComponentsGeneral Mapper and View Classes', () => {
 	it('mapStateToProps mapper exists', () => {
-		expect(mapStateToProps).toExist();
+		expect(mapStateToProps).toBeTruthy();
 	});
 
 	it('mapStateToProps data test', () => {
 
-		const currentSoftwareProduct = {
-			name: 'VSp',
-			description: 'dfdf',
-			vendorName: 'V1',
-			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
-			category: 'resourceNewCategory.application l4+',
-			subCategory: 'resourceNewCategory.application l4+.database',
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			version: '0.10',
-			viewableVersions: ['0.1', '0.2'],
-			status: versionStatusEnum.CHECK_OUT_STATUS,
-			lockingUser: 'cs0008'
-		};
+		const currentSoftwareProduct = VSPEditorFactory.build();
 
 		var obj = {
-			softwareProduct: {
+			softwareProduct: SoftwareProductFactory.build({
 				softwareProductEditor: {
 					data: currentSoftwareProduct
 				},
 				softwareProductComponents: {
 					componentEditor: {
 						data: {},
-						qdata: {},
-						qschema: {}
+						qdata: {}
 					}
 				}
-			}
+			})
 		};
 
 		var results = mapStateToProps(obj);
-		expect(results.componentData).toExist();
-		expect(results.qdata).toExist();
-		expect(results.qschema).toExist();
+		expect(results.componentData).toBeTruthy();
+		expect(results.qdata).toBeTruthy();
 	});
 
 
 	it('VSP Components general view test', () => {
 
-		const currentSoftwareProduct = {
-			name: 'VSp',
-			description: 'dfdf',
-			vendorName: 'V1',
-			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
-			category: 'resourceNewCategory.application l4+',
-			subCategory: 'resourceNewCategory.application l4+.database',
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			version: '0.10',
-			viewableVersions: ['0.1', '0.2'],
-			status: versionStatusEnum.CHECK_OUT_STATUS,
-			lockingUser: 'cs0008'
-		};
+		const currentSoftwareProduct = VSPEditorFactory.build();
 
 		const softwareProductComponents = {
 			componentEditor: {
 				data: {},
 				qdata: {},
-				qschema: {
-					$schema: 'http://json-schema.org/draft-04/schema#',
-					type: 'object',
-					properties: {
-						general: {
-							type: 'object',
-							properties: {}
-						}
-					}
-				}
+				qschema: VSPQSchemaFactory.build()
 			}
 		};
 
-		const versionControllerData = {
-			version: '1',
-			viewableVersions: [],
-			status: 'locked',
-			isCheckedOut: true
-		};
+		const versionControllerData = VSPComponentsVersionControllerFactory.build();
 
 		const componentData = {
 			name: '',
@@ -122,7 +82,7 @@
 				versionControllerData={versionControllerData}
 				currentSoftwareProduct={currentSoftwareProduct}/>);
 		var renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 
 	});
 
diff --git a/openecomp-ui/test/softwareProduct/components/loadBalancing/softwareProductComponentLoadbalancing.test.js b/openecomp-ui/test/softwareProduct/components/loadBalancing/softwareProductComponentLoadbalancing.test.js
index 69a93b6..0ee9c76 100644
--- a/openecomp-ui/test/softwareProduct/components/loadBalancing/softwareProductComponentLoadbalancing.test.js
+++ b/openecomp-ui/test/softwareProduct/components/loadBalancing/softwareProductComponentLoadbalancing.test.js
@@ -1,110 +1,69 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import React from 'react';
 import TestUtils from 'react-addons-test-utils';
 import {mapStateToProps}  from 'sdc-app/onboarding/softwareProduct/components/loadBalancing/SoftwareProductComponentLoadBalancing.js';
 import SoftwareProductComponentLoadBalancingView from 'sdc-app/onboarding/softwareProduct/components/loadBalancing/SoftwareProductComponentLoadBalancingRefView.jsx';
-import {statusEnum as versionStatusEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
+
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {SoftwareProductFactory} from 'test-utils/factories/softwareProduct/SoftwareProductFactory.js';
+import {VSPComponentsVersionControllerFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsNetworkFactories.js';
+import VSPQSchemaFactory from 'test-utils/factories/softwareProduct/SoftwareProductQSchemaFactory.js';
 
 
 describe('SoftwareProductComponentLoadBalancing Mapper and View Classes', () => {
 	it('mapStateToProps mapper exists', () => {
-		expect(mapStateToProps).toExist();
+		expect(mapStateToProps).toBeTruthy();
 	});
 
 	it('mapStateToProps data test', () => {
 
-		const currentSoftwareProduct = {
-			name: 'VSp',
-			description: 'dfdf',
-			vendorName: 'V1',
-			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
-			category: 'resourceNewCategory.application l4+',
-			subCategory: 'resourceNewCategory.application l4+.database',
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			version: '0.10',
-			viewableVersions: ['0.1', '0.2'],
-			status: versionStatusEnum.CHECK_OUT_STATUS,
-			lockingUser: 'cs0008'
-		};
+		const currentSoftwareProduct = VSPEditorFactory.build();
 
 		var obj = {
-			softwareProduct: {
+			softwareProduct: SoftwareProductFactory.build({
 				softwareProductEditor: {
 					data: currentSoftwareProduct
 				},
 				softwareProductComponents: {
 					componentEditor: {
-						qdata: {},
-						qschema: {}
+						qdata: {}
 					}
 				}
-			}
+			})
 		};
 
 		var results = mapStateToProps(obj);
-		expect(results.qdata).toExist();
-		expect(results.qschema).toExist();
+		expect(results.qdata).toBeTruthy();
 	});
 
 
 	it('VSP Components LoadBalancing view test', () => {
 
-		const currentSoftwareProduct = {
-			name: 'VSp',
-			description: 'dfdf',
-			vendorName: 'V1',
-			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
-			category: 'resourceNewCategory.application l4+',
-			subCategory: 'resourceNewCategory.application l4+.database',
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			version: '0.10',
-			viewableVersions: ['0.1', '0.2'],
-			status: versionStatusEnum.CHECK_OUT_STATUS,
-			lockingUser: 'cs0008'
-		};
+		const currentSoftwareProduct = VSPEditorFactory.build();
 
 		const softwareProductComponents = {
 			componentEditor: {
 				qdata: {},
-				qschema: {
-					$schema: 'http://json-schema.org/draft-04/schema#',
-					type: 'object',
-					properties: {
-						general: {
-							type: 'object',
-							properties: {}
-						}
-					}
-				}
+				qschema: VSPQSchemaFactory.build()
 			}
 		};
 
-		const versionControllerData = {
-			version: '1',
-			viewableVersions: [],
-			status: 'locked',
-			isCheckedOut: true
-		};
+		const versionControllerData = VSPComponentsVersionControllerFactory.build();
 
 		var renderer = TestUtils.createRenderer();
 		renderer.render(
@@ -115,7 +74,7 @@
 				softwareProductId='123'
 				componentId='321'/>);
 		var renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 
 	});
 
diff --git a/openecomp-ui/test/softwareProduct/components/monitoring/SoftwareProductComponentsMonitoring.test.js b/openecomp-ui/test/softwareProduct/components/monitoring/SoftwareProductComponentsMonitoring.test.js
index 2f1ea12..24658f1 100644
--- a/openecomp-ui/test/softwareProduct/components/monitoring/SoftwareProductComponentsMonitoring.test.js
+++ b/openecomp-ui/test/softwareProduct/components/monitoring/SoftwareProductComponentsMonitoring.test.js
@@ -1,57 +1,53 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import React from 'react';
 import TestUtils from 'react-addons-test-utils';
 import {mapStateToProps} from 'sdc-app/onboarding/softwareProduct/components/monitoring/SoftwareProductComponentsMonitoring.js';
 import SoftwareProductComponentsMonitoringView from 'sdc-app/onboarding/softwareProduct/components/monitoring/SoftwareProductComponentsMonitoringView.jsx';
 
+import {VSPComponentsMonitoringViewFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsMonitoringFactories.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+
+const version = VersionControllerUtilsFactory.build();
+
 describe('SoftwareProductComponentsMonitoring Module Tests', function () {
 
 	it('should mapper exist', () => {
-		expect(mapStateToProps).toExist();
+		expect(mapStateToProps).toBeTruthy();
 	});
 
 	it('should return empty file names', () => {
-		let softwareProduct = {softwareProductEditor: {data: {}}, softwareProductComponents: {monitoring: {}}};
+		let softwareProduct = {softwareProductEditor: {data: {...version}}, softwareProductComponents: {monitoring: {}}};
 		var results = mapStateToProps({softwareProduct});
 		expect(results.trapFilename).toEqual(undefined);
 		expect(results.pollFilename).toEqual(undefined);
 	});
 
 	it('should return trap file name', () => {
-		const monitoring = {
-			trapFilename: '123'
-		};
-		let softwareProduct = {softwareProductEditor: {data: {}}, softwareProductComponents: {monitoring}};
+		const monitoring = VSPComponentsMonitoringViewFactory.build({}, {snmpTrapFlag: true});
+		let softwareProduct = {softwareProductEditor: {data: {...version}}, softwareProductComponents: {monitoring}};
 		var results = mapStateToProps({softwareProduct});
 		expect(results.trapFilename).toEqual(monitoring.trapFilename);
 		expect(results.pollFilename).toEqual(undefined);
 	});
 
 	it('should return poll file names', () => {
-		const monitoring = {
-			pollFilename: '123'
-		};
-		let softwareProduct = {softwareProductEditor: {data: {}}, softwareProductComponents: {monitoring}};
+		const monitoring = VSPComponentsMonitoringViewFactory.build({}, {snmpPollFlag: true});
+		let softwareProduct = {softwareProductEditor: {data: {...version}}, softwareProductComponents: {monitoring}};
 		var results = mapStateToProps({softwareProduct});
 		expect(results.trapFilename).toEqual(undefined);
 		expect(results.pollFilename).toEqual(monitoring.pollFilename);
@@ -59,15 +55,12 @@
 		let renderer = TestUtils.createRenderer();
 		renderer.render(<SoftwareProductComponentsMonitoringView {...results} />);
 		let renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 	});
 
 	it('should return both file names', () => {
-		const monitoring = {
-			trapFilename: '1234',
-			trapFilename: '123'
-		};
-		let softwareProduct = {softwareProductEditor: {data: {}}, softwareProductComponents: {monitoring}};
+		const monitoring =  VSPComponentsMonitoringViewFactory.build({}, {snmpTrapFlag: true, snmpPollFlag: true});
+		let softwareProduct = {softwareProductEditor: {data: {...version}}, softwareProductComponents: {monitoring}};
 		var results = mapStateToProps({softwareProduct});
 		expect(results.trapFilename).toEqual(monitoring.trapFilename);
 		expect(results.pollFilename).toEqual(monitoring.pollFilename);
@@ -75,7 +68,7 @@
 		let renderer = TestUtils.createRenderer();
 		renderer.render(<SoftwareProductComponentsMonitoringView {...results} />);
 		let renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 	});
 
 	it('should change state to dragging', done => {
diff --git a/openecomp-ui/test/softwareProduct/components/monitoring/test.js b/openecomp-ui/test/softwareProduct/components/monitoring/test.js
index 172db65..dd0f850 100644
--- a/openecomp-ui/test/softwareProduct/components/monitoring/test.js
+++ b/openecomp-ui/test/softwareProduct/components/monitoring/test.js
@@ -1,31 +1,30 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import mockRest from 'test-utils/MockRest.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 import SoftwareProductComponentsMonitoringConstants from 'sdc-app/onboarding/softwareProduct/components/monitoring/SoftwareProductComponentsMonitoringConstants.js';
 import SoftwareProductComponentsMonitoringActionHelper from 'sdc-app/onboarding/softwareProduct/components/monitoring/SoftwareProductComponentsMonitoringActionHelper.js';
 
+import {VSPComponentsMonitoringRestFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsMonitoringFactories.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+
 const softwareProductId = '123';
 const componentId = '123';
+const version = VersionControllerUtilsFactory.build().version;
 
 describe('Software Product Components Monitoring Module Tests', function () {
 
@@ -38,18 +37,16 @@
 
 	it('Fetch for existing files - no files', done => {
 
-		let emptyResult = Object.freeze({
-			snmpTrap: undefined,
-			snmpPoll: undefined
-		});
+		let emptyResult = VSPComponentsMonitoringRestFactory.build();
 
 		mockRest.addHandler('fetch', ({ baseUrl}) => {
-			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/monitors/snmp`);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/monitors/snmp`);
 			return emptyResult;
 		});
 
 		SoftwareProductComponentsMonitoringActionHelper.fetchExistingFiles(store.dispatch, {
 			softwareProductId,
+			version,
 			componentId
 		});
 		setTimeout(()=> {
@@ -62,18 +59,16 @@
 	});
 
 	it('Fetch for existing files - only snmp trap file exists', done => {
-		let response = Object.freeze({
-			snmpTrap: 'asdfasdf',
-			snmpPoll: undefined
-		});
+		let response = VSPComponentsMonitoringRestFactory.build({}, {snmpTrapFlag: true});
 
 		mockRest.addHandler('fetch', ({ baseUrl}) => {
-			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/monitors/snmp`);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/monitors/snmp`);
 			return response;
 		});
 
 		SoftwareProductComponentsMonitoringActionHelper.fetchExistingFiles(store.dispatch, {
 			softwareProductId,
+			version,
 			componentId
 		});
 		setTimeout(()=> {
@@ -85,18 +80,16 @@
 	});
 
 	it('Fetch for existing files - only snmp poll file exists', done => {
-		let response = Object.freeze({
-			snmpPoll: 'asdfasdf',
-			snmpTrap: undefined
-		});
+		let response  = VSPComponentsMonitoringRestFactory.build({}, {snmpPollFlag: true});
 
 		mockRest.addHandler('fetch', ({baseUrl}) => {
-			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/monitors/snmp`);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/monitors/snmp`);
 			return response;
 		});
 
 		SoftwareProductComponentsMonitoringActionHelper.fetchExistingFiles(store.dispatch, {
 			softwareProductId,
+			version,
 			componentId
 		});
 		setTimeout(()=> {
@@ -108,18 +101,16 @@
 	});
 
 	it('Fetch for existing files - both files exist', done => {
-		let response = Object.freeze({
-			snmpPoll: 'asdfasdf',
-			snmpTrap: 'asdfgg'
-		});
+		let response = VSPComponentsMonitoringRestFactory.build({}, {snmpTrapFlag: true, snmpPollFlag: true});
 
 		mockRest.addHandler('fetch', ({baseUrl}) => {
-			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/monitors/snmp`);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/monitors/snmp`);
 			return response;
 		});
 
 		SoftwareProductComponentsMonitoringActionHelper.fetchExistingFiles(store.dispatch, {
 			softwareProductId,
+			version,
 			componentId
 		});
 		setTimeout(()=> {
@@ -132,8 +123,8 @@
 
 	it('Upload snmp trap file', done => {
 
-		mockRest.addHandler('create', ({baseUrl}) => {
-			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/monitors/snmp-trap/upload`);
+		mockRest.addHandler('post', ({baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/monitors/snmp-trap/upload`);
 			return {};
 		});
 		var debug = {hello: 'world'};
@@ -142,6 +133,7 @@
 		formData.append('upload', file);
 		SoftwareProductComponentsMonitoringActionHelper.uploadSnmpFile(store.dispatch, {
 			softwareProductId,
+			version,
 			componentId,
 			formData,
 			fileSize: file.size,
@@ -156,8 +148,8 @@
 	});
 
 	it('Upload snmp poll file', done => {
-		mockRest.addHandler('create', ({baseUrl}) => {
-			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/monitors/snmp/upload`);
+		mockRest.addHandler('post', ({baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/monitors/snmp/upload`);
 			return {};
 		});
 		var debug = {hello: 'world'};
@@ -166,6 +158,7 @@
 		formData.append('upload', file);
 		SoftwareProductComponentsMonitoringActionHelper.uploadSnmpFile(store.dispatch, {
 			softwareProductId,
+			version,
 			componentId,
 			formData,
 			fileSize: file.size,
@@ -181,11 +174,12 @@
 
 	it('Delete snmp trap file', done => {
 		mockRest.addHandler('destroy', ({baseUrl}) => {
-			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/monitors/snmp-trap`);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/monitors/snmp-trap`);
 			return {};
 		});
 		SoftwareProductComponentsMonitoringActionHelper.deleteSnmpFile(store.dispatch, {
 			softwareProductId,
+			version,
 			componentId,
 			type: SoftwareProductComponentsMonitoringConstants.SNMP_TRAP
 		});
@@ -198,11 +192,12 @@
 
 	it('Delete snmp poll file', done => {
 		mockRest.addHandler('destroy', ({baseUrl}) => {
-			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/monitors/snmp`);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/monitors/snmp`);
 			return {};
 		});
 		SoftwareProductComponentsMonitoringActionHelper.deleteSnmpFile(store.dispatch, {
 			softwareProductId,
+			version,
 			componentId,
 			type: SoftwareProductComponentsMonitoringConstants.SNMP_POLL
 		});
diff --git a/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNICEditor.test.js b/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNICEditor.test.js
index c9760f7..094b95a 100644
--- a/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNICEditor.test.js
+++ b/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNICEditor.test.js
@@ -1,55 +1,42 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import React from 'react';
 import TestUtils from 'react-addons-test-utils';
 import {mapStateToProps}  from 'sdc-app/onboarding/softwareProduct/components/network/SoftwareProductComponentsNICEditor.js';
 import SoftwareProductComponentsNICEditorView from 'sdc-app/onboarding/softwareProduct/components/network/SoftwareProductComponentsNICEditorView.jsx';
 
-
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {SoftwareProductFactory} from 'test-utils/factories/softwareProduct/SoftwareProductFactory.js';
+import {VSPComponentsNicFactory, VSPComponentsNetworkQDataFactory, VSPComponentsNicFactoryQGenericFieldInfo,
+	VSPComponentsNicFactoryGenericFieldInfo, VSPComponentsNetworkDataMapFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsNetworkFactories.js';
 
 describe('Software Product Component Network NIC Editor and View Classes', () => {
 	it('mapStateToProps mapper exists', () => {
-		expect(mapStateToProps).toExist();
+		expect(mapStateToProps).toBeTruthy();
 	});
 
 
 	it('mapStateToProps data test', () => {
 
-		const currentSoftwareProduct = {
-			name: 'VSp',
-			description: 'dfdf',
-			vendorName: 'V1',
-			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
-			category: 'resourceNewCategory.application l4+',
-			subCategory: 'resourceNewCategory.application l4+.database',
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			version: '0.10',
-			viewableVersions: ['0.1', '0.2'],
-			lockingUser: 'cs0008'
-		};
+		const currentSoftwareProduct = VSPEditorFactory.build();
 
 
 		var obj = {
-			softwareProduct: {
+			softwareProduct: SoftwareProductFactory.build({
 				softwareProductEditor: {
 					data: currentSoftwareProduct
 				},
@@ -58,40 +45,42 @@
 						nicEditor: {
 							data: {},
 							qdata: {},
-							qschema: {}
+							dataMap: {},
+							qgenericFieldInfo: {},
+							genericFieldInfo: {}
 						}
 					}
 				}
-			}
+			})
 		};
 
 		var results = mapStateToProps(obj);
-		expect(results.currentSoftwareProduct).toExist();
-		expect(results.qdata).toExist();
-		expect(results.qschema).toExist();
-		expect(results.data).toExist();
+		expect(results.currentSoftwareProduct).toBeTruthy();
+		expect(results.qdata).toBeTruthy();
+		expect(results.dataMap).toBeTruthy();
+		expect(results.genericFieldInfo).toBeTruthy();
+		expect(results.qgenericFieldInfo).toBeTruthy();
+		expect(results.data).toBeTruthy();
 	});
 
 
 	it('Software Product Component Network NIC Editor View Test', () => {
 
-		const data = {
-			name: '',
-			description: '',
-			networkName: ''
+		const props = {
+			data: VSPComponentsNicFactory.build(),
+			qdata: VSPComponentsNetworkQDataFactory.build(),
+			dataMap: VSPComponentsNetworkDataMapFactory.build(),
+			genericFieldInfo: VSPComponentsNicFactoryGenericFieldInfo.build(),
+			qgenericFieldInfo: VSPComponentsNicFactoryQGenericFieldInfo.build(),
+			isFormValid: true,
+			formReady: false,
+			protocols: []
 		};
 
-		const qdata = {};
-		const qschema = {};
-
 		var renderer = TestUtils.createRenderer();
-		renderer.render(
-			<SoftwareProductComponentsNICEditorView
-				data={data}
-				qdata={qdata}
-				qschema={qschema}/>);
+		renderer.render(<SoftwareProductComponentsNICEditorView {...props}/>);
 		var renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 
 	});
 });
diff --git a/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNetwork.test.js b/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNetwork.test.js
index 520fde7..d35659c 100644
--- a/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNetwork.test.js
+++ b/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNetwork.test.js
@@ -1,110 +1,75 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import React from 'react';
 import TestUtils from 'react-addons-test-utils';
 import {mapStateToProps}  from 'sdc-app/onboarding/softwareProduct/components/network/SoftwareProductComponentsNetworkList.js';
 import SoftwareProductComponentsNetworkListView from 'sdc-app/onboarding/softwareProduct/components/network/SoftwareProductComponentsNetworkListView.jsx';
-import {statusEnum as versionStatusEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
 
+import {SoftwareProductFactory} from 'test-utils/factories/softwareProduct/SoftwareProductFactory.js';
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {VSPComponentsNicWithIdFactory, VSPComponentsVersionControllerFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsNetworkFactories.js';
 
 describe('Software Product Component Network Mapper and View Classes', () => {
 
 	it('mapStateToProps mapper exists', () => {
-		expect(mapStateToProps).toExist();
+		expect(mapStateToProps).toBeTruthy();
 	});
 
 	it('mapStateToProps data test', () => {
 
-		const currentSoftwareProduct = {
-			name: 'VSp',
-			description: 'dfdf',
-			vendorName: 'V1',
-			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
-			category: 'resourceNewCategory.application l4+',
-			subCategory: 'resourceNewCategory.application l4+.database',
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			version: '0.10',
-			viewableVersions: ['0.1', '0.2'],
-			status: versionStatusEnum.CHECK_OUT_STATUS,
-			lockingUser: 'cs0008'
-		};
+		const currentSoftwareProduct = VSPEditorFactory.build();
 
 
 		var obj = {
-			softwareProduct: {
+			softwareProduct: SoftwareProductFactory.build({
 				softwareProductEditor: {
 					data: currentSoftwareProduct
 				},
 				softwareProductComponents: {
 					componentEditor: {
 						qdata: {},
-						qschema: {},
-						data: {}
+						data: {},
+						dataMap: {},
+						qgenericFieldInfo: {},
+						isFormValid: true,
+						formReady: false
 					},
 					network: {
 						nicEditor: {},
 						nicList: []
 					}
 				}
-			}
+			})
 		};
 
 		var results = mapStateToProps(obj);
-		expect(results.qdata).toExist();
-		expect(results.qschema).toExist();
-		expect(results.componentData).toExist();
+		expect(results.qdata).toBeTruthy();
+		expect(results.dataMap).toBeTruthy();
+		expect(results.qgenericFieldInfo).toBeTruthy();
+		expect(results.componentData).toBeTruthy();
 	});
 
 	it('Software Product Component Network List View Test', () => {
 
-		const currentSoftwareProduct = {
-			name: 'VSp',
-			description: 'dfdf',
-			vendorName: 'V1',
-			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
-			category: 'resourceNewCategory.application l4+',
-			subCategory: 'resourceNewCategory.application l4+.database',
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			version: '0.10',
-			viewableVersions: ['0.1', '0.2'],
-			status: versionStatusEnum.CHECK_IN_STATUS,
-			lockingUser: 'cs0008'
-		};
+		const currentSoftwareProduct = VSPEditorFactory.build();
 
-		const versionControllerData = {
-			version: '1',
-			viewableVersions: [],
-			status: 'locked',
-			isCheckedOut: true
-		};
+		const versionControllerData = VSPComponentsVersionControllerFactory.build();
 
-		const nicList = [
-			{
-				name: 'name',
-				networkId: 'network',
-				id: '122',
-				networkName: 'nname'
-			}
-		];
+		const nicList = VSPComponentsNicWithIdFactory.buildList(1);
 
 		var renderer = TestUtils.createRenderer();
 		renderer.render(
@@ -115,7 +80,7 @@
 				componentId='321'
 				nicList={nicList}/>);
 		var renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 
 
 
diff --git a/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNetworkActionHelper.test.js b/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNetworkActionHelper.test.js
index 8c23267..f5a10e2 100644
--- a/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNetworkActionHelper.test.js
+++ b/openecomp-ui/test/softwareProduct/components/network/SoftwareProductComponentsNetworkActionHelper.test.js
@@ -1,33 +1,33 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
-import {expect} from 'chai';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
 import {cloneAndSet} from 'test-utils/Util.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 import SoftwareProductComponentsNetworkActionHelper from 'sdc-app/onboarding/softwareProduct/components/network/SoftwareProductComponentsNetworkActionHelper.js';
 
+import {VSPComponentsNicFactory, VSPComponentsNetworkFactory, VSPComponentsNetworkQDataFactory, VSPComponentsNetworkDataMapFactory, VSPComponentsNicFactoryGenericFieldInfo} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsNetworkFactories.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+import VSPQSchemaFactory from 'test-utils/factories/softwareProduct/SoftwareProductQSchemaFactory.js';
+import {forms} from 'sdc-app/onboarding/softwareProduct/components/SoftwareProductComponentsConstants.js';
+
 const softwareProductId = '123';
 const componentId = '321';
 const nicId = '111';
+const version = VersionControllerUtilsFactory.build().version;
 
 describe('Software Product Components Network Action Helper Tests', function () {
 
@@ -35,23 +35,7 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const NICList = [
-			{
-				name:'oam01_port_0',
-				description:'bbbbbbb',
-				networkId:'A0E578751B284D518ED764D5378EA97C',
-				id:'96D3648338F94DAA9889E9FBB8E59895',
-				networkName:'csb_net'
-			},
-			{
-				name:'oam01_port_1',
-				description:'bbbbbbb',
-				networkId:'378EA97CA0E578751B284D518ED764D5',
-				id:'8E5989596D3648338F94DAA9889E9FBB',
-				networkName:'csb_net_2'
-			}
-
-		];
+		const NICList = VSPComponentsNicFactory.buildList(2);
 
 		deepFreeze(NICList);
 
@@ -60,14 +44,14 @@
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.network.nicList', NICList);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/nics`);
-			expect(data).to.deep.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/nics`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {results: NICList};
 		});
 
-		return SoftwareProductComponentsNetworkActionHelper.fetchNICsList(store.dispatch, {softwareProductId, componentId}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		return SoftwareProductComponentsNetworkActionHelper.fetchNICsList(store.dispatch, {softwareProductId, version, componentId}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 
 	});
@@ -76,12 +60,8 @@
 
 		const store = storeCreator();
 		deepFreeze(store.getState());
-		const data = {
-			name: 'oam01_port_0',
-			description: 'bbbbbbb',
-			networkId: 'A0E578751B284D518ED764D5378EA97C',
-			networkName: 'csb_net'
-		};
+		const data = VSPComponentsNicFactory.build();
+		const genericFieldInfo = VSPComponentsNicFactoryGenericFieldInfo.build();
 
 		const nic = {id: '444'};
 		deepFreeze(data);
@@ -91,20 +71,19 @@
 
 		deepFreeze(expectedData);
 
-		const network = {
+		const network = VSPComponentsNetworkFactory.build({
 			nicEditor: {
-				data: expectedData
-			},
-			nicList: []
-		};
+				data: expectedData,
+				formName: forms.NIC_EDIT_FORM,
+				genericFieldInfo
+			}
+		});
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.network', network);
 
 		SoftwareProductComponentsNetworkActionHelper.openNICEditor(store.dispatch, {nic, data});
 
-		return setTimeout(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
-		}, 100);
+		expect(store.getState()).toEqual(expectedStore);
 	});
 
 	it('close NICE editor', () => {
@@ -112,41 +91,31 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const network = {
-			nicEditor: {},
-			nicList: []
-		};
+		const network = VSPComponentsNetworkFactory.build();
 		deepFreeze(network);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.network', network);
 
 		SoftwareProductComponentsNetworkActionHelper.closeNICEditor(store.dispatch);
 
-		return setTimeout(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
-		}, 100);
+		expect(store.getState()).toEqual(expectedStore);
 	});
 
 	it('Load NIC data', () => {
 
-		const expectedData = {
-			description: 'bbbbbbb',
-			name: 'oam01_port_0',
-			networkId: 'A0E578751B284D518ED764D5378EA97C',
-			networkName: 'csb_net'
-		};
+		const expectedData = VSPComponentsNicFactory.build();
 
 		deepFreeze(expectedData);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/nics/${nicId}`);
-			expect(data).to.deep.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/nics/${nicId}`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return (expectedData);
 		});
 
-		return SoftwareProductComponentsNetworkActionHelper.loadNICData({softwareProductId, componentId, nicId}).then((data) => {
-			expect(data).to.deep.equal(expectedData);
+		return SoftwareProductComponentsNetworkActionHelper.loadNICData({softwareProductId, version, componentId, nicId}).then((data) => {
+			expect(data).toEqual(expectedData);
 		});
 	});
 
@@ -156,119 +125,47 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const qdata = {
-			protocols: {
-				protocolWithHighestTrafficProfile: 'UDP',
-				protocols: ['UDP']
-			},
-			ipConfiguration: {
-				ipv4Required: true
-			}
-		};
-
-		const qschema = {
-			$schema: 'http://json-schema.org/draft-04/schema#',
-			type: 'object',
-			properties: {
-				'protocols': {
-					type: 'object',
-					properties: {}
-				}
-			}
-		};
+		const qdata = VSPComponentsNetworkQDataFactory.build();
+		const dataMap = VSPComponentsNetworkDataMapFactory.build();
+		const qgenericFieldInfo = {};
+		const qschema = VSPQSchemaFactory.build();
 
 		deepFreeze(qdata);
+		deepFreeze(dataMap);
 		deepFreeze(qschema);
 
 
-		const network = {
+		const network = VSPComponentsNetworkFactory.build({
 			nicEditor: {
 				qdata,
-				qschema
-			},
-			nicList: []
-		};
+				dataMap,
+				qgenericFieldInfo
+			}
+		});
 		deepFreeze(network);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.network', network);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/nics/${nicId}/questionnaire`);
-			expect(data).to.deep.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/nics/${nicId}/questionnaire`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return ({data: JSON.stringify(qdata), schema: JSON.stringify(qschema)});
 		});
 
-		return SoftwareProductComponentsNetworkActionHelper.loadNICQuestionnaire(store.dispatch, {softwareProductId, componentId, nicId}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		return SoftwareProductComponentsNetworkActionHelper.loadNICQuestionnaire(store.dispatch, {softwareProductId, version, componentId, nicId}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
-	it('update NIC Data', () => {
-		const store = storeCreator();
-		deepFreeze(store.getState());
-
-		const data = {test: '123'};
-		deepFreeze(data);
-
-		const network = {
-			nicEditor: {
-				data
-			},
-			nicList: []
-		};
-
-		deepFreeze(network);
-
-		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.network', network);
-
-		SoftwareProductComponentsNetworkActionHelper.updateNICData(store.dispatch, {deltaData:data});
-
-		return setTimeout(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
-		}, 100);
-
-	});
-
-	it('update NIC Questionnaire', () => {
-		const store = storeCreator();
-		deepFreeze(store.getState());
-
-		const qdata = {
-			test: '123'
-		};
-		const network = {
-			nicEditor: {
-				qdata,
-				qschema: undefined
-			},
-			nicList: []
-		};
-		deepFreeze(network);
-
-		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.network', network);
-
-		SoftwareProductComponentsNetworkActionHelper.updateNICQuestionnaire(store.dispatch, {data:qdata});
-
-		return setTimeout(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
-		}, 100);
-
-	});
-
 	it('save NIC Data And Questionnaire', () => {
 
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const qdata = {
-			qtest: '111'
-		};
-		const data = {
-			name: '2222',
-			description: 'blabla',
-			networkId: '123445'
-		};
+		const qdata = VSPComponentsNetworkQDataFactory.build();
+		const data = VSPComponentsNicFactory.build();
 
 		const expectedData = {...data, id: nicId};
 
@@ -282,22 +179,22 @@
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.network', network);
 		deepFreeze(expectedStore);
 
-		mockRest.addHandler('save', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/nics/${nicId}/questionnaire`);
-			expect(data).to.deep.equal(qdata);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/nics/${nicId}/questionnaire`);
+			expect(data).toEqual(qdata);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
-		mockRest.addHandler('save', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/nics/${nicId}`);
-			expect(data).to.deep.equal(data);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${componentId}/nics/${nicId}`);
+			expect(data).toEqual(data);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
-		return SoftwareProductComponentsNetworkActionHelper.saveNICDataAndQuestionnaire(store.dispatch, {softwareProductId, componentId, qdata, data: expectedData}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		return SoftwareProductComponentsNetworkActionHelper.saveNICDataAndQuestionnaire(store.dispatch, {softwareProductId, version, componentId, qdata, data: expectedData}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
diff --git a/openecomp-ui/test/softwareProduct/components/processes/SoftwareProductComponentsProcessesEditor.test.js b/openecomp-ui/test/softwareProduct/components/processes/SoftwareProductComponentsProcessesEditor.test.js
new file mode 100644
index 0000000..f3653fb
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/components/processes/SoftwareProductComponentsProcessesEditor.test.js
@@ -0,0 +1,57 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {mapStateToProps}  from 'sdc-app/onboarding/softwareProduct/components/processes/SoftwareProductComponentProcessesEditor.js';
+import SoftwareProductComponentProcessesEditorView from 'sdc-app/onboarding/softwareProduct/components/processes/SoftwareProductComponentProcessesEditorView.jsx';
+
+describe('Software Product Components  Processes Editor Module Tests', function () {
+
+	it('should mapper exist', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it('should return empty data', () => {
+
+		var state = {
+			softwareProduct: {
+				softwareProductComponents: {
+					componentProcesses: {
+						processesList: [],
+						processesEditor: {data: {}}
+					}
+				}
+			}
+		};
+
+		var results = mapStateToProps(state);
+		expect(results.data).toEqual({});
+		expect(results.previousData).toEqual(undefined);
+	});
+
+	it('jsx view test', () => {
+		var view = TestUtils.renderIntoDocument(
+			<SoftwareProductComponentProcessesEditorView
+				isReadOnlyMode={true}
+				data={{name: '1', description: '1', artifactName: '1'}}
+				previousData={{}}
+				onDataChanged={() => {}}
+				onSubmit={() => {}}
+				onClose={() => {}}/>);
+		expect(view).toBeTruthy();
+	});
+});
diff --git a/openecomp-ui/test/softwareProduct/components/processes/SoftwareProductComponentsProcessesView.test.js b/openecomp-ui/test/softwareProduct/components/processes/SoftwareProductComponentsProcessesView.test.js
new file mode 100644
index 0000000..ac86672
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/components/processes/SoftwareProductComponentsProcessesView.test.js
@@ -0,0 +1,77 @@
+/*!
+* Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+*
+* 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.
+*/
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+
+import {mapStateToProps} from 'sdc-app/onboarding/softwareProduct/components/processes/SoftwareProductComponentProcessesList.js';
+import SoftwareProductComponentsProcessesView from 'sdc-app/onboarding/softwareProduct/components/processes/SoftwareProductComponentsProcessesListView.jsx';
+
+import {VSPProcessStoreFactory} from 'test-utils/factories/softwareProduct/SoftwareProductProcessFactories.js';
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {VSPComponentsFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsFactories.js';
+
+describe('SoftwareProductComponetsProcesses Mapper and View Classes', () => {
+	it('mapStateToProps mapper exists', () => {		
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it('mapStateToProps data test', () => {		
+		const currentSoftwareProduct = VSPEditorFactory.build();
+
+		const processesList = VSPProcessStoreFactory.buildList(2);
+
+		var state = {
+			softwareProduct: {
+				softwareProductEditor: {
+					data: currentSoftwareProduct
+				},
+				softwareProductComponents: {
+					componentProcesses: {
+						processesList,
+						processesEditor: {
+							data: {}
+						}
+					}
+				}
+			}
+		};
+		var results = mapStateToProps(state);
+		expect(results.processesList.length).toBe(2);
+	});
+
+	it('view simple test', () => {		
+		const currentSoftwareProduct = VSPEditorFactory.build();
+		const currentSoftwareProductComponent = VSPComponentsFactory.build();
+		const processesList = VSPProcessStoreFactory.buildList(2);
+
+		var renderer = TestUtils.createRenderer();
+		renderer.render(
+			<SoftwareProductComponentsProcessesView
+				processesList={processesList}
+				currentSoftwareProduct={currentSoftwareProduct}
+				softwareProductId={currentSoftwareProduct.id}
+				componentId={currentSoftwareProductComponent.id}
+				onAddProcess={() => {}}
+				onEditProcessClick={() => {}}
+				onDeleteProcessClick={() => {}}
+				isDisplayEditor={false}
+				isReadOnlyMode={false}/>
+			);
+		var renderedOutput = renderer.getRenderOutput();
+		expect(renderedOutput).toBeTruthy();
+	});
+});
diff --git a/openecomp-ui/test/softwareProduct/components/processes/test.js b/openecomp-ui/test/softwareProduct/components/processes/test.js
index 67427d3..02009e6 100644
--- a/openecomp-ui/test/softwareProduct/components/processes/test.js
+++ b/openecomp-ui/test/softwareProduct/components/processes/test.js
@@ -1,51 +1,43 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
-import {expect} from 'chai';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
+import {buildFromExistingObject} from 'test-utils/Util.js';
 import {cloneAndSet} from 'test-utils/Util.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 import SoftwareProductComponentProcessesActionHelper from 'sdc-app/onboarding/softwareProduct/components/processes/SoftwareProductComponentProcessesActionHelper.js';
 
+import {
+	VSPProcessStoreWithArtifactNameFactory,
+	VSPProcessPostFactory,
+	VSPProcessStoreFactory,
+	VSPProcessPostFactoryWithType,
+	VSPProcessStoreFactoryWithType} from 'test-utils/factories/softwareProduct/SoftwareProductProcessFactories.js';
+
 const softwareProductId = '123';
 const componentId = '222';
+const versionId = '1';
+const version = {id: versionId, label: versionId};
+
 describe('Software Product Component Processes Module Tests', function () {
 	it('Get Software Products Processes List', () => {
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const softwareProductProcessesList = [
-			{
-				name: 'Pr1',
-				description: 'hjhj',
-				id: 'EBADF561B7FA4A788075E1840D0B5971',
-				artifactName: 'artifact'
-			},
-			{
-				name: 'Pr1',
-				description: 'hjhj',
-				id: '2F47447D22DB4C53B020CA1E66201EF2',
-				artifactName: 'artifact'
-			}
-		];
+		const softwareProductProcessesList = VSPProcessStoreWithArtifactNameFactory.buildList(2);
 
 		deepFreeze(softwareProductProcessesList);
 
@@ -54,25 +46,20 @@
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentProcesses.processesList', softwareProductProcessesList);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/processes`);
-			expect(data).to.deep.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/components/${componentId}/processes`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {results: softwareProductProcessesList};
 		});
+		
 
-		return SoftwareProductComponentProcessesActionHelper.fetchProcessesList(store.dispatch, {softwareProductId, componentId}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		return SoftwareProductComponentProcessesActionHelper.fetchProcessesList(store.dispatch, {softwareProductId, componentId, version}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 	it('Delete Software Products Processes', () => {
-		const softwareProductProcessesList = [
-			{
-				name: 'Pr1',
-				description: 'hjhj',
-				id: 'EBADF561B7FA4A788075E1840D0B5971',
-				artifactName: 'artifact'
-			}
-		];
+		let process = VSPProcessStoreWithArtifactNameFactory.build();
+		const softwareProductProcessesList = [process];
 
 		deepFreeze(softwareProductProcessesList);
 		const store = storeCreator({
@@ -83,15 +70,15 @@
 			}
 		});
 
-		const processId = 'EBADF561B7FA4A788075E1840D0B5971';
+		const processId = process.id;
 		deepFreeze(store.getState());
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentProcesses.processesList', []);
 
 		mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/processes/${processId}`);
-			expect(data).to.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/components/${componentId}/processes/${processId}`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {
 				results: {
 					returnCode: 'OK'
@@ -101,9 +88,10 @@
 
 		return SoftwareProductComponentProcessesActionHelper.deleteProcess(store.dispatch, {
 			process: softwareProductProcessesList[0],
-			softwareProductId, componentId
+			softwareProductId, componentId,
+			version
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
@@ -112,27 +100,18 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const softwareProductPostRequest = {
-			name: 'Pr1',
-			description: 'string'
-		};
-		const softwareProductProcessToAdd = {
-			name: 'Pr1',
-			description: 'string'
-		};
 		const softwareProductProcessFromResponse = 'ADDED_ID';
-		const softwareProductProcessAfterAdd = {
-			...softwareProductProcessToAdd,
-			id: softwareProductProcessFromResponse
-		};
+
+		const softwareProductProcessAfterAdd = VSPProcessStoreFactory.build({id: softwareProductProcessFromResponse});
+		const softwareProductPostRequest = buildFromExistingObject(VSPProcessPostFactory, softwareProductProcessAfterAdd);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentProcesses.processesList', [softwareProductProcessAfterAdd]);
 
-		mockRest.addHandler('create', ({data, options, baseUrl}) => {
+		mockRest.addHandler('post', ({data, options, baseUrl}) => {
 
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/processes`);
-			expect(data).to.deep.equal(softwareProductPostRequest);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/components/${componentId}/processes`);
+			expect(data).toEqual(softwareProductPostRequest);
+			expect(options).toEqual(undefined);
 			return {
 				returnCode: 'OK',
 				value: softwareProductProcessFromResponse
@@ -143,23 +122,55 @@
 			{
 				softwareProductId,
 				previousProcess: null,
-				process: softwareProductProcessToAdd,
-				componentId
+				process: softwareProductPostRequest,
+				componentId,
+				version
 			}
 		).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
+		});
+	});
+
+	it('Add Software Products Processes with type', () => {
+
+		const store = storeCreator();
+		deepFreeze(store.getState());
+
+		const softwareProductPostRequest = VSPProcessPostFactoryWithType.build();
+
+		const softwareProductProcessAfterAdd = VSPProcessStoreFactoryWithType.build(softwareProductPostRequest);
+		const softwareProductProcessFromResponse = softwareProductProcessAfterAdd.id;
+
+		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentProcesses.processesList', [softwareProductProcessAfterAdd]);
+
+		mockRest.addHandler('post', ({data, options, baseUrl}) => {
+
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/components/${componentId}/processes`);
+			expect(data).toEqual(softwareProductPostRequest);
+			expect(options).toEqual(undefined);
+			return {
+				returnCode: 'OK',
+				value: softwareProductProcessFromResponse
+			};
+		});
+
+		return SoftwareProductComponentProcessesActionHelper.saveProcess(store.dispatch,
+			{
+				softwareProductId,
+				previousProcess: null,
+				process: softwareProductPostRequest,
+				componentId,
+				version
+			}
+		).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Update Software Products Processes', () => {
-		const softwareProductProcessesList = [
-			{
-				name: 'Pr1',
-				description: 'string',
-				id: 'EBADF561B7FA4A788075E1840D0B5971',
-				artifactName: 'artifact'
-			}
-		];
+		let process = VSPProcessStoreWithArtifactNameFactory.build();
+
+		const softwareProductProcessesList = [process];
 		deepFreeze(softwareProductProcessesList);
 
 		const store = storeCreator({
@@ -173,28 +184,30 @@
 		});
 		deepFreeze(store.getState());
 
-		const toBeUpdatedProcessId = softwareProductProcessesList[0].id;
-		const previousProcessData = softwareProductProcessesList[0];
-		const processUpdateData = {
-			...softwareProductProcessesList[0],
+		const toBeUpdatedProcessId = process.id;
+		const previousProcessData = process;
+		const processUpdateData = VSPProcessStoreWithArtifactNameFactory.build({
+			...process,
 			name: 'Pr1_UPDATED',
-			description: 'string_UPDATED'
-		};
+			description: 'string_UPDATED',
+			type: 'Other'
+		});
 		deepFreeze(processUpdateData);
 
-		const processPutRequest = {
+		const processPutRequest = VSPProcessPostFactory.build({
 			name: 'Pr1_UPDATED',
-			description: 'string_UPDATED'
-		};
+			description: 'string_UPDATED',
+			type: 'Other'
+		});
 		deepFreeze(processPutRequest);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentProcesses.processesList', [processUpdateData]);
 
 
-		mockRest.addHandler('save', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${componentId}/processes/${toBeUpdatedProcessId}`);
-			expect(data).to.deep.equal(processPutRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/components/${componentId}/processes/${toBeUpdatedProcessId}`);
+			expect(data).toEqual(processPutRequest);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
@@ -203,12 +216,12 @@
 				softwareProductId: softwareProductId,
 				componentId,
 				previousProcess: previousProcessData,
-				process: processUpdateData
+				process: processUpdateData,
+				version
 			}
 		).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 });
-
diff --git a/openecomp-ui/test/softwareProduct/components/storage/test.js b/openecomp-ui/test/softwareProduct/components/storage/test.js
index 87cad36..138c4da 100644
--- a/openecomp-ui/test/softwareProduct/components/storage/test.js
+++ b/openecomp-ui/test/softwareProduct/components/storage/test.js
@@ -1,24 +1,19 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
 import {cloneAndSet} from 'test-utils/Util.js';
@@ -26,14 +21,18 @@
 import Configuration from 'sdc-app/config/Configuration.js';
 import SoftwareProductComponentsActionHelper from 'sdc-app/onboarding/softwareProduct/components/SoftwareProductComponentsActionHelper.js';
 
+import {default as VSPComponentsStorageFactory, VSPComponentsStorageDataMapFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsStorageFactory.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+
 const softwareProductId = '123';
 const vspComponentId = '111';
+const version = VersionControllerUtilsFactory.build().version;
 
 describe('Software Product Components Storage Module Tests', function () {
 
 	let restPrefix = '';
 
-	before(function() {
+	beforeAll(function() {
 		restPrefix = Configuration.get('restPrefix');
 		deepFreeze(restPrefix);
 	});
@@ -42,28 +41,32 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
+		const storage = VSPComponentsStorageFactory.build();
+		const dataMap = VSPComponentsStorageDataMapFactory.build();
+
 		const softwareProductComponentStorage = {
-			data: JSON.stringify({'backup':{'backupType':'OnSite','backupSolution':'76333'},'snapshotBackup':{'snapshotFrequency':'2'}}),
-			schema: JSON.stringify({'backup':{'backupType':'OnSite','backupSolution':'76333'},'snapshotBackup':{'snapshotFrequency':'2'}})
+			data: JSON.stringify(storage),
+			schema: JSON.stringify(storage)
 		};
 		deepFreeze(softwareProductComponentStorage);
 
 		const softwareProductComponentStorageData = {
-			qdata: JSON.parse(softwareProductComponentStorage.data),
-			qschema: JSON.parse(softwareProductComponentStorage.schema)
+			qdata: storage,
+			dataMap: dataMap,
+			qgenericFieldInfo: {}
 		};
 		deepFreeze(softwareProductComponentStorageData);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentEditor', softwareProductComponentStorageData);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/components/${vspComponentId}/questionnaire`);
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${vspComponentId}/questionnaire`);
 			expect(data).toEqual(undefined);
 			expect(options).toEqual(undefined);
 			return softwareProductComponentStorage;
 		});
 
-		return SoftwareProductComponentsActionHelper.fetchSoftwareProductComponentQuestionnaire(store.dispatch, {softwareProductId, vspComponentId}).then(() => {
+		return SoftwareProductComponentsActionHelper.fetchSoftwareProductComponentQuestionnaire(store.dispatch, {softwareProductId, version, vspComponentId}).then(() => {
 			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
@@ -72,61 +75,33 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
+		const storage = VSPComponentsStorageFactory.build();
+
 		const softwareProductComponentQuestionnaire = {
 			data: null,
-			schema: JSON.stringify({'backup':{'backupType':'OnSite','backupSolution':'76333'},'snapshotBackup':{'snapshotFrequency':'2'}})
+			schema: JSON.stringify(storage)
 		};
 		deepFreeze(softwareProductComponentQuestionnaire);
 
 		const softwareProductComponentQuestionnaireData = {
 			qdata: {},
-			qschema: JSON.parse(softwareProductComponentQuestionnaire.schema)
+			dataMap: {},
+			qgenericFieldInfo: {}
 		};
 		deepFreeze(softwareProductComponentQuestionnaireData);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentEditor', softwareProductComponentQuestionnaireData);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/components/${vspComponentId}/questionnaire`);
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${vspComponentId}/questionnaire`);
 			expect(data).toEqual(undefined);
 			expect(options).toEqual(undefined);
 			return softwareProductComponentQuestionnaire;
 		});
 
-		return SoftwareProductComponentsActionHelper.fetchSoftwareProductComponentQuestionnaire(store.dispatch, {softwareProductId, vspComponentId}).then(() => {
+		return SoftwareProductComponentsActionHelper.fetchSoftwareProductComponentQuestionnaire(store.dispatch, {softwareProductId, version, vspComponentId}).then(() => {
 			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
-	it('Update Software Products Components Storage', () => {
-		const store = storeCreator({
-			softwareProduct: {
-				softwareProductComponents: {
-					componentEditor: {
-						qdata: {
-							backupType: 'OnSite',
-							backupStorageSize: 30
-						},
-						qschema: {
-							type: 'object',
-							properties: {
-								backupType: {type: 'string'},
-								backupStorageSize: {type: 'number'}
-							}
-						}
-					}
-				}
-			}
-		});
-		deepFreeze(store);
-
-		const data = {backupType: 'OffSite', backupStorageSize: 30};
-		deepFreeze(data);
-
-		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentEditor.qdata', data);
-
-		SoftwareProductComponentsActionHelper.componentQuestionnaireUpdated(store.dispatch, {data});
-
-		expect(store.getState()).toEqual(expectedStore);
-	});
 });
diff --git a/openecomp-ui/test/softwareProduct/components/test.js b/openecomp-ui/test/softwareProduct/components/test.js
index 839e1b7..b3994b1 100644
--- a/openecomp-ui/test/softwareProduct/components/test.js
+++ b/openecomp-ui/test/softwareProduct/components/test.js
@@ -1,32 +1,30 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
-import {expect} from 'chai';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
 import {cloneAndSet} from 'test-utils/Util.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 import SoftwareProductComponentsActionHelper from 'sdc-app/onboarding/softwareProduct/components/SoftwareProductComponentsActionHelper.js';
 
+import {VSPComponentsFactory, VSPComponentsGeneralFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsFactories.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+
 const softwareProductId = '123';
 const vspComponentId = '321';
+const version = VersionControllerUtilsFactory.build().version;
 
 describe('Software Product Components Module Tests', function () {
 	it('Get Software Products Components List', () => {
@@ -34,18 +32,8 @@
 		deepFreeze(store.getState());
 
 		const softwareProductComponentsList = [
-			{
-				name: 'com.d2.resource.vfc.nodes.heat.sm_server',
-				displayName: 'sm_server',
-				description: 'hjhj',
-				id: 'EBADF561B7FA4A788075E1840D0B5971'
-			},
-			{
-				name: 'com.d2.resource.vfc.nodes.heat.pd_server',
-				displayName: 'pd_server',
-				description: 'hjhj',
-				id: '2F47447D22DB4C53B020CA1E66201EF2'
-			}
+			VSPComponentsFactory.build({}, {componentName: 'sd', componentType: 'server'}),
+			VSPComponentsFactory.build({}, {componentName: 'pd', componentType: 'server'})
 		];
 
 		deepFreeze(softwareProductComponentsList);
@@ -55,14 +43,14 @@
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentsList', softwareProductComponentsList);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components`);
-			expect(data).to.deep.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {results: softwareProductComponentsList};
 		});
 
-		return SoftwareProductComponentsActionHelper.fetchSoftwareProductComponents(store.dispatch, {softwareProductId}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		return SoftwareProductComponentsActionHelper.fetchSoftwareProductComponents(store.dispatch, {softwareProductId, version}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
@@ -70,27 +58,21 @@
 		const store = storeCreator();
 
 		const qdataUpdated = {
-			general: {
-				hypervisor: {
-					containerFeatureDescription: 'aaaUpdated',
-					drivers: 'bbbUpdated',
-					hypervisor: 'cccUpdated'
-				}
-			}
+			general: VSPComponentsGeneralFactory.build()
 		};
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductComponents.componentEditor.qdata', qdataUpdated);
 		deepFreeze(expectedStore);
 
 
-		mockRest.addHandler('save', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/components/${vspComponentId}/questionnaire`);
-			expect(data).to.deep.equal(qdataUpdated);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components/${vspComponentId}/questionnaire`);
+			expect(data).toEqual(qdataUpdated);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
-		return SoftwareProductComponentsActionHelper.updateSoftwareProductComponentQuestionnaire(store.dispatch, {softwareProductId, vspComponentId, qdata: qdataUpdated}).then(() => {
+		return SoftwareProductComponentsActionHelper.updateSoftwareProductComponentQuestionnaire(store.dispatch, {softwareProductId, version, vspComponentId, qdata: qdataUpdated}).then(() => {
 			//TODO think should we add here something or not
 		});
 
@@ -98,4 +80,3 @@
 	});
 
 });
-
diff --git a/openecomp-ui/test/softwareProduct/creation/SoftwareProductCreation.test.js b/openecomp-ui/test/softwareProduct/creation/SoftwareProductCreation.test.js
new file mode 100644
index 0000000..c7c55bd
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/creation/SoftwareProductCreation.test.js
@@ -0,0 +1,105 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {mapStateToProps, mapActionsToProps} from 'sdc-app/onboarding/softwareProduct/creation/SoftwareProductCreation.js';
+import SoftwareProductCreationView from 'sdc-app/onboarding/softwareProduct/creation/SoftwareProductCreationView.jsx';
+import {SoftwareProductCreationFactory, SoftwareProductCreationFactoryWithSelectedVendor} from 'test-utils/factories/softwareProduct/SoftwareProductCreationFactories.js';
+import {CategoryWithSubFactory} from 'test-utils/factories/softwareProduct/VSPCategoriesFactory.js';
+import {FinalizedLicenseModelFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
+import {storeCreator} from 'sdc-app/AppStore.js';
+
+describe('Software Product Creation Module Tests', function() {
+	it ('mapStateToProps mapper exists', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it ('should return empty data', () => {
+		let state = {
+			softwareProductList: [],
+			softwareProduct: {
+				softwareProductCreation: {
+					data: {}
+				}
+			}
+		};
+		let props = mapStateToProps(state);
+		expect(props.data).toEqual({});
+	});
+
+	it ('should return vsp names list', () => {
+		let state = {
+			softwareProductList: [{
+				name: 'vsp1',
+				id: 'vsp1_id'
+			}, {
+				name: 'vsp2',
+				id: 'vsp2_id'
+			}],
+			softwareProduct: {
+				softwareProductCreation: {
+					data: {}
+				}
+			}
+		};
+		let props = mapStateToProps(state);
+		expect(props.data).toEqual({});
+		expect(props.VSPNames).toEqual({vsp1: 'vsp1_id', vsp2: 'vsp2_id'});
+	});
+
+	it('simple jsx test', () => {
+		const store = storeCreator();
+		let dispatch = store.dispatch;
+
+		let state = {
+			softwareProductList: [],
+			softwareProduct: {
+				softwareProductCreation: SoftwareProductCreationFactory.build(),
+				softwareProductCategories: CategoryWithSubFactory.buildList({}, {quantity: 2})
+			},
+			finalizedLicenseModelList: FinalizedLicenseModelFactory.buildList(3)
+		};
+		let props = Object.assign({}, mapStateToProps(state), mapActionsToProps(dispatch));
+		var renderer = TestUtils.createRenderer();
+		renderer.render(
+			<SoftwareProductCreationView {...props}/>
+			);
+		var renderedOutput = renderer.getRenderOutput();
+		expect(renderedOutput).toBeTruthy();
+	});
+
+	it('simple jsx test - with selected vendor', () => {
+		const store = storeCreator();
+		let dispatch = store.dispatch;
+		let finalizedLicenseModelList = FinalizedLicenseModelFactory.buildList(3);
+		let state = {
+			softwareProductList: [],
+			softwareProduct: {
+				softwareProductCreation: SoftwareProductCreationFactoryWithSelectedVendor.build({selectedVendorId: finalizedLicenseModelList[0].id}),
+				softwareProductCategories: CategoryWithSubFactory.buildList({}, {quantity: 2})
+			},
+			finalizedLicenseModelList
+		};
+		let props = Object.assign({}, mapStateToProps(state), mapActionsToProps(dispatch));
+		let renderer = TestUtils.createRenderer();
+		renderer.render(
+			<SoftwareProductCreationView {...props}/>
+		);
+		let renderedOutput = renderer.getRenderOutput();
+		expect(renderedOutput).toBeTruthy();
+	});
+});
diff --git a/openecomp-ui/test/softwareProduct/dependencies/SoftwareProductDependencies.test.js b/openecomp-ui/test/softwareProduct/dependencies/SoftwareProductDependencies.test.js
new file mode 100644
index 0000000..5325a58
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/dependencies/SoftwareProductDependencies.test.js
@@ -0,0 +1,210 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import {mount} from 'enzyme';
+import {mapStateToProps} from 'sdc-app/onboarding/softwareProduct/dependencies/SoftwareProductDependencies.js';
+import {
+	SoftwareProductDependenciesResponseFactory,
+	SoftwareProductDependenciesStoreFactory} from 'test-utils/factories/softwareProduct/SoftwareProductDependenciesFactories.js';
+import {VSPComponentsFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsFactories.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+import {storeCreator} from 'sdc-app/AppStore.js';
+import {cloneAndSet} from 'test-utils/Util.js';
+import mockRest from 'test-utils/MockRest.js';
+
+import SoftwareProductComponentsActionHelper from 'sdc-app/onboarding/softwareProduct/components/SoftwareProductComponentsActionHelper.js';
+import SoftwareProductDependenciesActionHelper from 'sdc-app/onboarding/softwareProduct/dependencies/SoftwareProductDependenciesActionHelper.js';
+import SoftwareProductDependenciesView from 'sdc-app/onboarding/softwareProduct/dependencies/SoftwareProductDependenciesView.jsx';
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+
+describe('Software Product Dependencies Module Tests', function () {
+	const softwareProductId = '555';
+	const version = VersionControllerUtilsFactory.build().version;
+
+	it('mapStateToProps mapper exists', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+	
+	it('Get Software Product Dependencies List', () => {
+		const store = storeCreator();
+		const dispatch = store.dispatch;
+
+		let DependenciesListResponse = SoftwareProductDependenciesResponseFactory.buildList(2);
+		let DependenciesListStore = DependenciesListResponse.map(dependency => SoftwareProductDependenciesStoreFactory.build(dependency));
+		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductDependencies', DependenciesListStore);
+
+		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/component-dependency-model`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: DependenciesListResponse};
+		});
+
+		return SoftwareProductDependenciesActionHelper.fetchDependencies(dispatch, {softwareProductId, version}).then(() => {
+			const state = store.getState();
+			const depndenciesWithGeneratedId = state.softwareProduct.softwareProductDependencies;
+			const currentDependencies = expectedStore.softwareProduct.softwareProductDependencies;
+			let expectedStoreDependencies = currentDependencies.map((dependency, index) => ({...dependency, id: depndenciesWithGeneratedId[index].id}));
+
+			const newExpectedStore = cloneAndSet(expectedStore, 'softwareProduct.softwareProductDependencies', expectedStoreDependencies);
+
+			expect(state).toEqual(newExpectedStore);
+		});
+	});
+
+	it('Update Software Product Dependencies List', () => {
+		const store = storeCreator();
+		const dispatch = store.dispatch;
+
+		let DependenciesListResponse = SoftwareProductDependenciesResponseFactory.buildList(3);
+		let DependenciesListStore = DependenciesListResponse.map(dependency => SoftwareProductDependenciesStoreFactory.build(dependency));
+		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductDependencies', DependenciesListStore);
+
+		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/component-dependency-model`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: DependenciesListResponse};
+		});
+
+		return SoftwareProductDependenciesActionHelper.fetchDependencies(dispatch, {softwareProductId, version}).then(() => {
+			
+			const state = store.getState();
+			const depndenciesWithGeneratedId = state.softwareProduct.softwareProductDependencies;
+			const currentDependencies = expectedStore.softwareProduct.softwareProductDependencies;
+			let expectedStoreDependencies = currentDependencies.map((dependency, index) => ({...dependency, id: depndenciesWithGeneratedId[index].id}));
+			
+			let newDependency = SoftwareProductDependenciesStoreFactory.build();
+			expectedStoreDependencies.push(newDependency);
+
+			const newExpectedStore = cloneAndSet(expectedStore, 'softwareProduct.softwareProductDependencies', expectedStoreDependencies);
+
+			SoftwareProductDependenciesActionHelper.updateDependencyList(dispatch, {dependenciesList: expectedStoreDependencies});
+			const newState = store.getState();
+			expect(newState).toEqual(newExpectedStore);
+		});
+	});
+
+	it('Add And Save Software Product Dependencies List', () => {
+		const store = storeCreator();
+		const dispatch = store.dispatch;
+
+		let mockServerDependencies = [];
+
+		SoftwareProductDependenciesActionHelper.addDependency(dispatch);
+		let state = store.getState();
+		let dependencies = state.softwareProduct.softwareProductDependencies;
+		expect(dependencies.length).toEqual(1);
+		expect(dependencies[0].sourceId).toEqual(null);
+		expect(dependencies[0].targetId).toEqual(null);
+
+		let newDependencies = SoftwareProductDependenciesStoreFactory.buildList(1);
+		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductDependencies', newDependencies);
+		SoftwareProductDependenciesActionHelper.updateDependencyList(dispatch, {dependenciesList: newDependencies});
+
+		mockRest.addHandler('post', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/component-dependency-model`);
+			expect(data).toEqual({componentDependencyModels: newDependencies.map(item => ({sourceId: item.sourceId, targetId: item.targetId, relationType: item.relationType}) )});
+			expect(options).toEqual(undefined);
+			mockServerDependencies = [...data.componentDependencyModels];
+			return {returnCode: 'OK'};
+		});
+
+		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/component-dependency-model`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: mockServerDependencies};
+		});
+
+		return SoftwareProductDependenciesActionHelper.saveDependencies(dispatch, {softwareProductId, version, dependenciesList: newDependencies}).then(() => {
+			return SoftwareProductDependenciesActionHelper.fetchDependencies(dispatch, {softwareProductId, version});
+		}).then(() => {
+			const state = store.getState();
+			const depndenciesWithGeneratedId = state.softwareProduct.softwareProductDependencies;
+			const currentDependencies = expectedStore.softwareProduct.softwareProductDependencies;
+			let expectedStoreDependencies = currentDependencies.map((dependency, index) => ({...dependency, id: depndenciesWithGeneratedId[index].id}));
+
+			const newExpectedStore = cloneAndSet(expectedStore, 'softwareProduct.softwareProductDependencies', expectedStoreDependencies);
+
+			expect(state).toEqual(newExpectedStore);
+		});
+	});
+
+	it('Get Software Product Dependencies List with loop, and render to JSX', () => {
+		const store = storeCreator();
+		const dispatch = store.dispatch;
+
+		let components = VSPComponentsFactory.buildList(2);
+		let vspEditor = VSPEditorFactory.build({id: softwareProductId, version});
+
+		let DependenciesListResponse = SoftwareProductDependenciesResponseFactory.buildList(2);
+		let firstDependecy = DependenciesListResponse[0];
+		let secondDependency = DependenciesListResponse[1];
+		firstDependecy.sourceId = components[0].id;
+		secondDependency.sourceId = components[1].id;
+		firstDependecy.targetId = secondDependency.sourceId;
+		secondDependency.targetId = firstDependecy.sourceId;
+
+		let DependenciesListStore = DependenciesListResponse.map(dependency => SoftwareProductDependenciesStoreFactory.build({...dependency, hasCycle: true}));
+		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductDependencies', DependenciesListStore);
+
+		mockRest.addHandler('fetch', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/component-dependency-model`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: DependenciesListResponse};
+		});
+
+		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/components`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: components};
+		});
+
+		return SoftwareProductDependenciesActionHelper.fetchDependencies(dispatch, {softwareProductId, version}).then(() => {
+			return SoftwareProductComponentsActionHelper.fetchSoftwareProductComponents(dispatch, {softwareProductId, version});
+		}).then(() => {
+			const state = store.getState();
+			state.softwareProduct.softwareProductEditor = {data: vspEditor};
+			const depndenciesWithGeneratedId = state.softwareProduct.softwareProductDependencies;
+			const currentDependencies = expectedStore.softwareProduct.softwareProductDependencies;
+			let expectedStoreDependencies = currentDependencies.map((dependency, index) => ({...dependency, id: depndenciesWithGeneratedId[index].id}));
+
+			const newExpectedStore = {
+				...expectedStore, 
+				softwareProduct: {
+					...expectedStore.softwareProduct, 
+					softwareProductDependencies: expectedStoreDependencies,
+					softwareProductEditor: {data: vspEditor},
+					softwareProductComponents: {
+						...expectedStore.softwareProduct.softwareProductComponents,
+						componentsList: components
+					}
+				}
+			};
+
+			expect(state).toEqual(newExpectedStore);
+
+			const props = mapStateToProps(state);
+			expect(props.softwareProductDependencies).toEqual(expectedStoreDependencies);
+			const wrapper = mount(<SoftwareProductDependenciesView {...props}/>);
+			expect(wrapper).toBeTruthy();
+		});
+	});
+});
\ No newline at end of file
diff --git a/openecomp-ui/test/softwareProduct/details/detailsView.test.js b/openecomp-ui/test/softwareProduct/details/detailsView.test.js
index b6a8ca5..37c5df5 100644
--- a/openecomp-ui/test/softwareProduct/details/detailsView.test.js
+++ b/openecomp-ui/test/softwareProduct/details/detailsView.test.js
@@ -1,87 +1,93 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
-import expect from 'expect';
 import React from 'react';
 import TestUtils from 'react-addons-test-utils';
 import {mapStateToProps} from 'sdc-app/onboarding/softwareProduct/details/SoftwareProductDetails.js';
 import SoftwareProductDetailsView from 'sdc-app/onboarding/softwareProduct/details/SoftwareProductDetailsView.jsx';
-import {vspQschema as vspQuestionnaireSchema} from './vspQschema.js';
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {CategoryWithSubFactory}  from 'test-utils/factories/softwareProduct/VSPCategoriesFactory.js';
+import {LicenseAgreementStoreFactory}  from 'test-utils/factories/licenseModel/LicenseAgreementFactories.js';
+import {FeatureGroupStoreFactory}  from 'test-utils/factories/licenseModel/FeatureGroupFactories.js';
+import {SchemaGenericFieldInfoFactory}  from 'test-utils/factories/softwareProduct/SoftwareProductQSchemaFactory.js';
+import {default as VspQdataFactory, VspDataMapFactory}  from 'test-utils/factories/softwareProduct/VspQdataFactory.js';
+import {FinalizedLicenseModelFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
 
 describe('Software Product Details: ', function () {
 
-	let currentSoftwareProduct = {}, categories = [], finalizedLicenseModelList, licenseAgreementList, featureGroupsList, vspQschema;
+	let currentSoftwareProduct = {}, currentSoftwareProductWithLicensingData = {}, softwareProductCategories = [],
+		finalizedLicenseModelList, licenseAgreementList, featureGroupsList, qdata = {}, dataMap = {}, genericFieldInfo = {}, qGenericFieldInfo = {};
 	let dummyFunc = () => {};
 
-	before(function() {
-		currentSoftwareProduct = {
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			name: 'VSP',
-			description: 'dfdf',
-			category: 'category1',
-			subCategory: 'category1.subCategory',
-			vendorId: 'VLM_ID1',
-			vendorName: 'VLM1',
-			licensingVersion: '1.0',
-			licensingData: {}
+	beforeAll(function() {
+		finalizedLicenseModelList = FinalizedLicenseModelFactory.buildList(2);
+		currentSoftwareProduct = VSPEditorFactory.build({
+			id: 'RTRTG454545',
+			vendorId: finalizedLicenseModelList[0].id,
+			vendorName: finalizedLicenseModelList[0].vendorName
+		});
+		softwareProductCategories = CategoryWithSubFactory.buildList(2, {}, {quantity: 1});
+		licenseAgreementList = LicenseAgreementStoreFactory.buildList(2);
+		featureGroupsList = FeatureGroupStoreFactory.buildList(2, {referencingLicenseAgreements: [licenseAgreementList[0].id]});
+		qdata = VspQdataFactory.build();
+		dataMap = VspDataMapFactory.build();
+		currentSoftwareProductWithLicensingData = {
+			...currentSoftwareProduct,
+			licensingData: {
+				licenseAgreement: licenseAgreementList[0].id,
+				featureGroups: [featureGroupsList[0].id]
+			}
 		};
-		categories = [{
-			uniqueId: 'category1',
-			subcategories: [{
-				uniqueId: 'subCategory'
-			}]
-		}, {
-			uniqueId: 'category2',
-			subcategories: [{
-				uniqueId: 'subCategory2'
-			}]
-		}];
-		finalizedLicenseModelList = [{
-			id: 'VLM_ID1',
-			name: 'VLM1'
-		}];
-		licenseAgreementList = [{id: 'LA_ID1'}, {id: 'LA_ID2'}];
-		featureGroupsList = [
-			{id: 'FG_ID1', name: 'FG1', referencingLicenseAgreements: ['LA_ID1']},
-			{id: 'FG_ID2', name: 'FG2', referencingLicenseAgreements: ['LA_ID1']}
-		];
-		vspQschema = vspQuestionnaireSchema;
+		genericFieldInfo = {
+			'name': {
+				isValid: true,
+				errorText: '',
+				validations: [{type: 'validateName', data: true}, {type: 'maxLength', data: 120}, {
+					type: 'required',
+					data: true
+				}]
+			},
+			'description': {
+				isValid: true,
+				errorText: '',
+				validations: [{type: 'required', data: true}]
+			}
+		};
+		qGenericFieldInfo = SchemaGenericFieldInfoFactory.build();
 	});
 
 	it('should mapper exist', () => {
-		expect(mapStateToProps).toExist();
+		expect(mapStateToProps).toBeTruthy();
 	});
 
 	it('should mapper return vsp basic data', () => {
+
 		var obj = {
 			softwareProduct: {
 				softwareProductEditor: {
-					data: currentSoftwareProduct
+					data: currentSoftwareProduct,
+					genericFieldInfo
 				},
-				softwareProductCategories: categories,
+				softwareProductCategories,
 				softwareProductQuestionnaire: {
-					qdata: {},
-					qschema: vspQschema
+					qdata,
+					genericFieldInfo: qGenericFieldInfo,
+					dataMap
 				}
 			},
-			finalizedLicenseModelList: finalizedLicenseModelList,
+			finalizedLicenseModelList,
 			licenseModel: {
 				licenseAgreement: {
 					licenseAgreementList: []
@@ -96,35 +102,32 @@
 		expect(result.currentSoftwareProduct).toEqual(currentSoftwareProduct);
 		expect(result.finalizedLicenseModelList).toEqual(finalizedLicenseModelList);
 		expect(result.finalizedLicenseModelList.length).toBeGreaterThan(0);
-		expect(finalizedLicenseModelList).toInclude({
+		expect(finalizedLicenseModelList[0]).toMatchObject({
 			id: result.currentSoftwareProduct.vendorId,
-			name: result.currentSoftwareProduct.vendorName
+			vendorName: result.currentSoftwareProduct.vendorName
 		});
-		expect(result.softwareProductCategories).toEqual(categories);
+		expect(result.softwareProductCategories).toEqual(softwareProductCategories);
 		expect(result.licenseAgreementList).toEqual([]);
 		expect(result.featureGroupsList).toEqual([]);
-		expect(result.qdata).toEqual({});
-		expect(result.qschema).toEqual(vspQschema);
+		expect(result.qdata).toEqual(qdata);
+		expect(result.dataMap).toEqual(dataMap);
+		expect(result.isFormValid).toEqual(true);
 		expect(result.isReadOnlyMode).toEqual(true);
 	});
 
 	it('should mapper return vsp data with selected licenseAgreement and featureGroup', () => {
-		let vspWithLicensingData = {
-			...currentSoftwareProduct,
-			licensingData: {
-				licenseAgreement: 'LA_ID1',
-				featureGroups: [{enum: 'FG_ID1', title: 'FG1'}]
-			}
-		};
+
 		var obj = {
 			softwareProduct: {
 				softwareProductEditor: {
-					data: vspWithLicensingData
+					data: currentSoftwareProductWithLicensingData,
+					genericFieldInfo
 				},
-				softwareProductCategories: categories,
+				softwareProductCategories,
 				softwareProductQuestionnaire: {
-					qdata: {},
-					qschema: vspQschema
+					qdata,
+					genericFieldInfo: qGenericFieldInfo,
+					dataMap
 				}
 			},
 			finalizedLicenseModelList: finalizedLicenseModelList,
@@ -139,51 +142,36 @@
 		};
 
 		var result = mapStateToProps(obj);
-		expect(result.currentSoftwareProduct).toEqual(vspWithLicensingData);
+		expect(result.currentSoftwareProduct).toEqual(currentSoftwareProductWithLicensingData);
 		expect(result.finalizedLicenseModelList).toEqual(finalizedLicenseModelList);
 		expect(result.finalizedLicenseModelList.length).toBeGreaterThan(0);
-		expect(result.finalizedLicenseModelList).toInclude({
+		expect(result.finalizedLicenseModelList[0]).toMatchObject({
 			id: result.currentSoftwareProduct.vendorId,
-			name: result.currentSoftwareProduct.vendorName
+			vendorName: result.currentSoftwareProduct.vendorName
 		});
-		expect(result.softwareProductCategories).toEqual(categories);
+		expect(result.softwareProductCategories).toEqual(softwareProductCategories);
 		expect(result.licenseAgreementList).toEqual(licenseAgreementList);
-		expect(result.licenseAgreementList).toInclude({id: result.currentSoftwareProduct.licensingData.licenseAgreement});
+		expect(result.licenseAgreementList[0]).toMatchObject({...licenseAgreementList[0], id: result.currentSoftwareProduct.licensingData.licenseAgreement});
 		result.currentSoftwareProduct.licensingData.featureGroups.forEach(fg => {
-			expect(featureGroupsList).toInclude({
-				id: fg.enum,
-				name: fg.title,
-				referencingLicenseAgreements: [result.currentSoftwareProduct.licensingData.licenseAgreement]
-			});
-			expect(result.featureGroupsList).toInclude(fg);
+			expect(featureGroupsList[0]).toMatchObject({...featureGroupsList[0], id: fg});
 		});
-		expect(result.qdata).toEqual({});
-		expect(result.qschema).toEqual(vspQschema);
+		expect(result.qdata).toEqual(qdata);
 		expect(result.isReadOnlyMode).toEqual(true);
 	});
 
 	it('VSP Details view test', () => {
+
 		let params = {
-			currentSoftwareProduct: currentSoftwareProduct,
-			softwareProductCategories: categories,
-			qdata: {},
-			qschema: vspQschema,
-			finalizedLicenseModelList: [{
-				id: 'VLM_ID1',
-				vendorName: 'VLM1',
-				version: '2.0',
-				viewableVersions: ['1.0', '2.0']
-			}, {
-				id: 'VLM_ID2',
-				vendorName: 'VLM2',
-				version: '3.0',
-				viewableVersions: ['1.0', '2.0', '3.0']
-			}],
-			licenseAgreementList: [{id: 'LA_ID1'}, {id: 'LA_ID2'}],
-			featureGroupsList: [
-				{id: 'FG_ID1', name: 'FG1', referencingLicenseAgreements: ['LA_ID1']},
-				{id: 'FG_ID2', name: 'FG2', referencingLicenseAgreements: ['LA_ID1']}
-			]
+			currentSoftwareProduct,
+			softwareProductCategories,
+			qdata,
+			dataMap,
+			isFormValid: true,
+			finalizedLicenseModelList,
+			licenseAgreementList,
+			featureGroupsList,
+			genericFieldInfo,
+			qGenericFieldInfo,
 		};
 		var renderer = TestUtils.createRenderer();
 		renderer.render(
@@ -196,42 +184,26 @@
 				onVendorParamChanged = {dummyFunc}/>
 		);
 		let renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 	});
 
 	it('in view: should change vendorId and update vsp licensing-version', done => {
-		let vspWithLicensingData = {
-			...currentSoftwareProduct,
-			licensingData: {
-				licenseAgreement: 'LA_ID1',
-				featureGroups: [{enum: 'FG_ID1', title: 'FG1'}]
-			}
-		};
+
 		let params = {
-			currentSoftwareProduct: vspWithLicensingData,
-			softwareProductCategories: categories,
-			qdata: {},
-			qschema: vspQschema,
-			finalizedLicenseModelList: [{
-				id: 'VLM_ID1',
-				vendorName: 'VLM1',
-				version: '2.0',
-				viewableVersions: ['1.0', '2.0']
-			}, {
-				id: 'VLM_ID2',
-				vendorName: 'VLM2',
-				version: '3.0',
-				viewableVersions: ['1.0', '2.0', '3.0']
-			}],
-			licenseAgreementList: [{id: 'LA_ID1'}, {id: 'LA_ID2'}],
-			featureGroupsList: [
-				{id: 'FG_ID1', name: 'FG1', referencingLicenseAgreements: ['LA_ID1']},
-				{id: 'FG_ID2', name: 'FG2', referencingLicenseAgreements: ['LA_ID1']}
-			]
+			currentSoftwareProduct: currentSoftwareProductWithLicensingData,
+			softwareProductCategories,
+			qdata,
+			dataMap,
+			isFormValid: true,
+			genericFieldInfo,
+			qGenericFieldInfo,
+			finalizedLicenseModelList,
+			licenseAgreementList,
+			featureGroupsList
 		};
 		const onVendorChangedListener = (deltaData) => {
-			expect(deltaData.vendorId).toEqual('VLM_ID2');
-			expect(deltaData.vendorName).toEqual('VLM2');
+			expect(deltaData.vendorId).toEqual(finalizedLicenseModelList[1].id);
+			expect(deltaData.vendorName).toEqual(finalizedLicenseModelList[1].vendorName);
 			expect(deltaData.licensingVersion).toEqual('');
 			expect(deltaData.licensingData).toEqual({});
 			done();
@@ -241,7 +213,10 @@
 			currentSoftwareProduct = {params.currentSoftwareProduct}
 			softwareProductCategories = {params.softwareProductCategories}
 			qdata = {params.qdata}
-			qschema = {params.qschema}
+			qGenericFieldInfo = {params.qGenericFieldInfo}
+			genericFieldInfo = {params.genericFieldInfo}
+			isFormValid={params.isFormValid}
+			dataMap={params.dataMap}
 			finalizedLicenseModelList = {params.finalizedLicenseModelList}
 			licenseAgreementList = {params.licenseAgreementList}
 			featureGroupsList = {params.featureGroupsList}
@@ -250,37 +225,27 @@
 			onValidityChanged = {dummyFunc}
 			onQDataChanged = {dummyFunc}
 			onVendorParamChanged = {(deltaData) => onVendorChangedListener(deltaData)}/>);
-		expect(vspDetailsView).toExist();
-		vspDetailsView.onVendorParamChanged({vendorId: 'VLM_ID2'});
+		expect(vspDetailsView).toBeTruthy();
+		vspDetailsView.onVendorParamChanged({vendorId: finalizedLicenseModelList[1].id});
 	});
 
 	it('in view: should change licensing-version and update licensing data', done => {
 		let params = {
 			currentSoftwareProduct: currentSoftwareProduct,
-			softwareProductCategories: categories,
-			qdata: {},
-			qschema: vspQschema,
-			finalizedLicenseModelList: [{
-				id: 'VLM_ID1',
-				vendorName: 'VLM1',
-				version: '2.0',
-				viewableVersions: ['1.0', '2.0']
-			}, {
-				id: 'VLM_ID2',
-				vendorName: 'VLM2',
-				version: '3.0',
-				viewableVersions: ['1.0', '2.0', '3.0']
-			}],
-			licenseAgreementList: [{id: 'LA_ID1'}, {id: 'LA_ID2'}],
-			featureGroupsList: [
-				{id: 'FG_ID1', name: 'FG1', referencingLicenseAgreements: ['LA_ID1']},
-				{id: 'FG_ID2', name: 'FG2', referencingLicenseAgreements: ['LA_ID1']}
-			]
+			softwareProductCategories,
+			qdata,
+			dataMap,
+			isFormValid: true,
+			genericFieldInfo,
+			qGenericFieldInfo,
+			finalizedLicenseModelList,
+			licenseAgreementList,
+			featureGroupsList
 		};
 		const onVendorChangedListener = (deltaData) => {
-			expect(deltaData.vendorId).toEqual('VLM_ID2');
-			expect(deltaData.vendorName).toEqual('VLM2');
-			expect(deltaData.licensingVersion).toEqual('2.0');
+			expect(deltaData.vendorId).toEqual(finalizedLicenseModelList[1].id);
+			expect(deltaData.vendorName).toEqual(finalizedLicenseModelList[1].vendorName);
+			expect(deltaData.licensingVersion).toEqual(finalizedLicenseModelList[1].viewableVersion[0]);
 			expect(deltaData.licensingData).toEqual({});
 			done();
 		};
@@ -292,36 +257,26 @@
 			onValidityChanged = {dummyFunc}
 			onQDataChanged = {dummyFunc}
 			onVendorParamChanged = {(deltaData) => onVendorChangedListener(deltaData)}/>);
-		expect(vspDetailsView).toExist();
-		vspDetailsView.onVendorParamChanged({vendorId: 'VLM_ID2', licensingVersion: '2.0'});
+		expect(vspDetailsView).toBeTruthy();
+		vspDetailsView.onVendorParamChanged({vendorId: finalizedLicenseModelList[1].id, licensingVersion: finalizedLicenseModelList[1].viewableVersion[0]});
 	});
 
 	it('in view: should change subcategory', done => {
 		let params = {
 			currentSoftwareProduct: currentSoftwareProduct,
-			softwareProductCategories: categories,
-			qdata: {},
-			qschema: vspQschema,
-			finalizedLicenseModelList: [{
-				id: 'VLM_ID1',
-				vendorName: 'VLM1',
-				version: '2.0',
-				viewableVersions: ['1.0', '2.0']
-			}, {
-				id: 'VLM_ID2',
-				vendorName: 'VLM2',
-				version: '3.0',
-				viewableVersions: ['1.0', '2.0', '3.0']
-			}],
-			licenseAgreementList: [{id: 'LA_ID1'}, {id: 'LA_ID2'}],
-			featureGroupsList: [
-				{id: 'FG_ID1', name: 'FG1', referencingLicenseAgreements: ['LA_ID1']},
-				{id: 'FG_ID2', name: 'FG2', referencingLicenseAgreements: ['LA_ID1']}
-			]
+			softwareProductCategories,
+			qdata,
+			dataMap,
+			isFormValid: true,
+			genericFieldInfo,
+			qGenericFieldInfo,
+			finalizedLicenseModelList,
+			licenseAgreementList,
+			featureGroupsList
 		};
 		const onDataChangedListener = ({category, subCategory}) => {
-			expect(category).toEqual('category2');
-			expect(subCategory).toEqual('subCategory2');
+			expect(category).toEqual(softwareProductCategories[1].uniqueId);
+			expect(subCategory).toEqual(softwareProductCategories[1].subcategories[0].uniqueId);
 			done();
 		};
 
@@ -332,45 +287,29 @@
 			onValidityChanged = {dummyFunc}
 			onQDataChanged = {dummyFunc}
 			onVendorParamChanged = {dummyFunc}/>);
-		expect(vspDetailsView).toExist();
-		vspDetailsView.onSelectSubCategory('subCategory2');
+		expect(vspDetailsView).toBeTruthy();
+		vspDetailsView.onSelectSubCategory(softwareProductCategories[1].subcategories[0].uniqueId);
 	});
 
 	it('in view: should change feature groups', done => {
-		let vspWithLicensingData = {
-			...currentSoftwareProduct,
-			licensingData: {
-				licenseAgreement: 'LA_ID1',
-				featureGroups: [{enum: 'FG_ID1', title: 'FG1'}]
-			}
-		};
+
 		let params = {
-			currentSoftwareProduct: vspWithLicensingData,
-			softwareProductCategories: categories,
-			qdata: {},
-			qschema: vspQschema,
-			finalizedLicenseModelList: [{
-				id: 'VLM_ID1',
-				vendorName: 'VLM1',
-				version: '2.0',
-				viewableVersions: ['1.0', '2.0']
-			}, {
-				id: 'VLM_ID2',
-				vendorName: 'VLM2',
-				version: '3.0',
-				viewableVersions: ['1.0', '2.0', '3.0']
-			}],
-			licenseAgreementList: [{id: 'LA_ID1'}, {id: 'LA_ID2'}],
-			featureGroupsList: [
-				{id: 'FG_ID1', name: 'FG1', referencingLicenseAgreements: ['LA_ID1']},
-				{id: 'FG_ID2', name: 'FG2', referencingLicenseAgreements: ['LA_ID1']}
-			]
+			currentSoftwareProduct: currentSoftwareProductWithLicensingData,
+			softwareProductCategories,
+			qdata,
+			dataMap,
+			isFormValid: true,
+			genericFieldInfo,
+			qGenericFieldInfo,
+			finalizedLicenseModelList,
+			licenseAgreementList,
+			featureGroupsList
 		};
 		const onDataChangedListener = ({licensingData}) => {
-			expect(licensingData.licenseAgreement).toEqual('LA_ID1');
+			expect(licensingData.licenseAgreement).toEqual(licenseAgreementList[0].id);
 			expect(licensingData.featureGroups).toEqual([
-				{enum: 'FG_ID1', title: 'FG1'},
-				{enum: 'FG_ID2', title: 'FG2'}
+				{enum: featureGroupsList[0].id, title: featureGroupsList[0].name},
+				{enum: featureGroupsList[1].id, title: featureGroupsList[1].name}
 			]);
 			done();
 		};
@@ -382,45 +321,29 @@
 			onValidityChanged = {dummyFunc}
 			onQDataChanged = {dummyFunc}
 			onVendorParamChanged = {dummyFunc}/>);
-		expect(vspDetailsView).toExist();
+		expect(vspDetailsView).toBeTruthy();
 		vspDetailsView.onFeatureGroupsChanged({featureGroups: [
-			{enum: 'FG_ID1', title: 'FG1'},
-			{enum: 'FG_ID2', title: 'FG2'}
+			{enum: featureGroupsList[0].id, title: featureGroupsList[0].name},
+			{enum: featureGroupsList[1].id, title: featureGroupsList[1].name}
 		]});
 	});
 
 	it('in view: should change license agreement', done => {
-		let vspWithLicensingData = {
-			...currentSoftwareProduct,
-			licensingData: {
-				licenseAgreement: 'LA_ID1',
-				featureGroups: [{enum: 'FG_ID1', title: 'FG1'}]
-			}
-		};
+
 		let params = {
-			currentSoftwareProduct: vspWithLicensingData,
-			softwareProductCategories: categories,
-			qdata: {},
-			qschema: vspQschema,
-			finalizedLicenseModelList: [{
-				id: 'VLM_ID1',
-				vendorName: 'VLM1',
-				version: '2.0',
-				viewableVersions: ['1.0', '2.0']
-			}, {
-				id: 'VLM_ID2',
-				vendorName: 'VLM2',
-				version: '3.0',
-				viewableVersions: ['1.0', '2.0', '3.0']
-			}],
-			licenseAgreementList: [{id: 'LA_ID1'}, {id: 'LA_ID2'}],
-			featureGroupsList: [
-				{id: 'FG_ID1', name: 'FG1', referencingLicenseAgreements: ['LA_ID1']},
-				{id: 'FG_ID2', name: 'FG2', referencingLicenseAgreements: ['LA_ID1']}
-			]
+			currentSoftwareProduct: currentSoftwareProductWithLicensingData,
+			softwareProductCategories,
+			qdata,
+			dataMap,
+			isFormValid: true,
+			genericFieldInfo,
+			qGenericFieldInfo,
+			finalizedLicenseModelList,
+			licenseAgreementList,
+			featureGroupsList
 		};
 		const onDataChangedListener = ({licensingData}) => {
-			expect(licensingData.licenseAgreement).toEqual('LA_ID2');
+			expect(licensingData.licenseAgreement).toEqual(licenseAgreementList[1].id);
 			expect(licensingData.featureGroups).toEqual([]);
 			done();
 		};
@@ -432,7 +355,7 @@
 			onValidityChanged = {dummyFunc}
 			onQDataChanged = {dummyFunc}
 			onVendorParamChanged = {dummyFunc}/>);
-		expect(vspDetailsView).toExist();
-		vspDetailsView.onLicensingDataChanged({licenseAgreement: 'LA_ID2', featureGroups: []});
+		expect(vspDetailsView).toBeTruthy();
+		vspDetailsView.onLicensingDataChanged({licenseAgreement: licenseAgreementList[1].id, featureGroups: []});
 	});
 });
diff --git a/openecomp-ui/test/softwareProduct/details/test.js b/openecomp-ui/test/softwareProduct/details/test.js
index 9803b16..df84d18 100644
--- a/openecomp-ui/test/softwareProduct/details/test.js
+++ b/openecomp-ui/test/softwareProduct/details/test.js
@@ -1,84 +1,65 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
-import {expect} from 'chai';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
-import {cloneAndSet} from 'test-utils/Util.js';
+import {cloneAndSet, buildFromExistingObject} from 'test-utils/Util.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 
 import SoftwareProductCreationActionHelper from 'sdc-app/onboarding/softwareProduct/creation/SoftwareProductCreationActionHelper.js';
 import SoftwareProductActionHelper from 'sdc-app/onboarding/softwareProduct/SoftwareProductActionHelper.js';
 import SoftwareProductCategoriesHelper from 'sdc-app/onboarding/softwareProduct/SoftwareProductCategoriesHelper.js';
+import {forms} from 'sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js';
+import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
+
+import {VSPEditorFactory, VSPEditorPostFactory, VSPEditorFactoryWithLicensingData, VSPEditorPostFactoryWithLicensingData} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {CategoryFactory}  from 'test-utils/factories/softwareProduct/VSPCategoriesFactory.js';
+import {heatSetupManifest} from 'test-utils/factories/softwareProduct/SoftwareProductAttachmentsFactories.js';
+
+import { FeatureGroupStoreFactory as FeatureGroup} from 'test-utils/factories/licenseModel/FeatureGroupFactories.js';
+import {LicenseAgreementStoreFactory as LicenseAgreement} from 'test-utils/factories/licenseModel/LicenseAgreementFactories.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+
 
 describe('Software Product Module Tests', function () {
 	it('Get Software Products List', () => {
 		const store = storeCreator();
 		deepFreeze(store.getState());
-
-		const softwareProductList = [
-			{
-				name: 'VSP1',
-				description: 'hjhj',
-				version: '0.1',
-				id: 'EBADF561B7FA4A788075E1840D0B5971',
-				subCategory: 'resourceNewCategory.network connectivity.virtual links',
-				category: 'resourceNewCategory.network connectivity',
-				vendorId: '5259EDE4CC814DC9897BA6F69E2C971B',
-				vendorName: 'Vendor',
-				checkinStatus: 'CHECK_OUT',
-				licensingData: {
-					'featureGroups': []
-				}
-			},
-			{
-				name: 'VSP2',
-				description: 'dfdfdfd',
-				version: '0.1',
-				id: '2F47447D22DB4C53B020CA1E66201EF2',
-				subCategory: 'resourceNewCategory.network connectivity.virtual links',
-				category: 'resourceNewCategory.network connectivity',
-				vendorId: '5259EDE4CC814DC9897BA6F69E2C971B',
-				vendorName: 'Vendor',
-				checkinStatus: 'CHECK_OUT',
-				licensingData: {
-					featureGroups: []
-				}
-			}
-		];
-
+		const softwareProductList = VSPEditorFactory.buildList(2);
 		deepFreeze(softwareProductList);
-
 		deepFreeze(store.getState());
-
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProductList', softwareProductList);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal('/onboarding-api/v1.0/vendor-software-products/');
-			expect(data).to.deep.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual('/onboarding-api/v1.0/vendor-software-products/');
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {results: softwareProductList};
 		});
 
+		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual('/onboarding-api/v1.0/vendor-software-products/?versionFilter=Final');
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: []};
+		});
+
 		return SoftwareProductActionHelper.fetchSoftwareProductList(store.dispatch).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			return SoftwareProductActionHelper.fetchFinalizedSoftwareProductList(store.dispatch);
+		}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
@@ -86,62 +67,195 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const softwareProductPostRequest = deepFreeze({
-			name: 'vsp1',
-			description: 'string',
-			vendorId: '1',
-			vendorName: 'Vendor',
-			icon: 'icon',
-			subCategory: 'resourceNewCategory.network connectivity.virtual links',
-			category: 'resourceNewCategory.network connectivity',
-			licensingData: {}
-		});
+		const softwareProductPostRequest = VSPEditorPostFactory.build();
+		deepFreeze(softwareProductPostRequest);
+		const idFromResponse = '1';
+		const expectedVSP = VSPEditorPostFactory.build({id: idFromResponse, vendorId: softwareProductPostRequest.vendorId});
+		deepFreeze(expectedVSP);
 
-		const softwareProductToAdd = deepFreeze({
-			...softwareProductPostRequest
-		});
-
-		const softwareProductIdFromResponse = 'ADDED_ID';
-		const softwareProductAfterAdd = deepFreeze({
-			...softwareProductToAdd,
-			id: softwareProductIdFromResponse
-		});
-
-		const expectedStore = cloneAndSet(store.getState(), 'softwareProductList', [softwareProductAfterAdd]);
-
-		mockRest.addHandler('create', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal('/onboarding-api/v1.0/vendor-software-products/');
-			expect(data).to.deep.equal(softwareProductPostRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('post', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual('/onboarding-api/v1.0/vendor-software-products/');
+			expect(data).toEqual(softwareProductPostRequest);
+			expect(options).toEqual(undefined);
 			return {
-				vspId: softwareProductIdFromResponse
+				vspId: idFromResponse
 			};
 		});
 
 		return SoftwareProductCreationActionHelper.createSoftwareProduct(store.dispatch, {
-			softwareProduct: softwareProductToAdd
-		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			softwareProduct: softwareProductPostRequest
+		}).then((response) => {
+			expect(response.vspId).toEqual(idFromResponse);
 		});
 	});
-	it('Save Software product', () => {
-		const softwareProduct = {
-			name: 'VSP5',
-			id: '4730033D16C64E3CA556AB0AC4478218',
-			description: 'A software model for Fortigate.',
-			subCategory: 'resourceNewCategory.network connectivity.virtual links',
-			category: 'resourceNewCategory.network connectivity',
-			vendorId: '1',
-			vendorName: 'Vendor',
-			licensingVersion: '1.0',
-			icon: 'icon',
-			licensingData: {
-				licenceAgreement: '123',
-				featureGroups: [
-					'123', '234'
-				]
+
+	it('Fetch Software Product with manifest', () => {
+		const store = storeCreator();
+		deepFreeze(store.getState());
+
+		const softwareProductPostRequest = VSPEditorPostFactory.build();
+		deepFreeze(softwareProductPostRequest);
+
+		const expectedGenericInfo = {
+			'name': {
+				isValid: true,
+				errorText: '',
+				validations: [{type: 'validateName', data: true}, {type: 'maxLength', data: 25}, {
+					type: 'required',
+					data: true
+				}]
+			},
+			'description': {
+				isValid: true,
+				errorText: '',
+				validations: [{type: 'required', data: true}]
 			}
 		};
+		const expectedFormName = forms.VENDOR_SOFTWARE_PRODUCT_DETAILS;
+
+		const idFromResponse = '1';
+		const version = { id: '0.1', label: '0.1'};
+		const expectedVSP = VSPEditorPostFactory.build({id: idFromResponse, vendorId: softwareProductPostRequest.vendorId});
+		deepFreeze(expectedVSP);
+		let expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductEditor.data', expectedVSP);
+		expectedStore = cloneAndSet(expectedStore, 'softwareProduct.softwareProductEditor.genericFieldInfo', expectedGenericInfo);
+		expectedStore = cloneAndSet(expectedStore, 'softwareProduct.softwareProductEditor.formName', expectedFormName);
+		expectedStore = cloneAndSet(expectedStore, 'softwareProduct.softwareProductQuestionnaire', {qdata: {}, dataMap: {}, qgenericFieldInfo: {}});
+
+		expectedStore = cloneAndSet(expectedStore, 'softwareProduct.softwareProductAttachments.heatValidation', {
+			'attachmentsTree': {},
+			'errorList': [],
+			'selectedNode': 'All'
+		});
+		let manifest = heatSetupManifest.build();
+		expectedStore = cloneAndSet(expectedStore, 'softwareProduct.softwareProductAttachments.heatSetup', manifest);
+
+		mockRest.addHandler('post', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual('/onboarding-api/v1.0/vendor-software-products/');
+			expect(data).toEqual(softwareProductPostRequest);
+			expect(options).toEqual(undefined);
+			return {
+				vspId: idFromResponse,
+				version
+			};
+		});
+
+		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${idFromResponse}/versions/${version.id}`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return expectedVSP;
+		});
+
+		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${idFromResponse}/versions/${version.id}/questionnaire`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {data: JSON.stringify({}), schema: JSON.stringify({})};
+		});
+
+		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${idFromResponse}/versions/${version.id}/orchestration-template-candidate/manifest`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return manifest;
+		});
+
+		return SoftwareProductCreationActionHelper.createSoftwareProduct(store.dispatch, {
+			softwareProduct: softwareProductPostRequest
+		}).then(() => {
+			return SoftwareProductActionHelper.fetchSoftwareProduct(store.dispatch, {softwareProductId: idFromResponse, version});
+		}).then(() => {
+			return SoftwareProductActionHelper.loadSoftwareProductHeatCandidate(store.dispatch, {softwareProductId: idFromResponse, version});
+		}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
+			let newName = 'newName';
+			expectedStore = cloneAndSet(expectedStore, 'softwareProduct.softwareProductEditor.formReady', null);
+			ValidationHelper.dataChanged(store.dispatch, {deltaData: {'name': newName}, formName: forms.VENDOR_SOFTWARE_PRODUCT_DETAILS});
+			expectedStore = cloneAndSet(expectedStore, 'softwareProduct.softwareProductEditor.data.name', newName);
+			expect(store.getState()).toEqual(expectedStore);
+		});
+	});
+
+	it('Load and edit Software Product licensing data', () => {
+		const store = storeCreator();
+
+		const softwareProductPostRequest = VSPEditorPostFactory.build();
+		deepFreeze(softwareProductPostRequest);
+
+		const licenseModelId = softwareProductPostRequest.vendorId;
+		const LMVersion = VersionControllerUtilsFactory.build().version;
+		const secondLicenseModelId = 'secondLicenseModelId';
+
+		let FG1 = FeatureGroup.build();
+		let LA1 = LicenseAgreement.build({
+			featureGroupsIds: [FG1.id]
+		});
+
+		let FG2 = FeatureGroup.build();
+		let LA2 = LicenseAgreement.build({
+			featureGroupsIds: [FG2.id]
+		});
+
+		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual('/sdc1/feProxy/rest/v1/categories/resources/');
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return [];
+		});
+
+		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual('/onboarding-api/v1.0/vendor-license-models/?versionFilter=Final');
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: []};
+		});
+
+		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${licenseModelId}/versions/${LMVersion.id}/license-agreements`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: [LA1]};
+		});
+
+		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${licenseModelId}/versions/${LMVersion.id}/feature-groups`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: [FG1]};
+		});
+
+		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${secondLicenseModelId}/versions/${LMVersion.id}/license-agreements`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: [LA2]};
+		});
+
+		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-license-models/${secondLicenseModelId}/versions/${LMVersion.id}/feature-groups`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
+			return {results: [FG2]};
+		});
+
+		return SoftwareProductActionHelper.loadSoftwareProductDetailsData(store.dispatch, {licenseModelId, licensingVersion: LMVersion}).then(() => {
+			let state = store.getState();
+			expect(state.licenseModel.licenseAgreement.licenseAgreementList).toEqual([LA1]);
+			expect(state.licenseModel.featureGroup.featureGroupsList).toEqual([FG1]);
+			return SoftwareProductActionHelper.softwareProductEditorVendorChanged(store.dispatch,
+				{deltaData: {vendorId: secondLicenseModelId, licensingVersion: LMVersion},
+					formName: forms.VENDOR_SOFTWARE_PRODUCT_DETAILS});
+		}).then(() => {
+			let state = store.getState();
+			expect(state.licenseModel.licenseAgreement.licenseAgreementList).toEqual([LA2]);
+			expect(state.licenseModel.featureGroup.featureGroupsList).toEqual([FG2]);
+		});
+	});
+
+	it('Save Software product', () => {
+
+		const softwareProduct = VSPEditorFactoryWithLicensingData.build();
 		deepFreeze(softwareProduct);
 
 		const store = storeCreator({
@@ -152,15 +266,20 @@
 		});
 		deepFreeze(store.getState());
 
-		const toBeUpdatedSoftwareProductId = softwareProduct.id;
-		const softwareProductUpdateData = {
-			...softwareProduct,
+		const dataForUpdate = {
 			name: 'VSP5_UPDATED',
 			description: 'A software model for Fortigate._UPDATED'
 		};
+
+		const toBeUpdatedSoftwareProductId = softwareProduct.id;
+		let  softwareProductUpdateData = VSPEditorPostFactoryWithLicensingData.build(dataForUpdate);
+		delete softwareProductUpdateData.version;
+
+		const softwareProductPutRequest = buildFromExistingObject(VSPEditorFactoryWithLicensingData, softwareProductUpdateData, {id: toBeUpdatedSoftwareProductId, version: softwareProduct.version});
+
 		deepFreeze(softwareProductUpdateData);
 
-		const expectedStore = cloneAndSet(store.getState(), 'softwareProductList', [softwareProductUpdateData]);
+		const expectedStore = cloneAndSet(store.getState(), 'softwareProductList', [softwareProductPutRequest]);
 		const questionnaireData = {
 			general: {
 				affinityData: {
@@ -171,60 +290,30 @@
 		};
 		deepFreeze(questionnaireData);
 
-		mockRest.addHandler('save', ({data, options, baseUrl}) => {
-			const expectedData = {
-				name: 'VSP5_UPDATED',
-				description: 'A software model for Fortigate._UPDATED',
-				subCategory: 'resourceNewCategory.network connectivity.virtual links',
-				category: 'resourceNewCategory.network connectivity',
-				vendorId: '1',
-				vendorName: 'Vendor',
-				licensingVersion: '1.0',
-				icon: 'icon',
-				licensingData: {
-					licenceAgreement: '123',
-					featureGroups: [
-						'123', '234'
-					]
-				}
-			};
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}`);
-			expect(data).to.deep.equal(expectedData);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}/versions/${softwareProduct.version.id}`);
+			expect(data).toEqual(softwareProductUpdateData);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
-		mockRest.addHandler('save', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}/questionnaire`);
-			expect(data).to.deep.equal(questionnaireData);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}/versions/${softwareProduct.version.id}/questionnaire`);
+			expect(data).toEqual(questionnaireData);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
 		return SoftwareProductActionHelper.updateSoftwareProduct(store.dispatch, {
-			softwareProduct: softwareProductUpdateData,
+			softwareProduct: softwareProductPutRequest,
 			qdata: questionnaireData
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
+
 	it('Save Software product data only', () => {
-		const softwareProduct = {
-			name: 'VSP5',
-			id: '4730033D16C64E3CA556AB0AC4478218',
-			description: 'A software model for Fortigate.',
-			subCategory: 'resourceNewCategory.network connectivity.virtual links',
-			category: 'resourceNewCategory.network connectivity',
-			vendorId: '1',
-			vendorName: 'Vendor',
-			licensingVersion: '1.0',
-			icon: 'icon',
-			licensingData: {
-				licenceAgreement: '123',
-				featureGroups: [
-					'123', '234'
-				]
-			}
-		};
+
+		const softwareProduct = VSPEditorFactoryWithLicensingData.build();
 		deepFreeze(softwareProduct);
 
 		const store = storeCreator({
@@ -236,61 +325,35 @@
 		deepFreeze(store.getState());
 		const expectedStore = store.getState();
 
-		const toBeUpdatedSoftwareProductId = softwareProduct.id;
-		const softwareProductUpdateData = {
-			...softwareProduct,
+		const dataForUpdate = {
 			name: 'VSP5_UPDATED',
 			description: 'A software model for Fortigate._UPDATED'
 		};
+
+		const toBeUpdatedSoftwareProductId = softwareProduct.id;
+		let  softwareProductUpdateData = VSPEditorPostFactoryWithLicensingData.build(dataForUpdate);
+		delete softwareProductUpdateData.version;
+
+		const softwareProductPutRequest = buildFromExistingObject(VSPEditorFactoryWithLicensingData, softwareProductUpdateData, {id: toBeUpdatedSoftwareProductId, version: softwareProduct.version});
+
 		deepFreeze(softwareProductUpdateData);
 
-		mockRest.addHandler('save', ({data, options, baseUrl}) => {
-			const expectedData = {
-				name: 'VSP5_UPDATED',
-				description: 'A software model for Fortigate._UPDATED',
-				subCategory: 'resourceNewCategory.network connectivity.virtual links',
-				category: 'resourceNewCategory.network connectivity',
-				vendorId: '1',
-				vendorName: 'Vendor',
-				licensingVersion: '1.0',
-				icon: 'icon',
-				licensingData: {
-					licenceAgreement: '123',
-					featureGroups: [
-						'123', '234'
-					]
-				}
-			};
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}`);
-			expect(data).to.deep.equal(expectedData);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}/versions/${softwareProduct.version.id}`);
+			expect(data).toEqual(softwareProductUpdateData);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
 		return SoftwareProductActionHelper.updateSoftwareProductData(store.dispatch, {
-			softwareProduct: softwareProductUpdateData
+			softwareProduct: softwareProductPutRequest
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Save Software product questionnaire only', () => {
-		const softwareProduct = {
-			name: 'VSP5',
-			id: '4730033D16C64E3CA556AB0AC4478218',
-			description: 'A software model for Fortigate.',
-			subCategory: 'resourceNewCategory.network connectivity.virtual links',
-			category: 'resourceNewCategory.network connectivity',
-			vendorId: '1',
-			vendorName: 'Vendor',
-			icon: 'icon',
-			licensingData: {
-				licenceAgreement: '123',
-				featureGroups: [
-					'123', '234'
-				]
-			}
-		};
+		const softwareProduct = VSPEditorFactoryWithLicensingData.build();
 		deepFreeze(softwareProduct);
 
 		const store = storeCreator({
@@ -313,71 +376,30 @@
 		};
 		deepFreeze(questionnaireData);
 
-		mockRest.addHandler('save', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}/questionnaire`);
-			expect(data).to.deep.equal(questionnaireData);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${toBeUpdatedSoftwareProductId}/versions/${softwareProduct.version.id}/questionnaire`);
+			expect(data).toEqual(questionnaireData);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
 		return SoftwareProductActionHelper.updateSoftwareProductQuestionnaire(store.dispatch, {
 			softwareProductId: softwareProduct.id,
+			version: softwareProduct.version,
 			qdata: questionnaireData
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Handle category without subcategories', () => {
-		const categories = deepFreeze([
-			{
-				name: 'Resource Category 1',
-				normalizedName: 'resource category 1',
-				uniqueId: 'resourceNewCategory.resource category 1',
-				subcategories: [
-					{
-						name: 'Sub Category for RC 1',
-						normalizedName: 'sub category for rc 1',
-						uniqueId: 'resourceNewCategory.resource category 1.sub category for rc 1'
-					},
-					{
-						name: 'SC4RC2',
-						normalizedName: 'sc4rc2',
-						uniqueId: 'resourceNewCategory.resource category 1.sc4rc2'
-					},
-					{
-						name: 'SC4RC1',
-						normalizedName: 'sc4rc1',
-						uniqueId: 'resourceNewCategory.resource category 1.sc4rc1'
-					}
-				]
-			},
-			{
-				name: 'Eeeeee',
-				normalizedName: 'eeeeee',
-				uniqueId: 'resourceNewCategory.eeeeee'
-			},
-			{
-				name: 'Some Recource',
-				normalizedName: 'some recource',
-				uniqueId: 'resourceNewCategory.some recource',
-				subcategories: [
-					{
-						name: 'Second Sub Category for S',
-						normalizedName: 'second sub category for s',
-						uniqueId: 'resourceNewCategory.some recource.second sub category for s'
-					},
-					{
-						name: 'Sub Category for Some Rec',
-						normalizedName: 'sub category for some rec',
-						uniqueId: 'resourceNewCategory.some recource.sub category for some rec'
-					}
-				]
-			}
-		]);
-		const category = SoftwareProductCategoriesHelper.getCurrentCategoryOfSubCategory('resourceNewCategory.some recource.sub category for some rec', categories);
-		expect(category).to.equal('resourceNewCategory.some recource');
+
+		const categories = CategoryFactory.buildList(3);
+		categories[0].subcategories = CategoryFactory.buildList(3);
+		categories[2].subcategories = CategoryFactory.buildList(3);
+
+		const category = SoftwareProductCategoriesHelper.getCurrentCategoryOfSubCategory(categories[2].subcategories[2].uniqueId, categories);
+		expect(category).toEqual(categories[2].uniqueId);
 	});
 
 });
-
diff --git a/openecomp-ui/test/softwareProduct/details/vspQschema.js b/openecomp-ui/test/softwareProduct/details/vspQschema.js
index 5612b19..fb8ac6f 100644
--- a/openecomp-ui/test/softwareProduct/details/vspQschema.js
+++ b/openecomp-ui/test/softwareProduct/details/vspQschema.js
@@ -1,21 +1,17 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
 export const vspQschema = {
diff --git a/openecomp-ui/test/softwareProduct/landingPage/landingPage.test.js b/openecomp-ui/test/softwareProduct/landingPage/landingPage.test.js
new file mode 100644
index 0000000..f06ad61
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/landingPage/landingPage.test.js
@@ -0,0 +1,177 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {CategoryWithSubFactory}  from 'test-utils/factories/softwareProduct/VSPCategoriesFactory.js';
+import {LicenseAgreementStoreFactory}  from 'test-utils/factories/licenseModel/LicenseAgreementFactories.js';
+import {FeatureGroupStoreFactory}  from 'test-utils/factories/licenseModel/FeatureGroupFactories.js';
+import {default as SoftwareProductQSchemaFactory}  from 'test-utils/factories/softwareProduct/SoftwareProductQSchemaFactory.js';
+import {default as VspQdataFactory}  from 'test-utils/factories/softwareProduct/VspQdataFactory.js';
+import {VSPComponentsFactory}  from 'test-utils/factories/softwareProduct/SoftwareProductComponentsFactories.js';
+import {FinalizedLicenseModelFactory} from 'test-utils/factories/licenseModel/LicenseModelFactories.js';
+
+
+import {mapStateToProps} from 'sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js';
+import SoftwareProductLandingPageView from 'sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx';
+
+
+describe('Software Product Landing Page: ', function () {
+
+	let currentSoftwareProduct = {}, softwareProductCategories = [],
+		finalizedLicenseModelList, licenseAgreementList, featureGroupsList, qschema, qdata = {};
+	const dummyFunc = () => {};
+	beforeAll(function() {
+		finalizedLicenseModelList = FinalizedLicenseModelFactory.buildList(2);
+		currentSoftwareProduct = VSPEditorFactory.build({id:'RTRTG454545', vendorId: finalizedLicenseModelList[0].id, vendorName: finalizedLicenseModelList[0].name});
+		softwareProductCategories = CategoryWithSubFactory.buildList(2,{},{quantity: 1});
+		licenseAgreementList = LicenseAgreementStoreFactory.buildList(2);
+		featureGroupsList = FeatureGroupStoreFactory.buildList(2,{referencingLicenseAgreements:[licenseAgreementList[0].id]});
+		qdata = VspQdataFactory.build();
+		qschema = SoftwareProductQSchemaFactory.build(qdata);
+
+	});
+
+
+
+	it('should mapper exist', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it('should mapper return vsp basic data', () => {
+		const obj = {
+			softwareProduct: {
+				softwareProductEditor: {
+					data: currentSoftwareProduct
+				},
+				softwareProductCategories,
+				softwareProductQuestionnaire: {
+					qdata,
+					qschema
+				},
+				softwareProductComponents: {
+					componentsList:[]
+				}
+			},
+			finalizedLicenseModelList,
+			licenseModel: {
+				licenseAgreement: {
+					licenseAgreementList
+				},
+				featureGroup: {
+					featureGroupsList
+				}
+			}
+		};
+
+		const result = mapStateToProps(obj);
+		expect(result.currentSoftwareProduct).toBeTruthy();
+		expect(result.isReadOnlyMode).toEqual(true);
+
+	});
+
+	it('vsp landing basic view', () => {
+
+		const params = {
+			currentSoftwareProduct,
+			isReadOnlyMode: false,
+			componentsList: VSPComponentsFactory.buildList(2)
+		};
+
+		let vspLandingView = TestUtils.renderIntoDocument(<SoftwareProductLandingPageView
+			{...params}/>);
+		expect(vspLandingView).toBeTruthy();
+	});
+
+	it('vsp landing handleOnDragEnter test ', () => {
+
+		const params = {
+			currentSoftwareProduct,
+			isReadOnlyMode: false,
+			componentsList: VSPComponentsFactory.buildList(2)
+		};
+
+		let vspLandingView = TestUtils.renderIntoDocument(<SoftwareProductLandingPageView
+			{...params}/>);
+		expect(vspLandingView).toBeTruthy();
+		vspLandingView.handleOnDragEnter(false);
+		expect(vspLandingView.state.dragging).toEqual(true);
+	});
+
+
+	it('vsp landing handleImportSubmit test ', () => {
+
+		const params = {
+			currentSoftwareProduct,
+			isReadOnlyMode: false,
+			componentsList: VSPComponentsFactory.buildList(2),
+			onUploadConfirmation:  dummyFunc,
+			onUpload: dummyFunc,
+			onInvalidFileSizeUpload: dummyFunc
+		};
+
+		let vspLandingView = TestUtils.renderIntoDocument(<SoftwareProductLandingPageView
+			{...params}/>);
+		expect(vspLandingView).toBeTruthy();
+		const files = [
+			{
+				name: 'aaa',
+				size: 123
+			}
+		];
+
+		vspLandingView.handleImportSubmit(files, false);
+		expect(vspLandingView.state.dragging).toEqual(false);
+		expect(vspLandingView.state.fileName).toEqual(files[0].name);
+		const files1 = [
+			{
+				name: 'bbb',
+				size: 0
+			}
+		];
+		vspLandingView.handleImportSubmit(files1, false);
+	});
+
+	it('vsp landing handleImportSubmit with damaged file test ', () => {
+
+		const params = {
+			currentSoftwareProduct,
+			isReadOnlyMode: false,
+			componentsList: VSPComponentsFactory.buildList(2),
+			onUploadConfirmation:  dummyFunc,
+			onUpload: dummyFunc,
+			onInvalidFileSizeUpload: dummyFunc
+		};
+
+		let vspLandingView = TestUtils.renderIntoDocument(<SoftwareProductLandingPageView
+			{...params}/>);
+		expect(vspLandingView).toBeTruthy();
+		const files = [
+			{
+				name: 'aaa',
+				size: 0
+			}
+		];
+
+		vspLandingView.handleImportSubmit(files, false);
+		expect(vspLandingView.state.dragging).toEqual(false);
+		expect(vspLandingView.state.fileName).toEqual('');
+	});
+});
diff --git a/openecomp-ui/test/softwareProduct/networks/SoftwareProductNetworksView.test.js b/openecomp-ui/test/softwareProduct/networks/SoftwareProductNetworksView.test.js
index a7f7b2b..6ef6bcf 100644
--- a/openecomp-ui/test/softwareProduct/networks/SoftwareProductNetworksView.test.js
+++ b/openecomp-ui/test/softwareProduct/networks/SoftwareProductNetworksView.test.js
@@ -1,63 +1,39 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
 
-import expect from 'expect';
 import React from 'react';
 import TestUtils from 'react-addons-test-utils';
 import {mapStateToProps}  from 'sdc-app/onboarding/softwareProduct/networks/SoftwareProductNetworks.js';
 import SoftwareProductNetworksView from 'sdc-app/onboarding/softwareProduct/networks/SoftwareProductNetworksView.jsx';
-import {statusEnum as versionStatusEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
+//import {statusEnum as versionStatusEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
+
+import VSPNetworkFactory from 'test-utils/factories/softwareProduct/SoftwareProductNetworkFactory.js';
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {VSPComponentsVersionControllerFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsNetworkFactories.js';
 
 describe('SoftwareProductNetworks Mapper and View Classes', () => {
 	it ('mapStateToProps mapper exists', () => {
-		expect(mapStateToProps).toExist();
+		expect(mapStateToProps).toBeTruthy();
 	});
 
 	it ('mapStateToProps data test', () => {
 
-		const currentSoftwareProduct = {
-			name: 'VSp',
-			description: 'dfdf',
-			vendorName: 'V1',
-			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
-			category: 'resourceNewCategory.application l4+',
-			subCategory: 'resourceNewCategory.application l4+.database',
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			version: '0.10',
-			viewableVersions: ['0.1', '0.2'],
-			status: versionStatusEnum.CHECK_OUT_STATUS,
-			lockingUser: 'cs0008'
-		};
+		const currentSoftwareProduct = VSPEditorFactory.build();
 
-		const networksList =   [
-			{
-				name:'dummy_net_1',
-				dhcp:true,
-				'id':'7F60CD390458421DA588AF4AD217B93F'
-			},
-			{
-				name:'dummy_net_2',
-				dhcp:true,
-				'id':'AD217B93F7F60CD390458421DA588AF4'
-			}
-		];
+		const networksList =   VSPNetworkFactory.buildList(2);
 
 		var obj = {
 			softwareProduct: {
@@ -71,49 +47,21 @@
 			}
 		};
 		var results = mapStateToProps(obj);
-		expect(results.networksList,).toExist();
+		expect(results.networksList).toBeTruthy();
 	});
 
 	it ('view simple test', () => {
 
-		const currentSoftwareProduct = {
-			name: 'VSp',
-			description: 'dfdf',
-			vendorName: 'V1',
-			vendorId: '97B3E2525E0640ACACF87CE6B3753E80',
-			category: 'resourceNewCategory.application l4+',
-			subCategory: 'resourceNewCategory.application l4+.database',
-			id: 'D4774719D085414E9D5642D1ACD59D20',
-			version: '0.10',
-			viewableVersions: ['0.1', '0.2'],
-			status: versionStatusEnum.CHECK_OUT_STATUS,
-			lockingUser: 'cs0008'
-		};
+		const currentSoftwareProduct = VSPEditorFactory.build();
 
-		const networksList =   [
-			{
-				name:'dummy_net_1',
-				dhcp:true,
-				'id':'7F60CD390458421DA588AF4AD217B93F'
-			},
-			{
-				name:'dummy_net_2',
-				dhcp:true,
-				'id':'AD217B93F7F60CD390458421DA588AF4'
-			}
-		];
+		const networksList = VSPNetworkFactory.buildList(2);
 
-		const versionControllerData = {
-			version: '1',
-			viewableVersions: [],
-			status: 'locked',
-			isCheckedOut: true
-		};
+		const versionControllerData = VSPComponentsVersionControllerFactory.build();
 
 		var renderer = TestUtils.createRenderer();
 		renderer.render(<SoftwareProductNetworksView networksList={networksList} versionControllerData={versionControllerData} currentSoftwareProduct={currentSoftwareProduct}/>);
 		var renderedOutput = renderer.getRenderOutput();
-		expect(renderedOutput).toExist();
+		expect(renderedOutput).toBeTruthy();
 
 	});
 
diff --git a/openecomp-ui/test/softwareProduct/networks/softwareProductNetworksActionHelper.test.js b/openecomp-ui/test/softwareProduct/networks/softwareProductNetworksActionHelper.test.js
index 2920803..1475ae6 100644
--- a/openecomp-ui/test/softwareProduct/networks/softwareProductNetworksActionHelper.test.js
+++ b/openecomp-ui/test/softwareProduct/networks/softwareProductNetworksActionHelper.test.js
@@ -1,62 +1,49 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
-import {expect} from 'chai';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
 import {cloneAndSet} from 'test-utils/Util.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 import SoftwareProductNetworksActionHelper from 'sdc-app/onboarding/softwareProduct/networks/SoftwareProductNetworksActionHelper.js';
+import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
+
+import VSPNetworkFactory from 'test-utils/factories/softwareProduct/SoftwareProductNetworkFactory.js';
 
 const softwareProductId = '123';
 
 describe('Software Product Networks ActionHelper Tests', function () {
 	it('Get Software Products Networks List', () => {
 		const store = storeCreator();
+		const vcData = VersionControllerUtilsFactory.build();
 		deepFreeze(store.getState());
 
-		const networksList = [
-			{
-				name:'dummy_net_1',
-				dhcp:true,
-				'id':'7F60CD390458421DA588AF4AD217B93F'
-			},
-			{
-				name:'dummy_net_2',
-				dhcp:true,
-				'id':'AD217B93F7F60CD390458421DA588AF4'
-			}
-		];
+		const networksList = VSPNetworkFactory.buildList(2);
 
 		deepFreeze(networksList);
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductNetworks.networksList', networksList);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/networks`);
-			expect(data).to.deep.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`/onboarding-api/v1.0/vendor-software-products/${softwareProductId}/versions/${vcData.version.id}/networks`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {results: networksList};
 		});
 
-		return SoftwareProductNetworksActionHelper.fetchNetworksList(store.dispatch, {softwareProductId}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		return SoftwareProductNetworksActionHelper.fetchNetworksList(store.dispatch, {softwareProductId, version: vcData.version}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 
 	});
diff --git a/openecomp-ui/test/softwareProduct/processes/SoftwareProductEditor.test.js b/openecomp-ui/test/softwareProduct/processes/SoftwareProductEditor.test.js
new file mode 100644
index 0000000..b4df9be
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/processes/SoftwareProductEditor.test.js
@@ -0,0 +1,62 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {mapStateToProps}  from 'sdc-app/onboarding/softwareProduct/processes/SoftwareProductProcessesEditor.js';
+import SoftwareProductProcessesEditorView from 'sdc-app/onboarding/softwareProduct/processes/SoftwareProductProcessesEditorView.jsx';
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+
+describe('Software Product  Processes Editor Module Tests', function () {
+
+	it('should mapper exist', () => {
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it('should return empty data', () => {
+
+		const currentSoftwareProduct = VSPEditorFactory.build();
+
+		var state = {
+			softwareProduct: {
+				softwareProductEditor: {
+					data: currentSoftwareProduct
+				},
+				softwareProductProcesses:
+				{
+					processesList: [],
+					processesEditor: {data: {}}
+				}
+			}
+		};
+
+		var results = mapStateToProps(state);
+		expect(results.data).toEqual({});
+		expect(results.previousData).toEqual(undefined);
+	});
+
+	it('jsx view test', () => {
+		var view = TestUtils.renderIntoDocument(<SoftwareProductProcessesEditorView
+			isReadOnlyMode={true}
+			data={{}}
+			previousData={{}}
+			onDataChanged={() => {}}
+			onSubmit={() => {}}
+			onClose={() => {}}/>);
+		expect(view).toBeTruthy();
+	});
+
+});
diff --git a/openecomp-ui/test/softwareProduct/processes/SoftwareProductProcessesView.test.js b/openecomp-ui/test/softwareProduct/processes/SoftwareProductProcessesView.test.js
new file mode 100644
index 0000000..2d7da91
--- /dev/null
+++ b/openecomp-ui/test/softwareProduct/processes/SoftwareProductProcessesView.test.js
@@ -0,0 +1,75 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+
+import React from 'react';
+import TestUtils from 'react-addons-test-utils';
+import {mapStateToProps}  from 'sdc-app/onboarding/softwareProduct/processes/SoftwareProductProcesses.js';
+import SoftwareProductProcessesView from 'sdc-app/onboarding/softwareProduct/processes/SoftwareProductProcessesView.jsx';
+
+import {VSPProcessStoreFactory} from 'test-utils/factories/softwareProduct/SoftwareProductProcessFactories.js';
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import {VSPComponentsVersionControllerFactory} from 'test-utils/factories/softwareProduct/SoftwareProductComponentsNetworkFactories.js';
+
+describe('SoftwareProductProcesses Mapper and View Classes', () => {
+	it ('mapStateToProps mapper exists', () => {		
+		expect(mapStateToProps).toBeTruthy();
+	});
+
+	it ('mapStateToProps data test', () => {		
+		const currentSoftwareProduct = VSPEditorFactory.build();
+
+		const processesList =   VSPProcessStoreFactory.buildList(2);
+
+		var obj = {
+			softwareProduct: {
+				softwareProductEditor: {
+					data: currentSoftwareProduct
+				},
+				softwareProductProcesses:
+				{
+					processesList,
+					processesEditor: {data: {}}
+				}
+			}
+		};
+		var results = mapStateToProps(obj);
+		expect(results.processesList).toBeTruthy();
+	});
+
+	it ('view simple test', () => {		
+		const currentSoftwareProduct = VSPEditorFactory.build();			
+		const processesList = VSPProcessStoreFactory.buildList(2);
+
+		const versionControllerData = VSPComponentsVersionControllerFactory.build();
+		
+		
+		var renderer = TestUtils.createRenderer();
+		renderer.render(
+			<SoftwareProductProcessesView
+				processesList={processesList}
+				versionControllerData={versionControllerData}
+				currentSoftwareProduct={currentSoftwareProduct}				
+				onAddProcess={() => {}}
+				onEditProcess={() => {}}
+				onDeleteProcess={() => {}}
+				isDisplayEditor={false}
+				isReadOnlyMode={false} />
+			);
+		var renderedOutput = renderer.getRenderOutput();
+		expect(renderedOutput).toBeTruthy();
+
+	});
+});
diff --git a/openecomp-ui/test/softwareProduct/processes/test.js b/openecomp-ui/test/softwareProduct/processes/test.js
index 73f22a7..43110d2 100644
--- a/openecomp-ui/test/softwareProduct/processes/test.js
+++ b/openecomp-ui/test/softwareProduct/processes/test.js
@@ -1,38 +1,44 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
-import {expect} from 'chai';
 import deepFreeze from 'deep-freeze';
 import mockRest from 'test-utils/MockRest.js';
 import {cloneAndSet} from 'test-utils/Util.js';
 import {storeCreator} from 'sdc-app/AppStore.js';
 import Configuration from 'sdc-app/config/Configuration.js';
 import SoftwareProductProcessesActionHelper from 'sdc-app/onboarding/softwareProduct/processes/SoftwareProductProcessesActionHelper.js';
+import {
+	VSPProcessPostFactory,
+	VSPProcessStoreFactory,
+	VSPProcessPostFactoryWithType,
+	VSPProcessStoreFactoryWithType,
+	VSPProcessStoreWithFormDataFactory,
+	VSPProcessPostWithFormDataFactory,
+	VSPProcessStoreWithArtifactNameFactory } from 'test-utils/factories/softwareProduct/SoftwareProductProcessFactories.js';
+import {buildFromExistingObject} from 'test-utils/Util.js';
+import {VSPEditorFactory} from 'test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js';
+import ValidationHelper from 'sdc-app/common/helpers/ValidationHelper.js';
 
 const softwareProductId = '123';
+const version = VSPEditorFactory.build().version;
 
 describe('Software Product Processes Module Tests', function () {
 
 	let restPrefix = '';
 
-	before(function() {
+	beforeAll(function() {
 		restPrefix = Configuration.get('restPrefix');
 		deepFreeze(restPrefix);
 	});
@@ -45,27 +51,18 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const softwareProductPostRequest = {
-			name: 'Pr1',
-			description: 'string'
-		};
-		const softwareProductProcessToAdd = {
-			name: 'Pr1',
-			description: 'string'
-		};
 		const softwareProductProcessFromResponse = 'ADDED_ID';
-		const softwareProductProcessAfterAdd = {
-			...softwareProductProcessToAdd,
-			id: softwareProductProcessFromResponse
-		};
+
+		const softwareProductProcessAfterAdd = VSPProcessStoreFactory.build({id: softwareProductProcessFromResponse});
+		const softwareProductPostRequest = buildFromExistingObject(VSPProcessPostFactory, softwareProductProcessAfterAdd);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', [softwareProductProcessAfterAdd]);
 
-		mockRest.addHandler('create', ({data, options, baseUrl}) => {
+		mockRest.addHandler('post', ({data, options, baseUrl}) => {
 
-			expect(baseUrl).to.equal(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/processes`);
-			expect(data).to.deep.equal(softwareProductPostRequest);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes`);
+			expect(data).toEqual(softwareProductPostRequest);
+			expect(options).toEqual(undefined);
 			return {
 				returnCode: 'OK',
 				value: softwareProductProcessFromResponse
@@ -74,12 +71,48 @@
 
 		return SoftwareProductProcessesActionHelper.saveProcess(store.dispatch,
 			{
-				softwareProductId: softwareProductId,
+				softwareProductId,
+				version,
 				previousProcess: null,
-				process: softwareProductProcessToAdd
+				process: softwareProductPostRequest
 			}
 		).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
+		});
+	});
+
+	it('Add Software Products Processes with type', () => {
+
+		const store = storeCreator();
+		deepFreeze(store.getState());
+
+		const softwareProductProcessFromResponse = 'ADDED_ID';
+
+		const softwareProductProcessAfterAdd = VSPProcessStoreFactoryWithType.build({id: softwareProductProcessFromResponse});
+		const softwareProductPostRequest = buildFromExistingObject(VSPProcessPostFactoryWithType, softwareProductProcessAfterAdd);
+
+		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', [softwareProductProcessAfterAdd]);
+
+		mockRest.addHandler('post', ({data, options, baseUrl}) => {
+
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes`);
+			expect(data).toEqual(softwareProductPostRequest);
+			expect(options).toEqual(undefined);
+			return {
+				returnCode: 'OK',
+				value: softwareProductProcessFromResponse
+			};
+		});
+
+		return SoftwareProductProcessesActionHelper.saveProcess(store.dispatch,
+			{
+				softwareProductId,
+				version,
+				previousProcess: null,
+				process: softwareProductPostRequest
+			}
+		).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
@@ -88,50 +121,38 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const softwareProductPostRequest = {
-			name: 'Pr1',
-			description: 'string'
-		};
-		const softwareProductProcessToAdd = {
-			name: 'Pr1',
-			description: 'string',
-			formData: {
-				name: 'new artifact name'
-			}
-		};
-		const softwareProductProcessFromResponse = 'ADDED_ID';
-		const softwareProductProcessAfterAdd = {
-			...softwareProductProcessToAdd,
-			id: softwareProductProcessFromResponse
-		};
+		const softwareProductPostRequest = VSPProcessPostFactoryWithType.build();
+		const softwareProductProcessToAdd = VSPProcessPostWithFormDataFactory.build(softwareProductPostRequest);
+		const softwareProductProcessAfterAdd = VSPProcessStoreWithFormDataFactory.build();
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', [softwareProductProcessAfterAdd]);
 
-		mockRest.addHandler('create', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/processes`);
-			expect(data).to.deep.equal(softwareProductPostRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('post', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes`);
+			expect(data).toEqual(softwareProductPostRequest);
+			expect(options).toEqual(undefined);
 			return {
 				returnCode: 'OK',
-				value: softwareProductProcessFromResponse
+				value: softwareProductProcessAfterAdd.id
 			};
 		});
 
-		mockRest.addHandler('create', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/processes/${softwareProductProcessAfterAdd.id}/upload`);
-			expect(data).to.deep.equal(softwareProductProcessToAdd.formData);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('post', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes/${softwareProductProcessAfterAdd.id}/upload`);
+			expect(data).toEqual(softwareProductProcessToAdd.formData);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
 		return SoftwareProductProcessesActionHelper.saveProcess(store.dispatch,
 			{
-				softwareProductId: softwareProductId,
+				softwareProductId,
+				version,
 				previousProcess: null,
 				process: softwareProductProcessToAdd
 			}
 		).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
@@ -139,14 +160,7 @@
 	//** UPDATE
 	//**
 	it('Update Software Products Processes', () => {
-		const softwareProductProcessesList = [
-			{
-				name: 'Pr1',
-				description: 'string',
-				id: 'EBADF561B7FA4A788075E1840D0B5971',
-				artifactName: 'artifact'
-			}
-		];
+		const softwareProductProcessesList = VSPProcessStoreWithArtifactNameFactory.buildList(1);
 		deepFreeze(softwareProductProcessesList);
 
 		const store = storeCreator({
@@ -160,47 +174,47 @@
 
 		const toBeUpdatedProcessId = softwareProductProcessesList[0].id;
 		const previousProcessData = softwareProductProcessesList[0];
-		const processUpdateData = {
-			...softwareProductProcessesList[0],
-			name: 'Pr1_UPDATED',
-			description: 'string_UPDATED'
-		};
+		const processUpdateData = VSPProcessStoreWithArtifactNameFactory.build(
+			{...previousProcessData,
+				name: 'Pr1_UPDATED',
+				description: 'string_UPDATED',
+				type: 'Other'
+			}
+		);
+
 		deepFreeze(processUpdateData);
 
-		const processPutRequest = {
+		const processPutRequest = VSPProcessPostFactory.build({
 			name: 'Pr1_UPDATED',
-			description: 'string_UPDATED'
-		};
+			description: 'string_UPDATED',
+			type: 'Other'
+		});
 		deepFreeze(processPutRequest);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', [processUpdateData]);
 
 
-		mockRest.addHandler('save', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/processes/${toBeUpdatedProcessId}`);
-			expect(data).to.deep.equal(processPutRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes/${toBeUpdatedProcessId}`);
+			expect(data).toEqual(processPutRequest);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
 		return SoftwareProductProcessesActionHelper.saveProcess(store.dispatch,
 			{
-				softwareProductId: softwareProductId,
+				softwareProductId,
+				version,
 				previousProcess: previousProcessData,
 				process: processUpdateData
 			}
 		).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
 	it('Update Software Products Processes and uploaded file', () => {
-		const previousProcessData = {
-			id: 'EBADF561B7FA4A788075E1840D0B5971',
-			name: 'p1',
-			description: 'string',
-			artifactName: 'artifact'
-		};
+		const previousProcessData = VSPProcessStoreWithArtifactNameFactory.build();
 		deepFreeze(previousProcessData);
 
 		const store = storeCreator({
@@ -212,45 +226,47 @@
 		});
 		deepFreeze(store.getState());
 
-		const newProcessToUpdate = {
+		const newProcessToUpdate = VSPProcessStoreWithFormDataFactory.build({
 			...previousProcessData,
 			name: 'new name',
 			formData: {
 				name: 'new artifact name'
 			}
-		};
+		});
 		deepFreeze(newProcessToUpdate);
 
-		const newProcessToPutRequest = {
+		const newProcessToPutRequest = VSPProcessPostFactory.build({
 			name: newProcessToUpdate.name,
-			description: previousProcessData.description
-		};
+			description: previousProcessData.description,
+			type: previousProcessData.type
+		});
 		deepFreeze(newProcessToPutRequest);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', [newProcessToUpdate]);
 
-		mockRest.addHandler('save', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/processes/${previousProcessData.id}`);
-			expect(data).to.deep.equal(newProcessToPutRequest);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('put', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes/${newProcessToUpdate.id}`);
+			expect(data).toEqual(newProcessToPutRequest);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
-		mockRest.addHandler('create', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/processes/${previousProcessData.id}/upload`);
-			expect(data).to.deep.equal(newProcessToUpdate.formData);
-			expect(options).to.equal(undefined);
+		mockRest.addHandler('post', ({data, options, baseUrl}) => {
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes/${newProcessToUpdate.id}/upload`);
+			expect(data).toEqual(newProcessToUpdate.formData);
+			expect(options).toEqual(undefined);
 			return {returnCode: 'OK'};
 		});
 
 		return SoftwareProductProcessesActionHelper.saveProcess(store.dispatch,
 			{
-				softwareProductId: softwareProductId,
+				softwareProductId,
+				version,
 				previousProcess: previousProcessData,
 				process: newProcessToUpdate
 			}
 		).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
@@ -261,20 +277,7 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		const softwareProductProcessesList = [
-			{
-				name: 'Pr1',
-				description: 'hjhj',
-				id: 'EBADF561B7FA4A788075E1840D0B5971',
-				artifactName: 'artifact'
-			},
-			{
-				name: 'Pr1',
-				description: 'hjhj',
-				id: '2F47447D22DB4C53B020CA1E66201EF2',
-				artifactName: 'artifact'
-			}
-		];
+		const softwareProductProcessesList = VSPProcessStoreFactory.buildList(2);
 
 		deepFreeze(softwareProductProcessesList);
 
@@ -283,14 +286,14 @@
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', softwareProductProcessesList);
 
 		mockRest.addHandler('fetch', ({options, data, baseUrl}) => {
-			expect(baseUrl).to.equal(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/processes`);
-			expect(data).to.deep.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${version.id}/processes`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {results: softwareProductProcessesList};
 		});
 
-		return SoftwareProductProcessesActionHelper.fetchProcessesList(store.dispatch, {softwareProductId}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+		return SoftwareProductProcessesActionHelper.fetchProcessesList(store.dispatch, {softwareProductId, version}).then(() => {
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
@@ -298,33 +301,32 @@
 	//** DELETE
 	//**
 	it('Delete Software Products Processes', () => {
-		const softwareProductProcessesList = [
-			{
-				name: 'Pr1',
-				description: 'hjhj',
-				id: 'EBADF561B7FA4A788075E1840D0B5971',
-				artifactName: 'artifact'
-			}
-		];
+		const softwareProductProcessesList = VSPProcessStoreWithArtifactNameFactory.buildList(1);
+		const currentSoftwareProduct = VSPEditorFactory.build();
 
 		deepFreeze(softwareProductProcessesList);
 		const store = storeCreator({
 			softwareProduct: {
 				softwareProductProcesses: {
 					processesList: softwareProductProcessesList
+				},
+				softwareProductEditor: {
+					data: currentSoftwareProduct
 				}
 			}
 		});
 
-		const processId = 'EBADF561B7FA4A788075E1840D0B5971';
+		const processId = softwareProductProcessesList[0].id;
+		const version = store.getState().softwareProduct.softwareProductEditor.data.version;
+		const versionId = version.id;
 		deepFreeze(store.getState());
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesList', []);
 
 		mockRest.addHandler('destroy', ({data, options, baseUrl}) => {
-			expect(baseUrl).to.equal(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/processes/${processId}`);
-			expect(data).to.equal(undefined);
-			expect(options).to.equal(undefined);
+			expect(baseUrl).toEqual(`${restPrefix}/v1.0/vendor-software-products/${softwareProductId}/versions/${versionId}/processes/${processId}`);
+			expect(data).toEqual(undefined);
+			expect(options).toEqual(undefined);
 			return {
 				results: {
 					returnCode: 'OK'
@@ -334,9 +336,10 @@
 
 		return SoftwareProductProcessesActionHelper.deleteProcess(store.dispatch, {
 			process: softwareProductProcessesList[0],
-			softwareProductId
+			softwareProductId,
+			version
 		}).then(() => {
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 		});
 	});
 
@@ -344,10 +347,7 @@
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
-		let process = {
-			id: 'p_id',
-			name: 'p_name'
-		};
+		let process = VSPProcessStoreFactory.build();
 		deepFreeze(process);
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processToDelete', process);
@@ -355,7 +355,7 @@
 		SoftwareProductProcessesActionHelper.openDeleteProcessesConfirm(store.dispatch, {process});
 
 		setTimeout(function(){
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 			done();
 		}, 100);
 	});
@@ -369,7 +369,7 @@
 		SoftwareProductProcessesActionHelper.hideDeleteConfirm(store.dispatch);
 
 		setTimeout(function(){
-			expect(store.getState()).to.deep.equal(expectedStore);
+			expect(store.getState()).toEqual(expectedStore);
 			done();
 		}, 100);
 	});
@@ -377,7 +377,7 @@
 	//**
 	//** CREATE/EDIT
 	//**
-	it('Validating open Software Products Processes for create', done => {
+	it('Validating open Software Products Processes for create', () => {
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
@@ -387,28 +387,20 @@
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesEditor.data', process);
 
 		SoftwareProductProcessesActionHelper.openEditor(store.dispatch);
-
-		setTimeout(function(){
-			expect(store.getState()).to.deep.equal(expectedStore);
-			done();
-		}, 100);
+		expect(store.getState().softwareProduct.softwareProductProcesses.processesEditor.data).toEqual(expectedStore.softwareProduct.softwareProductProcesses.processesEditor.data);
 	});
 
-	it('Validating close Software Products Processes from editing mode', done => {
+	it('Validating close Software Products Processes from editing mode', () => {
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesEditor', {});
 
 		SoftwareProductProcessesActionHelper.closeEditor(store.dispatch);
-
-		setTimeout(function(){
-			expect(store.getState()).to.deep.equal(expectedStore);
-			done();
-		}, 100);
+		expect(store.getState()).toEqual(expectedStore);
 	});
 
-	it('Validating open Software Products Processes for editing', done => {
+	it('Validating open Software Products Processes for editing', () => {
 		const store = storeCreator();
 		deepFreeze(store.getState());
 
@@ -418,42 +410,8 @@
 		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesEditor.data', process);
 
 		SoftwareProductProcessesActionHelper.openEditor(store.dispatch, process);
+		expect(store.getState().softwareProduct.softwareProductProcesses.processesEditor.data).toEqual(expectedStore.softwareProduct.softwareProductProcesses.processesEditor.data);
 
-		setTimeout(function(){
-			expect(store.getState()).to.deep.equal(expectedStore);
-			done();
-		}, 100);
 	});
 
-	it('Validating Software Products Processes dataChanged event', done => {
-		let process = {name: 'aa', description: 'xx'};
-		deepFreeze(process);
-
-		const store = storeCreator({
-			softwareProduct: {
-				softwareProductProcesses: {
-					processesEditor: {
-						data: process
-					}
-				}
-			}
-		});
-		deepFreeze(store.getState());
-
-		let deltaData = {name: 'bb'};
-		deepFreeze(deltaData);
-
-		let expectedProcess = {name: 'bb', description: 'xx'};
-		deepFreeze(expectedProcess);
-
-		const expectedStore = cloneAndSet(store.getState(), 'softwareProduct.softwareProductProcesses.processesEditor.data', expectedProcess);
-
-		SoftwareProductProcessesActionHelper.processEditorDataChanged(store.dispatch, {deltaData});
-
-		setTimeout(function(){
-			expect(store.getState()).to.deep.equal(expectedStore);
-			done();
-		}, 100);
-	});
 });
-
diff --git a/openecomp-ui/test/utils/errorResponseHandler.test.js b/openecomp-ui/test/utils/errorResponseHandler.test.js
index fd9dec6..40836f7 100644
--- a/openecomp-ui/test/utils/errorResponseHandler.test.js
+++ b/openecomp-ui/test/utils/errorResponseHandler.test.js
@@ -1,28 +1,24 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
 import deepFreeze from 'deep-freeze';
-import expect from 'expect';
+
 import {cloneAndSet} from '../../test-utils/Util.js';
 import store from 'sdc-app/AppStore.js';
 import errorResponseHandler from 'nfvo-utils/ErrorResponseHandler.js';
+import {typeEnum as modalType} from 'nfvo-components/modal/GlobalModalConstants.js';
 
 describe('Error Response Handler Util', () => {
 
@@ -44,15 +40,20 @@
 		};
 		deepFreeze(xhr);
 
-		const errorNotification = {
-			type: 'error', title: 'Error: SVC4122', msg: 'Error: Invalid data.', timeout: undefined,
-			validationResponse: undefined
+		const errorNotification = {			
+			title: 'Error: SVC4122',
+			msg: 'Error: Invalid data.',			
+			modalClassName: 'notification-modal',
+			type: modalType.ERROR	
 		};
-		const expectedStore = cloneAndSet(store.getState(), 'notification', errorNotification);
+
+
+
+		const expectedStore = cloneAndSet(store.getState(), 'modal', errorNotification);
 
 		errorResponseHandler(xhr, textStatus, errorThrown);
 
-		setTimeout(function () {
+		setTimeout(function () {			
 			expect(store.getState()).toEqual(expectedStore);
 			done();
 		}, 100);
@@ -72,12 +73,15 @@
 			}
 		};
 		deepFreeze(xhr);
-
-		const errorNotification = {
-			type: 'error', title: 'Error: SVC4122', msg: 'Error: Invalid artifact type newType.', timeout: undefined,
-			validationResponse: undefined
+	
+		const errorNotification = {			
+			title: 'Error: SVC4122',
+			msg: 'Error: Invalid artifact type newType.',			
+			modalClassName: 'notification-modal',
+			type: modalType.ERROR	
 		};
-		const expectedStore = cloneAndSet(store.getState(), 'notification', errorNotification);
+
+		const expectedStore = cloneAndSet(store.getState(), 'modal', errorNotification);
 
 		errorResponseHandler(xhr, textStatus, errorThrown);
 
@@ -97,11 +101,14 @@
 		};
 		deepFreeze(xhr);
 
-		const errorNotification = {
-			type: 'error', title: 'AA', msg: 'Error: Invalid data.', timeout: undefined,
-			validationResponse: undefined
+		const errorNotification = {			
+			title: 'AA',
+			msg: 'Error: Invalid data.',			
+			modalClassName: 'notification-modal',
+			type: modalType.ERROR	
 		};
-		const expectedStore = cloneAndSet(store.getState(), 'notification', errorNotification);
+
+		const expectedStore = cloneAndSet(store.getState(), 'modal', errorNotification);
 
 		errorResponseHandler(xhr, textStatus, errorThrown);
 
@@ -118,12 +125,15 @@
 			responseText: 'Internal server error.'
 		};
 		deepFreeze(xhr);
-
-		const errorNotification = {
-			type: 'error', title: '500', msg: 'Internal server error.', timeout: undefined,
-			validationResponse: undefined
+	
+		const errorNotification = {			
+			title: '500',
+			msg: 'Internal server error.',			
+			modalClassName: 'notification-modal',
+			type: modalType.ERROR	
 		};
-		const expectedStore = cloneAndSet(store.getState(), 'notification', errorNotification);
+
+		const expectedStore = cloneAndSet(store.getState(), 'modal', errorNotification);
 
 		errorResponseHandler(xhr, textStatus, errorThrown);
 
diff --git a/openecomp-ui/test/utils/restApiUtil.test.js b/openecomp-ui/test/utils/restApiUtil.test.js
deleted file mode 100644
index 2a5e69b..0000000
--- a/openecomp-ui/test/utils/restApiUtil.test.js
+++ /dev/null
@@ -1,149 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
- * 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.
- * ============LICENSE_END=========================================================
- */
-
-import expect from 'expect';
-import $ from 'jquery';
-import RestAPIUtil, {makeQueryParams} from 'src/nfvo-utils/RestAPIUtil';
-
-const URL = 'http://bla.ble.blu/';
-
-describe('RestAPIUtil Util class', () => {
-
-	beforeEach(()=> {
-		$.ajax = (options) => options;
-	});
-
-	it('RestAPIUtil does exist', () => {
-		expect(RestAPIUtil).toExist();
-	});
-
-	it('RestAPIUtil makeQueryParams does exist', () => {
-		expect(makeQueryParams).toExist();
-	});
-
-	it('RestAPIUtil makeQueryParams params', () => {
-		const pageStart = 1, pageSize = 25;
-		const response = makeQueryParams({pagination: {pageStart, pageSize}});
-		expect(response.pageStart).toBe(pageStart);
-		expect(response.pageSize).toBe(pageSize);
-	});
-
-	it('normal basic fetch', () => {
-		const response = RestAPIUtil.fetch(URL);
-		expect(response).toExist();
-	});
-
-	it('no url', function () {
-		expect(function () {
-			RestAPIUtil.fetch();
-		}).toThrow(/url/);
-	});
-
-	it('fetch with pagination', () => {
-		const pageStart = 1, pageSize = 25;
-		const response = RestAPIUtil.fetch(URL, {pagination: {pageStart, pageSize}});
-		expect(response.pagination).toExist();
-		expect(response.url).toInclude(`?pageStart=${pageStart}&pageSize=${pageSize}`);
-	});
-
-	it('fetch with sorting', () => {
-		const sortField = 'name', sortDir = 'ASCENDING';
-		const response = RestAPIUtil.fetch(URL, {sorting: {sortField, sortDir}});
-		expect(response.sorting).toExist();
-		expect(response.url).toInclude(`?sortField=${sortField}&sortDir=${sortDir}`);
-	});
-
-	it('fetch with filtering', () => {
-		const baseFilter = [
-			{
-				criterionValue: 'service',
-				fieldName: 'Brand',
-				operator: 'EQUALS',
-				type: 'STRING'
-			},
-			{
-				criterionValue: 'resource',
-				fieldName: 'Brand',
-				operator: 'EQUALS',
-				type: 'STRING'
-			}
-		];
-		const response = RestAPIUtil.fetch(URL, {filtering: {filterCriteria: baseFilter, logicalRelation: 'OR'}});
-		expect(response.filtering).toExist();
-		expect(response.url).toInclude('?filter=');
-	});
-
-	it('fetch with qParams', () => {
-		const response = RestAPIUtil.fetch(URL, {qParams: {pageStart: 1, pageSize: 10}});
-		expect(response.qParams).toExist();
-	});
-
-	it('fetch with url on options', () => {
-		const response = RestAPIUtil.fetch(URL, {url:'12345', qParams: {pageStart: 1, pageSize: 10}});
-		expect(response.qParams).toExist();
-	});
-
-	it('fetch with url path param', () => {
-		let someData = 'data';
-		const response = RestAPIUtil.fetch(`${URL}{someData}/`, {params: {someData}});
-		expect(response.url).toInclude(`/${someData}/`);
-	});
-
-	it('fetch with url undefined path param', () => {
-		const response = RestAPIUtil.fetch(`${URL}{someData}/`, {params: {someData: undefined}});
-		expect(response.url).toInclude('/undefined/');
-	});
-
-	it('normal basic create', () => {
-		const response = RestAPIUtil.create(URL);
-		expect(response).toExist();
-	});
-
-	it('create with FormData', () => {
-		let formData = new FormData();
-		formData.append('username', 'Chris');
-		const response = RestAPIUtil.create(URL, formData);
-		expect(response).toExist();
-	});
-
-	it('create with FormData with md5', () => {
-		let formData = new FormData();
-		formData.append('username', 'Chris');
-		const response = RestAPIUtil.create(URL, formData, {md5: true});
-		expect(response).toExist();
-	});
-
-	it('create with file', () => {
-		let progressCallback = () => {};
-		const response = RestAPIUtil.create(URL, {}, {progressCallback, fileSize: 123});
-		expect(response).toExist();
-	});
-
-	it('normal basic save', () => {
-		const response = RestAPIUtil.save(URL);
-		expect(response).toExist();
-	});
-
-	it('normal basic delete', () => {
-		const response = RestAPIUtil.destroy(URL);
-		expect(response).toExist();
-	});
-
-});
diff --git a/openecomp-ui/test/utils/uuid.test.js b/openecomp-ui/test/utils/uuid.test.js
index cd55baa..21ac271 100644
--- a/openecomp-ui/test/utils/uuid.test.js
+++ b/openecomp-ui/test/utils/uuid.test.js
@@ -1,50 +1,45 @@
-/*-
- * ============LICENSE_START=======================================================
- * SDC
- * ================================================================================
+/*!
  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
- * ================================================================================
+ *
  * 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
- * 
+ *
+ * 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.
- * ============LICENSE_END=========================================================
+ * 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.
  */
-
 import uuid from 'src/nfvo-utils/UUID.js';
-import expect from 'expect';
+
 
 describe('UUID', () => {
 
 	it('function does exist', () => {
-		expect(uuid).toExist();
+		expect(uuid).toBeTruthy();
 	});
 
 	it('generate UUID synchronously', () => {
 		let result = uuid(undefined, true);
-		expect(result).toExist();
+		expect(result).toBeTruthy();
 	});
 
 	it('generate UUID synchronously with number', () => {
 		let result = uuid(5, true);
-		expect(result).toExist();
+		expect(result).toBeTruthy();
 	});
 
 	it('generate UUID synchronously with number', () => {
 		let result = uuid(1, true);
-		expect(result).toExist();
+		expect(result).toBeTruthy();
 	});
 
 	it('generate UUID asynchronously', done => {
 		uuid().then(result => {
-			expect(result).toExist();
+			expect(result).toBeTruthy();
 			done();
 		});
 	});
diff --git a/openecomp-ui/test/utils/validator.test.js b/openecomp-ui/test/utils/validator.test.js
new file mode 100644
index 0000000..4062fa2
--- /dev/null
+++ b/openecomp-ui/test/utils/validator.test.js
@@ -0,0 +1,69 @@
+/*!
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ *
+ * 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.
+ */
+import Validator from 'src/nfvo-utils/Validator.js';
+
+
+describe('Validator ', () => {
+
+	it('class does exist', () => {
+		expect(Validator).toBeTruthy();
+	});
+
+	it('returns global validation functions', () => {
+		expect(Validator.globalValidationFunctions).toBeTruthy();
+	});
+
+	it('returns global validation messages', () => {
+		expect(Validator.globalValidationMessagingFunctions).toBeTruthy();
+	});
+
+	it('validates data per specific types list', () => {
+		const types = ['required', 'maxLength', 'minLength', 'pattern', 'numeric', 'maximum', 'minimum',
+			'alphanumeric', 'alphanumericWithSpaces', 'validateName', 'validateVendorName', 'freeEnglishText', 'email', 'ip', 'url', 'maximumExclusive', 'minimumExclusive'];
+
+		for (let i = 0; i < types.length; i++) {
+			expect(Validator.globalValidationFunctions[types[i]]).toBeTruthy();
+		}
+	});
+
+	it('gives validation messages per specific types list', () => {
+		const types = ['required', 'maxLength', 'minLength', 'pattern', 'numeric', 'maximum', 'minimum',
+			'alphanumeric', 'alphanumericWithSpaces', 'validateName', 'validateVendorName', 'freeEnglishText', 'email', 'ip', 'url',  'maximumExclusive', 'minimumExclusive'];
+
+		for (let i = 0; i < types.length; i++) {
+			expect(Validator.globalValidationFunctions[types[i]]).toBeTruthy();
+		}
+	});
+
+	it('returns a validation response of {isValid, errorText} when validating only by validator.js', () => {
+		const result = Validator.validateItem('a', null, 'required');
+		const keys = Object.keys(result);
+		expect(keys.length).toBe(2);
+		expect(keys).toContain('isValid');
+		expect(keys).toContain('errorText');
+	});
+
+	it('returns a validation response of {isValid, errorText} when validating with custom functions', () => {
+		const errorText = 'ran custom validation';
+		const result = Validator.validate('myfield','a', [{type: 'required', data: null}],  {}, { 'myfield' : () => { return { isValid: false, errorText};} });
+		const keys = Object.keys(result);
+		expect(keys.length).toBe(2);
+		expect(keys).toContain('isValid');
+		expect(keys).toContain('errorText');
+		expect(result.errorText).toBe(errorText);
+	});
+
+});