diff --git a/openecomp-ui/test-utils/MockRest.js b/openecomp-ui/test-utils/MockRest.js
index c49d53d..6cc676a 100644
--- a/openecomp-ui/test-utils/MockRest.js
+++ b/openecomp-ui/test-utils/MockRest.js
@@ -76,5 +76,19 @@
 
 	resetQueue() {
 		initQueue();
+	},
+
+	checkEmptyQueue() {
+		let isEmpty = true;
+		let message = 'Check following calls: ';
+		for (let operationType in queue) {
+			if (queue[operationType].length > 0) {
+				isEmpty = false;
+				message += operationType;
+			}
+		}
+		if (!isEmpty) {
+			throw new Error('Queue is not empty, ' + message);
+		}
 	}
 };
diff --git a/openecomp-ui/test-utils/ShowMore.js b/openecomp-ui/test-utils/ShowMore.js
new file mode 100644
index 0000000..a01ae6a
--- /dev/null
+++ b/openecomp-ui/test-utils/ShowMore.js
@@ -0,0 +1,10 @@
+import React from 'react';
+
+const ShowMore = ({children}) => {
+	if (children.length > 50) {
+		return (<div>Show Message With More Mock</div>);
+	} else {
+		return (<div>Show Message Mock</div>);
+	}
+};
+export default ShowMore;
\ No newline at end of file
diff --git a/openecomp-ui/test-utils/factories/common/CurrentScreenFactory.js b/openecomp-ui/test-utils/factories/common/CurrentScreenFactory.js
new file mode 100644
index 0000000..8301a27
--- /dev/null
+++ b/openecomp-ui/test-utils/factories/common/CurrentScreenFactory.js
@@ -0,0 +1,100 @@
+/*!
+ * 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 {Factory} from 'rosie';
+import randomstring from 'randomstring';
+import VersionFactory from './VersionFactory.js';
+
+export const InitializedItemPermissionFactory = new Factory()
+	.attrs({
+		'isCertified': false,
+		'inMerge': false,
+		'isCollaborator': true
+	});
+
+export const ItemPermissionFactory = new Factory()
+	.extend(InitializedItemPermissionFactory)
+	.attrs({
+		'isDirty': false,
+		'isOutOfSync': false,
+		'isUpToDate': true
+	});
+
+
+export const CurrentScreenPropsFactory = new Factory()
+	.option('versionId', () => randomstring.generate())
+	.option('versionBaseId', () => randomstring.generate())
+	.attrs({
+		softwareProductId: () => randomstring.generate(),
+		licenseModelId: () => randomstring.generate(),
+		isReadOnlyMode: false
+	})
+	.attr('version', [
+		'versionId', 'versionBaseId'
+	], (id, baseId) =>
+		VersionFactory.build({id, baseId})
+	);
+
+
+Factory.define('InitializedCurrentScreenFactory')
+	.option('isCertified', false)
+	.option('inMerge', false)
+	.option('isCollaborator', true)
+	.option('isReadOnlyMode', ['isCertified', 'inMerge', 'isCollaborator'], (isCertified, inMerge, isCollaborator) =>
+		isCertified || inMerge || !isCollaborator
+	)
+	.attr('itemPermission', ['isCertified', 'inMerge', 'isCollaborator'], (isCertified, inMerge, isCollaborator) =>
+		InitializedItemPermissionFactory.build({isCollaborator, isCertified, inMerge})
+	)
+	.attr('props', ['isReadOnlyMode'], (isReadOnlyMode) => {
+		return {isReadOnlyMode};
+	});
+export const InitializedCurrentScreenFactory = new Factory().extend('InitializedCurrentScreenFactory');
+
+
+Factory.define('CurrentScreenFactory')
+	.extend('InitializedCurrentScreenFactory')
+	.option('isDirty', false)
+	.option('isOutOfSync', false)
+	.option('isUpToDate', true)
+	.option('version', ['isCertified'], (isCertified) => VersionFactory.build({isCertified}))
+	.attr('itemPermission', [
+		'isCertified', 'inMerge', 'isCollaborator', 'isDirty', 'isOutOfSync', 'isUpToDate'
+	], (isCertified, inMerge, isCollaborator, isDirty, isOutOfSync, isUpToDate) =>
+		ItemPermissionFactory.build({isCollaborator, isCertified, inMerge, isDirty, isOutOfSync, isUpToDate})
+	)
+	.attr('props', ['isReadOnlyMode', 'version'], (isReadOnlyMode, version) => {
+		return {isReadOnlyMode, version};
+	});
+export default new Factory().extend('CurrentScreenFactory');
+
+
+export const CurrentScreenFactoryWithProps = new Factory()
+	.extend('CurrentScreenFactory')
+	.option('versionId')
+	.option('versionBaseId')
+	.option('version')
+	.attr('props', [
+		'isReadOnlyMode', 'versionId', 'versionBaseId', 'version'
+	], (isReadOnlyMode, id, baseId, version) => {
+		let attrs = {isReadOnlyMode};
+		let options = {};
+
+		if (version !== undefined) { attrs['version'] = version; }
+		if (id !== undefined) { options['versionId'] = id; }
+		if (baseId !== undefined) { options['versionBaseId'] = baseId; }
+
+		return CurrentScreenPropsFactory.build(attrs, options);
+	});
diff --git a/openecomp-ui/test-utils/factories/common/VersionFactory.js b/openecomp-ui/test-utils/factories/common/VersionFactory.js
new file mode 100644
index 0000000..66db6d6
--- /dev/null
+++ b/openecomp-ui/test-utils/factories/common/VersionFactory.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 {Factory} from 'rosie';
+import randomstring from 'randomstring';
+import IdMixin from '../mixins/IdMixin.js';
+
+export default new Factory()
+	.extend(IdMixin)
+	.option('isCertified', false)
+	.attrs({
+		baseId: () => randomstring.generate(),
+		description: () => randomstring.generate(),
+		name: () => randomstring.generate(),
+		creationTime: () => new Date().getTime(),
+		modificationTime: () => new Date().getTime(),
+		additionalInfo: () => { return {OptionalCreationMethods: ['major', 'minor']}; }
+	})
+	.attr('status', ['isCertified'], (isCertified) => {return isCertified ? 'Certified' : 'Draft'; });
diff --git a/openecomp-ui/test-utils/factories/licenseModel/LicenseModelFactories.js b/openecomp-ui/test-utils/factories/licenseModel/LicenseModelFactories.js
index 716eb15..7cda105 100644
--- a/openecomp-ui/test-utils/factories/licenseModel/LicenseModelFactories.js
+++ b/openecomp-ui/test-utils/factories/licenseModel/LicenseModelFactories.js
@@ -17,7 +17,6 @@
 import { selectedButton } from 'sdc-app/onboarding/licenseModel/overview/LicenseModelOverviewConstants.js';
 import IdMixin from 'test-utils/factories/mixins/IdMixin.js';
 import randomstring from 'randomstring';
-import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
 
 Factory.define('LicenseModelBaseFactory')
 	.attrs({
@@ -29,7 +28,7 @@
 export const LicenseModelCreationFactory = new Factory()
 	.attrs({
 		data: {
-			vendorName: () => randomstring.generate(),
+			name: () => randomstring.generate(),
 			description: () => randomstring.generate()
 		}
 	});
@@ -48,13 +47,8 @@
 export const FinalizedLicenseModelFactory = new Factory()
 	.extend(IdMixin)
 	.attrs({
-		vendorName: randomstring.generate(),
-		description: randomstring.generate(),
-		iconRef: 'iconRef_lBpEgzhuiY1',
-		version: {id: '1.0', label: '1.0'},
-		status: 'Final',
-		viewableVersion: [{id: '1.0', label: '1.0'}],
-		finalVersions: [{id: '1.0', label: '1.0'}]
+		name: randomstring.generate(),
+		description: randomstring.generate()
 	});
 
 export const LicenseModelOverviewFactory = new Factory()
@@ -62,8 +56,10 @@
 	licenseModelEditor: {
 		data: {
 			...Factory.attributes('LicenseModelBaseFactory'),
-			id: () => Math.floor(Math.random() * (1000 - 1) + 1),
-			...VersionControllerUtilsFactory.build()
+			id: () => Math.floor(Math.random() * 1000 + 1),
+			version: {
+				id: Math.floor(Math.random() * 1000 + 1)
+			}
 		}
 	},
 	entitlementPool: {},
diff --git a/openecomp-ui/test-utils/factories/revisions/RevisionsFactories.js b/openecomp-ui/test-utils/factories/revisions/RevisionsFactories.js
new file mode 100644
index 0000000..57c5e70
--- /dev/null
+++ b/openecomp-ui/test-utils/factories/revisions/RevisionsFactories.js
@@ -0,0 +1,30 @@
+/*!
+ * 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 {Factory} from 'rosie';
+import randomstring from 'randomstring';
+import IdMixin from 'test-utils/factories/mixins/IdMixin.js';
+
+
+export const RevisionsPagePropsFactory = new Factory()
+	.sequence('user')
+	.attr('message', 'message')
+	.attr('date', new Date().getTime())
+	.extend(IdMixin).after(function(revisions) {
+		let longMessage = revisions.user % 2;
+		revisions.user = 'Carlos Santana';
+		revisions.message = (longMessage) ? randomstring.generate(60) : randomstring.generate(10);
+	});
diff --git a/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductComponentsMonitoringFactories.js b/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductComponentsMonitoringFactories.js
index 550e1a6..8cb2221 100644
--- a/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductComponentsMonitoringFactories.js
+++ b/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductComponentsMonitoringFactories.js
@@ -26,13 +26,10 @@
 	.option('createPoll', false)
 	.option('createVes', false)
 
-	.attr(trap, ['createTrap'], (createTrap) => {return (createTrap) ? randomstring.generate() : undefined})
-	.attr(poll, ['createPoll'], (createPoll) => {return (createPoll) ? randomstring.generate() : undefined})
-	.attr(ves, ['createVes'], (createVes) => {return (createVes) ? randomstring.generate() : undefined});
+	.attr(trap, ['createTrap'], (createTrap) => createTrap ? randomstring.generate() : undefined)
+	.attr(poll, ['createPoll'], (createPoll) => createPoll ? randomstring.generate() : undefined)
+	.attr(ves, ['createVes'], (createVes) => createVes ? randomstring.generate() : undefined);
 
 
 export const VSPComponentsMonitoringViewFactory = new Factory()
 	.extend(VSPComponentsMonitoringRestFactory);
-//	.after(monitoring => {
-
-//	});
diff --git a/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductDependenciesFactories.js b/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductDependenciesFactories.js
index 6521c58..fab3f5f 100644
--- a/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductDependenciesFactories.js
+++ b/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductDependenciesFactories.js
@@ -23,10 +23,10 @@
     .attrs({ sourceId: () => randomstring.generate(),
         targetId: () => randomstring.generate(),
         relationType: relationTypes.DEPENDS_ON
-    });
+    }).extend(IdMixin);
 
 export const SoftwareProductDependenciesResponseFactory = new Factory()
-    .extend(SoftwareProductDependenciesBaseFactory);
+    .extend(SoftwareProductDependenciesBaseFactory).extend(IdMixin);
 
 export const SoftwareProductDependenciesStoreFactory = new Factory()
 .extend(SoftwareProductDependenciesBaseFactory)
diff --git a/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js b/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js
index 5c59361..a820b70 100644
--- a/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js
+++ b/openecomp-ui/test-utils/factories/softwareProduct/SoftwareProductEditorFactories.js
@@ -16,7 +16,6 @@
 import {Factory} from 'rosie';
 import IdMixin from 'test-utils/factories/mixins/IdMixin.js';
 import randomstring from 'randomstring';
-import VersionControllerUtilsFactory from 'test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js';
 
 Factory.define('VSPBaseFactory')
 	.attrs(
@@ -30,7 +29,7 @@
 		licensingVersion: {id: '1', label: '1'},
 		licensingData: {},
 		icon: 'icon',
-		version: {id: '1',  label: '1'}
+		version: {id: '123'}
 	}
 );
 
@@ -46,7 +45,6 @@
 
 export const VSPEditorFactory = new Factory()
 	.extend('VSPBaseFactory')
-	.extend(VersionControllerUtilsFactory)
 	.extend(IdMixin);
 
 export const VSPEditorPostFactory = new Factory()
@@ -54,7 +52,6 @@
 
 export const VSPEditorFactoryWithLicensingData = new Factory()
 	.extend('VSPBaseFactory')
-	.extend(VersionControllerUtilsFactory)
 	.extend('LicensingDataMixin')
 	.extend(IdMixin);
 
diff --git a/openecomp-ui/test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js b/openecomp-ui/test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js
index 8c96407..ba3946b 100644
--- a/openecomp-ui/test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js
+++ b/openecomp-ui/test-utils/factories/softwareProduct/VersionControllerUtilsFactory.js
@@ -14,17 +14,9 @@
  * permissions and limitations under the License.
  */
 import {Factory} from 'rosie';
-import {statusEnum} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
 
 export default new Factory()
 	.attrs({
 		version: { id: '1.2', label: '1.2'},
-		viewableVersions: [{id: '1.0', label: '1.0'}, {id: '1.1', label: '1.1'}, {id: '1.2', label: '1.2'}],
-		status: statusEnum.CHECK_OUT_STATUS,
-		lockingUser: 'current'
-	}).after(function(inst) {
-		if (inst.status !== statusEnum.CHECK_OUT_STATUS) {
-			delete inst.lockingUser;
-		}
+		viewableVersions: [{id: '1.0', label: '1.0'}, {id: '1.1', label: '1.1'}, {id: '1.2', label: '1.2'}]
 	});
-
diff --git a/openecomp-ui/test-utils/factories/users/UsersFactories.js b/openecomp-ui/test-utils/factories/users/UsersFactories.js
new file mode 100644
index 0000000..cbafbe0
--- /dev/null
+++ b/openecomp-ui/test-utils/factories/users/UsersFactories.js
@@ -0,0 +1,35 @@
+/*!
+ * 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 {Factory} from 'rosie';
+import randomstring from 'randomstring';
+
+Factory.define('UserFactory')
+	.attrs(
+	{
+		firstName: () => randomstring.generate(5),
+		lastName: () => randomstring.generate(6),
+		userId: () => randomstring.generate(11),
+		email: randomstring.generate(5) + '@' + randomstring.generate(6) + '.com',
+		role: 'OPS',
+		lastLoginTime: 0,
+		status: 'ACTIVE',
+		fullName: () => randomstring.generate(5) + ' ' + randomstring.generate(6),
+	}
+);
+
+
+export const UserFactory = new Factory()
+	.extend('UserFactory');
\ No newline at end of file
diff --git a/openecomp-ui/test-utils/factories/versionsPage/VersionsPageCreationFactories.js b/openecomp-ui/test-utils/factories/versionsPage/VersionsPageCreationFactories.js
new file mode 100644
index 0000000..c57ac87
--- /dev/null
+++ b/openecomp-ui/test-utils/factories/versionsPage/VersionsPageCreationFactories.js
@@ -0,0 +1,38 @@
+/*!
+ * 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 {Factory} from 'rosie';
+import randomstring from 'randomstring';
+
+export const VersionsPageCreationFactory = new Factory()
+	.attrs({
+		name: () => randomstring.generate(),
+		description: () => randomstring.generate(),
+		creationMethod: () => ['major', 'minor'][Math.round(Math.random())]
+	});
+
+export const VersionsPageCreationFieldInfoFactory = new Factory()
+	.attrs({
+		description: () => ({
+			isValid: true,
+			errorText: '',
+			validations: [{type: 'required', data: true}, {type: 'maxLength', data: 1000}]
+		}),
+		creationMethod: () => ({
+			isValid: true,
+			errorText: '',
+			validations: [{type: 'required', data: true}]
+		})
+	});
diff --git a/openecomp-ui/test-utils/factories/versionsPage/VersionsPageFactories.js b/openecomp-ui/test-utils/factories/versionsPage/VersionsPageFactories.js
new file mode 100644
index 0000000..49ceddc
--- /dev/null
+++ b/openecomp-ui/test-utils/factories/versionsPage/VersionsPageFactories.js
@@ -0,0 +1,27 @@
+/*!
+ * 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 {Factory} from 'rosie';
+import randomstring from 'randomstring';
+import VersionFactory from 'test-utils/factories/common/VersionFactory.js';
+
+export const VersionsPageAdditionalPropsFactory = new Factory()
+	.attrs({
+		itemId: () => randomstring.generate(),
+		itemType: () => 'vendor-license-models',
+		additionalProps: () => {},
+		baseVersion: () => VersionFactory.build()
+	});
diff --git a/openecomp-ui/test-utils/failedTestReport.js b/openecomp-ui/test-utils/failedTestReport.js
index 9520cc9..ed88ccd 100644
--- a/openecomp-ui/test-utils/failedTestReport.js
+++ b/openecomp-ui/test-utils/failedTestReport.js
@@ -22,7 +22,7 @@
 		console.log('Failure Summary: \n');
 	}
 	report.testResults.forEach((suite) => {
-		if(suite.status == 'failed') {
+		if(suite.status === 'failed') {
 			console.log('Suite: ' + suite.name);
 			suite.assertionResults.forEach((test) => {
 				if (test.status === 'failed') {
