Add some unit tests 94/105494/5
authorSatoshi Fujii <fujii-satoshi@jp.fujitsu.com>
Wed, 8 Apr 2020 09:11:41 +0000 (18:11 +0900)
committerOfir Sonsino <ofir.sonsino@intl.att.com>
Mon, 15 Jun 2020 12:27:54 +0000 (12:27 +0000)
This change added some unit tests for ComponentInstanceBusinessLogic
to increase test coverage and removed unused variables for better
readability.
Also the test class was rewritten to use JUnit 5.

Change-Id: I519976d00d8eccc194f8f1168d45f95392808652
Signed-off-by: Satoshi Fujii <fujii-satoshi@jp.fujitsu.com>
Issue-ID: SDC-2885

catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java

index 9fc6b54..8a005ff 100644 (file)
 package org.openecomp.sdc.be.components.impl;
 
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertSame;
-import static org.junit.Assert.fail;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertSame;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+import static org.junit.jupiter.api.DynamicTest.dynamicTest;
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anySet;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import fj.data.Either;
@@ -42,16 +45,20 @@ import java.util.Optional;
 import java.util.Set;
 import mockit.Deencapsulation;
 import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.commons.lang3.tuple.Pair;
 import org.assertj.core.util.Lists;
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.DynamicTest;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.TestFactory;
+import org.junit.jupiter.api.extension.ExtendWith;
 import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.MockitoAnnotations;
-import org.mockito.junit.MockitoJUnitRunner;
+import org.mockito.junit.jupiter.MockitoExtension;
 import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
+import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException;
 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
 import org.openecomp.sdc.be.components.validation.UserValidations;
 import org.openecomp.sdc.be.config.ConfigurationManager;
@@ -59,9 +66,11 @@ import org.openecomp.sdc.be.dao.api.ActionStatus;
 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
+import org.openecomp.sdc.be.datamodel.utils.ContainerInstanceTypesData;
 import org.openecomp.sdc.be.datatypes.elements.CapabilityDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.ForwardingPathDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.ForwardingPathElementDataDefinition;
+import org.openecomp.sdc.be.datatypes.elements.GetInputValueDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.GetPolicyValueDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.ListDataDefinition;
 import org.openecomp.sdc.be.datatypes.elements.RequirementDataDefinition;
@@ -69,8 +78,9 @@ import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition;
 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
 import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields;
 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum;
+import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
 import org.openecomp.sdc.be.impl.ComponentsUtils;
-import org.openecomp.sdc.be.impl.ServletUtils;
 import org.openecomp.sdc.be.model.ArtifactDefinition;
 import org.openecomp.sdc.be.model.CapabilityDefinition;
 import org.openecomp.sdc.be.model.CapabilityRequirementRelationship;
@@ -97,28 +107,29 @@ import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade
 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
 import org.openecomp.sdc.be.model.operations.impl.GraphLockOperation;
 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
-import org.openecomp.sdc.be.user.UserBusinessLogic;
 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
 import org.openecomp.sdc.common.api.ConfigurationSource;
 import org.openecomp.sdc.common.impl.ExternalConfiguration;
 import org.openecomp.sdc.common.impl.FSConfigurationSource;
+import org.openecomp.sdc.common.util.ValidationUtils;
 import org.openecomp.sdc.exception.ResponseFormat;
 
 /**
  * The test suite designed for test functionality of ComponentInstanceBusinessLogic class
  */
 
-@RunWith(MockitoJUnitRunner.class)
-public class ComponentInstanceBusinessLogicTest {
+@ExtendWith(MockitoExtension.class)
+class ComponentInstanceBusinessLogicTest {
 
     private final static String USER_ID = "jh0003";
     private final static String COMPONENT_ID = "componentId";
     private final static String ORIGIN_COMPONENT_ID = "originComponentId";
-    private final static String COMPONENT_INST_ID = "componentInstId";
+    private final static String ORIGIN_COMPONENT_VERSION = "1.0";
     private final static String TO_INSTANCE_ID = "toInstanceId";
     private final static String TO_INSTANCE_NAME = "toInstanceName";
     private final static String COMPONENT_INSTANCE_ID = "componentInstanceId";
+    private final static String COMPONENT_INSTANCE_NAME = "componentInstanceName";
     private final static String FROM_INSTANCE_ID = "fromInstanceId";
     private final static String RELATION_ID = "relationId";
     private final static String CAPABILITY_OWNER_ID = "capabilityOwnerId";
@@ -135,85 +146,83 @@ public class ComponentInstanceBusinessLogicTest {
     private final static String ARTIFACT_5 = "cloudtech_openstack_configtemplate.zip";
     private final static String PROP_NAME = "propName";
     private final static String NON_EXIST_NAME = "nonExistName";
+    private final static String INPUT_ID = "inputId";
+    private final static String ICON_NAME = "icon";
 
-    static ConfigurationSource configurationSource = new FSConfigurationSource(
+    private static ConfigurationSource configurationSource = new FSConfigurationSource(
         ExternalConfiguration.getChangeListener(),
         "src/test/resources/config/catalog-be");
-    static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
+    private static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
 
     @InjectMocks
     private static ComponentInstanceBusinessLogic componentInstanceBusinessLogic;
     @Mock
     private ComponentInstancePropInput componentInstancePropInput;
     @Mock
-    ArtifactsBusinessLogic artifactsBusinessLogic;
+    private ArtifactsBusinessLogic artifactsBusinessLogic;
     @Mock
     private ComponentsUtils componentsUtils;
     @Mock
-    private ServletUtils servletUtils;
-    @Mock
-    private ResponseFormat responseFormat;
-    @Mock
     private ToscaOperationFacade toscaOperationFacade;
     @Mock
-    private UserBusinessLogic userAdmin;
-    @Mock
     private ForwardingPathOperation forwardingPathOperation;
     @Mock
     private User user;
     @Mock
     private UserValidations userValidations;
     @Mock
-    GraphLockOperation graphLockOperation;
+    private GraphLockOperation graphLockOperation;
     @Mock
     private JanusGraphDao janusGraphDao;
     @Mock
-    ApplicationDataTypeCache dataTypeCache;
+    private ApplicationDataTypeCache dataTypeCache;
+    @Mock
+    private PropertyOperation propertyOperation;
     @Mock
-    PropertyOperation propertyOperation;
+    private ContainerInstanceTypesData containerInstanceTypeData;
     @Mock
-    ApplicationDataTypeCache applicationDataTypeCache;
+    private CompositionBusinessLogic compositionBusinessLogic;
 
     private Component service;
     private Component resource;
     private ComponentInstance toInstance;
     private ComponentInstance fromInstance;
-    private CapabilityDataDefinition capability;
-    private RequirementDataDefinition requirement;
     private RequirementCapabilityRelDef relation;
+    private List<ComponentInstanceProperty> ciPropertyList;
+    private List<ComponentInstanceInput> ciInputList;
 
-    @Before
-    public void init() {
-        MockitoAnnotations.initMocks(componentInstanceBusinessLogic);
+    @BeforeEach
+    void init() {
+        MockitoAnnotations.initMocks(this);
         stubMethods();
         createComponents();
     }
 
     @Test
-    public void testGetRelationByIdSuccess() {
+    void testGetRelationByIdSuccess() {
         getServiceRelationByIdSuccess(service);
         getServiceRelationByIdSuccess(resource);
     }
 
     @Test
-    public void testGetRelationByIdUserValidationFailure() {
+    void testGetRelationByIdUserValidationFailure() {
         getServiceRelationByIdUserValidationFailure(service);
         getServiceRelationByIdUserValidationFailure(resource);
     }
 
     @Test
-    public void testGetRelationByIdComponentNotFoundFailure() {
+    void testGetRelationByIdComponentNotFoundFailure() {
         getRelationByIdComponentNotFoundFailure(service);
         getRelationByIdComponentNotFoundFailure(resource);
     }
 
     @Test
-    public void testForwardingPathOnVersionChange() {
+    void testForwardingPathOnVersionChange() {
         getforwardingPathOnVersionChange();
     }
 
     @Test
-    public void testIsCloudSpecificArtifact() {
+    void testIsCloudSpecificArtifact() {
         assertThat(componentInstanceBusinessLogic.isCloudSpecificArtifact(ARTIFACT_1)).isTrue();
         assertThat(componentInstanceBusinessLogic.isCloudSpecificArtifact(ARTIFACT_2)).isTrue();
         assertThat(componentInstanceBusinessLogic.isCloudSpecificArtifact(ARTIFACT_3)).isTrue();
@@ -264,7 +273,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testCreateOrUpdatePropertiesValues2() {
+    void testCreateOrUpdatePropertiesValues2() {
         String containerComponentID = "containerId";
         String resourceInstanceId = "resourceId";
         String componentInstanceID = "componentInstance";
@@ -296,12 +305,7 @@ public class ComponentInstanceBusinessLogicTest {
         ci.setUniqueId("resourceId");
         component.setComponentInstances(Arrays.asList(ci, createComponentInstance("ci2"),
             createComponentInstance(componentInstanceID)));
-        HashMap<String, DataTypeDefinition> dataTypeDefinitionHashMap = new HashMap<>();
-        DataTypeDefinition dataTypeDefinition = new DataTypeDefinition();
-        dataTypeDefinition.setName("string");
-        dataTypeDefinitionHashMap.put("string", dataTypeDefinition);
 
-        //when(userValidations.validateUserExists(user.getUserId(), false)).thenReturn(user);
         when(toscaOperationFacade.getToscaElement(containerComponentID, JsonParseFlagEnum.ParseAll))
             .thenReturn(Either.left(component));
         when(graphLockOperation.lockComponent(containerComponentID, NodeTypeEnum.ResourceInstance))
@@ -327,7 +331,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testCreateOrUpdatePropertiesValuesPropertyNotExists() {
+    void testCreateOrUpdatePropertiesValuesPropertyNotExists() {
         String containerComponentID = "containerId";
         String resourceInstanceId = "resourceId";
         String componentInstanceID = "componentInstance";
@@ -340,10 +344,6 @@ public class ComponentInstanceBusinessLogicTest {
 
         List<ComponentInstanceProperty> origProperties = new ArrayList<>();
 
-        Map<String, DataTypeDefinition> types = new HashMap<>();
-        DataTypeDefinition dataTypeDef = new DataTypeDefinition();
-        types.put("string", dataTypeDef);
-
         Component component = new Service();
         component.setLastUpdaterUserId("userId");
         component.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
@@ -354,18 +354,11 @@ public class ComponentInstanceBusinessLogicTest {
         ci.setUniqueId("resourceId");
         component.setComponentInstances(Arrays.asList(ci, createComponentInstance("ci2"),
             createComponentInstance(componentInstanceID)));
-        HashMap<String, DataTypeDefinition> dataTypeDefinitionHashMap = new HashMap<>();
-        DataTypeDefinition dataTypeDefinition = new DataTypeDefinition();
-        dataTypeDefinition.setName("string");
-        dataTypeDefinitionHashMap.put("string", dataTypeDefinition);
 
-        //when(userValidations.validateUserExists(user.getUserId(), false)).thenReturn(user);
         when(toscaOperationFacade.getToscaElement(containerComponentID, JsonParseFlagEnum.ParseAll))
             .thenReturn(Either.left(component));
         when(graphLockOperation.lockComponent(containerComponentID, NodeTypeEnum.ResourceInstance))
             .thenReturn(StorageOperationStatus.OK);
-        //when(dataTypeCache.getAll()).thenReturn(Either.left(types));
-        //when (janusGraphDao.commit()).thenReturn(JanusGraphOperationStatus.OK);
         when(graphLockOperation.unlockComponent(containerComponentID, NodeTypeEnum.ResourceInstance))
             .thenReturn(StorageOperationStatus.OK);
 
@@ -379,7 +372,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testCreateOrUpdatePropertiesValuesValidationFailure() {
+    void testCreateOrUpdatePropertiesValuesValidationFailure() {
         String containerComponentID = "containerId";
         String resourceInstanceId = "resourceId";
         String componentInstanceID = "componentInstance";
@@ -411,12 +404,7 @@ public class ComponentInstanceBusinessLogicTest {
         ci.setUniqueId("resourceId");
         component.setComponentInstances(Arrays.asList(ci, createComponentInstance("ci2"),
             createComponentInstance(componentInstanceID)));
-        HashMap<String, DataTypeDefinition> dataTypeDefinitionHashMap = new HashMap<>();
-        DataTypeDefinition dataTypeDefinition = new DataTypeDefinition();
-        dataTypeDefinition.setName("string");
-        dataTypeDefinitionHashMap.put("string", dataTypeDefinition);
 
-        //when(userValidations.validateUserExists(user.getUserId(), false)).thenReturn(user);
         when(toscaOperationFacade.getToscaElement(containerComponentID, JsonParseFlagEnum.ParseAll))
             .thenReturn(Either.left(component));
         when(graphLockOperation.lockComponent(containerComponentID, NodeTypeEnum.ResourceInstance))
@@ -427,18 +415,14 @@ public class ComponentInstanceBusinessLogicTest {
         when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.BAD_REQUEST))
             .thenReturn(ActionStatus.INVALID_CONTENT);
 
-        try {
-            componentInstanceBusinessLogic.createOrUpdatePropertiesValues(
-                ComponentTypeEnum.RESOURCE_INSTANCE, containerComponentID, resourceInstanceId, properties, "userId");
-        } catch (ComponentException e) {
-            assertThat(e.getActionStatus()).isEqualTo(ActionStatus.INVALID_CONTENT);
-            return;
-        }
-        fail();
+        ComponentException e = assertThrows(ComponentException.class,
+            () -> componentInstanceBusinessLogic.createOrUpdatePropertiesValues(
+                ComponentTypeEnum.RESOURCE_INSTANCE, containerComponentID, resourceInstanceId, properties, "userId"));
+        assertThat(e.getActionStatus()).isEqualTo(ActionStatus.INVALID_CONTENT);
     }
 
     @Test
-    public void testCreateOrUpdatePropertiesValuesMissingFieldFailure() {
+    void testCreateOrUpdatePropertiesValuesMissingFieldFailure() {
         String containerComponentID = "containerId";
         String resourceInstanceId = "resourceId";
         String componentInstanceID = "componentInstance";
@@ -466,12 +450,6 @@ public class ComponentInstanceBusinessLogicTest {
         component.setComponentInstances(Arrays.asList(ci, createComponentInstance("ci2"),
             createComponentInstance(componentInstanceID)));
 
-        HashMap<String, DataTypeDefinition> dataTypeDefinitionHashMap = new HashMap<>();
-        DataTypeDefinition dataTypeDefinition = new DataTypeDefinition();
-        dataTypeDefinition.setName("string");
-        dataTypeDefinitionHashMap.put("string", dataTypeDefinition);
-
-        //when(userValidations.validateUserExists(user.getUserId(), false)).thenReturn(user);
         when(toscaOperationFacade.getToscaElement(containerComponentID, JsonParseFlagEnum.ParseAll))
             .thenReturn(Either.left(component));
         when(graphLockOperation.lockComponent(containerComponentID, NodeTypeEnum.ResourceInstance))
@@ -486,7 +464,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testDeleteForwardingPathsWhenComponentinstanceDeleted() {
+    void testDeleteForwardingPathsWhenComponentinstanceDeleted() {
 
         ComponentTypeEnum containerComponentType = ComponentTypeEnum.findByParamName("services");
         String containerComponentID = "Service-comp";
@@ -513,7 +491,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testAddComponentInstanceDeploymentArtifacts() {
+    void testAddComponentInstanceDeploymentArtifacts() {
 
         Component containerComponent = new Service();
         ComponentInstance componentInstance = new ComponentInstance();
@@ -557,7 +535,8 @@ public class ComponentInstanceBusinessLogicTest {
         when(toscaOperationFacade.addDeploymentArtifactsToInstance(containerComponent.getUniqueId(), componentInstance,
             finalDeploymentArtifacts)).thenReturn(StorageOperationStatus.OK);
         when(toscaOperationFacade
-            .addGroupInstancesToComponentInstance(containerComponent, componentInstance, new ArrayList<>(), new HashMap<>()))
+            .addGroupInstancesToComponentInstance(containerComponent, componentInstance, new ArrayList<>(),
+                new HashMap<>()))
             .thenReturn(StorageOperationStatus.OK);
         when(toscaOperationFacade
             .addInformationalArtifactsToInstance(containerComponent.getUniqueId(), componentInstance, null))
@@ -627,7 +606,6 @@ public class ComponentInstanceBusinessLogicTest {
         return forwardingPaths;
     }
 
-    @SuppressWarnings("unchecked")
     private void getServiceRelationByIdSuccess(Component component) {
         Either<Component, StorageOperationStatus> getComponentRes = Either.left(component);
         when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
@@ -651,7 +629,6 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     private void getRelationByIdComponentNotFoundFailure(Component component) {
-        Either<User, ActionStatus> eitherCreator = Either.left(user);
         Either<Component, StorageOperationStatus> getComponentRes = Either.right(StorageOperationStatus.NOT_FOUND);
         when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
             .thenReturn(getComponentRes);
@@ -664,8 +641,8 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     private void stubMethods() {
-        when(userValidations.validateUserExists(eq(USER_ID))).thenReturn(user);
-        when(componentsUtils
+        Mockito.lenient().when(userValidations.validateUserExists(eq(USER_ID))).thenReturn(user);
+        Mockito.lenient().when(componentsUtils
             .convertFromStorageResponse(eq(StorageOperationStatus.GENERAL_ERROR), any(ComponentTypeEnum.class)))
             .thenReturn(ActionStatus.GENERAL_ERROR);
     }
@@ -673,6 +650,8 @@ public class ComponentInstanceBusinessLogicTest {
     private void createComponents() {
         createRelation();
         createInstances();
+        createProperties();
+        createInputs();
         createService();
         createResource();
     }
@@ -697,6 +676,15 @@ public class ComponentInstanceBusinessLogicTest {
         service.setRequirements(fromInstance.getRequirements());
         service.setComponentType(ComponentTypeEnum.SERVICE);
         service.setState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
+        service.setLastUpdaterUserId(USER_ID);
+
+        Map<String, List<ComponentInstanceProperty>> ciPropertyMap = new HashMap<>();
+        ciPropertyMap.put(TO_INSTANCE_ID, ciPropertyList);
+        service.setComponentInstancesProperties(ciPropertyMap);
+
+        Map<String, List<ComponentInstanceInput>> ciInputMap = new HashMap<>();
+        ciInputMap.put(TO_INSTANCE_ID, ciInputList);
+        service.setComponentInstancesInputs(ciInputMap);
     }
 
     private void createInstances() {
@@ -707,7 +695,7 @@ public class ComponentInstanceBusinessLogicTest {
         fromInstance = new ComponentInstance();
         fromInstance.setUniqueId(FROM_INSTANCE_ID);
 
-        capability = new CapabilityDataDefinition();
+        CapabilityDataDefinition capability = new CapabilityDataDefinition();
         capability.setOwnerId(CAPABILITY_OWNER_ID);
         capability.setUniqueId(CAPABILITY_UID);
         capability.setName(CAPABILITY_NAME);
@@ -719,7 +707,7 @@ public class ComponentInstanceBusinessLogicTest {
         capabilityDefinition.setProperties(properties);
         capabilities.put(capability.getName(), Lists.newArrayList(capabilityDefinition));
 
-        requirement = new RequirementDataDefinition();
+        RequirementDataDefinition requirement = new RequirementDataDefinition();
         requirement.setOwnerId(REQUIREMENT_OWNER_ID);
         requirement.setUniqueId(REQUIREMENT_UID);
         requirement.setName(REQUIREMENT_NAME);
@@ -730,6 +718,7 @@ public class ComponentInstanceBusinessLogicTest {
 
         toInstance.setCapabilities(capabilities);
         fromInstance.setRequirements(requirements);
+
     }
 
     private void createRelation() {
@@ -755,12 +744,43 @@ public class ComponentInstanceBusinessLogicTest {
         relationInfo.setRelationships(relationshipImpl);
     }
 
+    private void createProperties() {
+        // Create GetInputValueData
+        GetInputValueDataDefinition inputValueDef = new GetInputValueDataDefinition();
+        inputValueDef.setInputId(INPUT_ID);
+        List<GetInputValueDataDefinition> inputValueDefList = new ArrayList<>();
+        inputValueDefList.add(inputValueDef);
+        // Create ComponentInstanceProperty
+        ComponentInstanceProperty ciProperty = new ComponentInstanceProperty();
+        ciProperty.setGetInputValues(inputValueDefList);
+        ciProperty.setName(PROP_NAME);
+        // Create ComponentInstanceProperty list
+        ciPropertyList = new ArrayList<>();
+        ciPropertyList.add(ciProperty);
+    }
+
+    private void createInputs() {
+        // Create GetInputValueData
+        GetInputValueDataDefinition inputValueDef = new GetInputValueDataDefinition();
+        inputValueDef.setInputId(INPUT_ID);
+        List<GetInputValueDataDefinition> inputValueDefList = new ArrayList<>();
+        inputValueDefList.add(inputValueDef);
+        // Create ComponentInstanceInput
+        ComponentInstanceInput ciInput = new ComponentInstanceInput();
+        ciInput.setUniqueId(INPUT_ID);
+        ciInput.setName(PROP_NAME);
+        ciInput.setGetInputValues(inputValueDefList);
+        // Create ComponentInstanceInput list
+        ciInputList = new ArrayList<>();
+        ciInputList.add(ciInput);
+    }
+
     private ComponentInstanceBusinessLogic createTestSubject() {
         return componentInstanceBusinessLogic;
     }
 
     @Test
-    public void testChangeServiceProxyVersion() {
+    void testChangeServiceProxyVersion() {
         ComponentInstanceBusinessLogic componentInstanceBusinessLogic;
 
         Either<ComponentInstance, ResponseFormat> result;
@@ -772,7 +792,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testCreateServiceProxy() {
+    void testCreateServiceProxy() {
         ComponentInstanceBusinessLogic testSubject;
         Either<ComponentInstance, ResponseFormat> result;
 
@@ -783,7 +803,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testDeleteServiceProxy() {
+    void testDeleteServiceProxy() {
         ComponentInstanceBusinessLogic testSubject;
 
         Either<ComponentInstance, ResponseFormat> result;
@@ -795,33 +815,54 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testGetComponentInstanceInputsByInputId() {
-        ComponentInstanceBusinessLogic testSubject;
+    void testGetComponentInstanceInputsByInputIdEmpty() {
         Component component = new Service();
         String inputId = "";
         List<ComponentInstanceInput> result;
 
-        // default test
-        testSubject = createTestSubject();
-        result = testSubject.getComponentInstanceInputsByInputId(component, inputId);
+        result = componentInstanceBusinessLogic.getComponentInstanceInputsByInputId(component, inputId);
         assertNotNull(result);
+        assertThat(result.isEmpty()).isTrue();
     }
 
     @Test
-    public void testGetComponentInstancePropertiesByInputId() {
-        ComponentInstanceBusinessLogic testSubject;
+    void testGetComponentInstanceInputsByInputIdPresent() {
+        List<ComponentInstanceInput> result;
+
+        result = componentInstanceBusinessLogic.getComponentInstanceInputsByInputId(service, INPUT_ID);
+        assertNotNull(result);
+        assertThat(result.isEmpty()).isFalse();
+        assertThat(result.size()).isOne();
+        ComponentInstanceInput resultInput = result.get(0);
+        assertThat(resultInput.getComponentInstanceId()).isEqualTo(TO_INSTANCE_ID);
+        assertThat(resultInput.getComponentInstanceName()).isEqualTo(TO_INSTANCE_NAME);
+    }
+
+    @Test
+    void testGetComponentInstancePropertiesByInputIdEmpty() {
         Component component = new Service();
         String inputId = "";
         List<ComponentInstanceProperty> result;
 
-        // default test
-        testSubject = createTestSubject();
-        result = testSubject.getComponentInstancePropertiesByInputId(component, inputId);
+        result = componentInstanceBusinessLogic.getComponentInstancePropertiesByInputId(component, inputId);
+        assertNotNull(result);
+        assertThat(result.isEmpty()).isTrue();
+    }
+
+    @Test
+    void testGetComponentInstancePropertiesByInputIdPresent() {
+        List<ComponentInstanceProperty> result;
+
+        result = componentInstanceBusinessLogic.getComponentInstancePropertiesByInputId(service, INPUT_ID);
         assertNotNull(result);
+        assertThat(result.size()).isOne();
+        ComponentInstanceProperty resultProperty = result.get(0);
+        assertThat(resultProperty.getComponentInstanceId()).isEqualTo(TO_INSTANCE_ID);
+        assertThat(resultProperty.getComponentInstanceName()).isEqualTo(TO_INSTANCE_NAME);
     }
 
     @Test
-    public void testGetRelationById() {
+    void testGetRelationById() {
         ComponentInstanceBusinessLogic testSubject;
         String componentId = "";
         String relationId = "";
@@ -836,7 +877,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testValidateParent() {
+    void testValidateParent() {
         ComponentInstanceBusinessLogic testSubject;
         createResource();
         String nodeTemplateId = "";
@@ -849,7 +890,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testGetComponentType() {
+    void testGetComponentType() {
         ComponentInstanceBusinessLogic testSubject;
         ComponentTypeEnum result;
 
@@ -860,7 +901,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testGetNewGroupName() {
+    void testGetNewGroupName() {
         ComponentInstanceBusinessLogic testSubject;
         String oldPrefix = "";
         String newNormailzedPrefix = "";
@@ -875,10 +916,9 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testUpdateComponentInstanceMetadata_3() {
+    void testUpdateComponentInstanceMetadata_3() {
         ComponentInstanceBusinessLogic testSubject;
         createInstances();
-        ComponentInstance newComponentInstance = null;
         ComponentInstance result;
 
         // default test
@@ -889,7 +929,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testFindRelation() throws Exception {
+    void testFindRelation() {
         ComponentInstanceBusinessLogic testSubject;
         String relationId = "";
         List<RequirementCapabilityRelDef> requirementCapabilityRelations = new ArrayList<>();
@@ -902,7 +942,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testCreateOrUpdatePropertiesValues() throws Exception {
+    void testCreateOrUpdatePropertiesValues() {
         ComponentInstanceBusinessLogic testSubject;
         ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE;
         createResource();
@@ -935,7 +975,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testUpdateCapabilityPropertyOnContainerComponent() throws Exception {
+    void testUpdateCapabilityPropertyOnContainerComponent() {
         ComponentInstanceBusinessLogic testSubject;
         ComponentInstanceProperty property = new ComponentInstanceProperty();
         String newValue = "";
@@ -952,7 +992,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testCreateOrUpdateInstanceInputValues() throws Exception {
+    void testCreateOrUpdateInstanceInputValues() {
         ComponentInstanceBusinessLogic testSubject;
         ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE;
         createResource();
@@ -984,7 +1024,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testCreateOrUpdateGroupInstancePropertyValue() throws Exception {
+    void testCreateOrUpdateGroupInstancePropertyValue() {
         ComponentInstanceBusinessLogic testSubject;
         ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE;
         createResource();
@@ -1017,7 +1057,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testDeletePropertyValue() throws Exception {
+    void testDeletePropertyValue() {
         ComponentInstanceBusinessLogic testSubject;
         ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE;
         createService();
@@ -1046,7 +1086,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testGetComponentParametersViewForForwardingPath() throws Exception {
+    void testGetComponentParametersViewForForwardingPath() {
         ComponentInstanceBusinessLogic testSubject;
         ComponentParametersView result;
 
@@ -1057,7 +1097,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testGetResourceInstanceById() throws Exception {
+    void testGetResourceInstanceById() {
         ComponentInstanceBusinessLogic testSubject;
         createResource();
         String instanceId = "";
@@ -1070,7 +1110,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testUpdateInstanceCapabilityProperties_1() throws Exception {
+    void testUpdateInstanceCapabilityProperties_1() {
         ComponentInstanceBusinessLogic testSubject;
         ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE;
         createResource();
@@ -1096,7 +1136,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testCopyComponentInstanceWrongUserId() {
+    void testCopyComponentInstanceWrongUserId() {
 
         Either<Map<String, ComponentInstance>, ResponseFormat> result;
         ComponentInstance inputComponentInstance = createComponetInstanceFromComponent(resource);
@@ -1125,7 +1165,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testCopyComponentInstanceComponentWrongState() {
+    void testCopyComponentInstanceComponentWrongState() {
         Either<Map<String, ComponentInstance>, ResponseFormat> result;
         ComponentInstance inputComponentInstance = createComponetInstanceFromComponent(resource);
         String containerComponentId = service.getUniqueId();
@@ -1142,7 +1182,6 @@ public class ComponentInstanceBusinessLogicTest {
             .thenReturn(StorageOperationStatus.OK);
         when(graphLockOperation.lockComponent(Mockito.anyString(), eq(NodeTypeEnum.Service)))
             .thenReturn(StorageOperationStatus.OK);
-        Either<Component, StorageOperationStatus> getComponentRes = Either.left(resource);
         result = componentInstanceBusinessLogic
             .copyComponentInstance(inputComponentInstance, containerComponentId, componentInstanceId, USER_ID);
         assertNotNull(result);
@@ -1151,7 +1190,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testCopyComponentInstance() {
+    void testCopyComponentInstance() {
         Either<Map<String, ComponentInstance>, ResponseFormat> result;
         ComponentInstance inputComponentInstance = createComponetInstanceFromComponent(resource);
         String containerComponentId = service.getUniqueId();
@@ -1169,12 +1208,6 @@ public class ComponentInstanceBusinessLogicTest {
             .thenReturn(StorageOperationStatus.OK);
         when(graphLockOperation.lockComponent(Mockito.anyString(), eq(NodeTypeEnum.Service)))
             .thenReturn(StorageOperationStatus.OK);
-        Either<Component, StorageOperationStatus> getComponentRes = Either.left(resource);
-        ImmutablePair<Component, String> pair = new ImmutablePair<>(resource, TO_INSTANCE_ID);
-        Either<ImmutablePair<Component, String>, StorageOperationStatus> result2 = Either.left(pair);
-        Either<Map<String, ArtifactDefinition>, StorageOperationStatus> getResourceDeploymentArtifacts = Either
-            .left(new HashMap<String, ArtifactDefinition>());
-        StorageOperationStatus artStatus = StorageOperationStatus.OK;
 
         result = componentInstanceBusinessLogic
             .copyComponentInstance(inputComponentInstance, containerComponentId, componentInstanceId,
@@ -1188,7 +1221,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testCreateOrUpdateAttributeValueForCopyPaste() {
+    void testCreateOrUpdateAttributeValueForCopyPaste() {
         ComponentInstance serviceComponentInstance = createComponetInstanceFromComponent(service);
         ComponentInstanceProperty attribute = new ComponentInstanceProperty();
         attribute.setType("string");
@@ -1200,9 +1233,8 @@ public class ComponentInstanceBusinessLogicTest {
         service.setLastUpdaterUserId(USER_ID);
         service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
 
-        Map<String, List<ComponentInstanceProperty>> instAttrsMap =
-            new HashMap<String, List<ComponentInstanceProperty>>();
-        List<ComponentInstanceProperty> instAttrsList = new ArrayList<ComponentInstanceProperty>();
+        Map<String, List<ComponentInstanceProperty>> instAttrsMap = new HashMap<>();
+        List<ComponentInstanceProperty> instAttrsList = new ArrayList<>();
         ComponentInstanceProperty prop = new ComponentInstanceProperty();
         prop.setUniqueId(attribute.getUniqueId());
         instAttrsList.add(prop);
@@ -1237,7 +1269,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testUpdateComponentInstanceProperty() {
+    void testUpdateComponentInstanceProperty() {
 
         String containerComponentId = service.getUniqueId();
         String componentInstanceId = "dummy_id";
@@ -1259,11 +1291,11 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testGetInputListDefaultValue() {
+    void testGetInputListDefaultValue() {
         Component component = service;
         String inputId = "dummy_id";
         String defaultValue = "dummy_default_value";
-        List<InputDefinition> newInputs = new ArrayList<InputDefinition>();
+        List<InputDefinition> newInputs = new ArrayList<>();
         InputDefinition in = new InputDefinition();
         in.setUniqueId(inputId);
         in.setDefaultValue(defaultValue);
@@ -1280,14 +1312,13 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testBatchDeleteComponentInstanceFailureWrongType() {
+    void testBatchDeleteComponentInstanceFailureWrongType() {
         Map<String, List<String>> result;
         List<String> componentInstanceIdList = new ArrayList<>();
         String containerComponentParam = "WRONG_TYPE";
         String containerComponentId = "containerComponentId";
         String componentInstanceId = "componentInstanceId";
         componentInstanceIdList.add(componentInstanceId);
-        String userId = USER_ID;
         Map<String, List<String>> deleteErrorMap = new HashMap<>();
         List<String> deleteErrorIds = new ArrayList<>();
         deleteErrorIds.add(componentInstanceId);
@@ -1301,7 +1332,7 @@ public class ComponentInstanceBusinessLogicTest {
         try {
             result = componentInstanceBusinessLogic
                 .batchDeleteComponentInstance(containerComponentParam, containerComponentId, componentInstanceIdList,
-                    userId);
+                    USER_ID);
             assertNotNull(result);
             assertEquals(deleteErrorMap, result);
         } catch (ComponentException e) {
@@ -1310,14 +1341,12 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testBatchDeleteComponentInstanceFailureCompIds() {
-        Map<String, List<String>> result = new HashMap<>();
+    void testBatchDeleteComponentInstanceFailureCompIds() {
         String containerComponentParam = ComponentTypeEnum.SERVICE_PARAM_NAME;
         String containerComponentId = "containerComponentId";
         String componentInstanceId = "componentInstanceId";
         List<String> componentInstanceIdList = new ArrayList<>();
         componentInstanceIdList.add(componentInstanceId);
-        String userId = USER_ID;
         Map<String, List<String>> deleteErrorMap = new HashMap<>();
         List<String> deleteErrorIds = new ArrayList<>();
         deleteErrorIds.add(componentInstanceId);
@@ -1328,9 +1357,8 @@ public class ComponentInstanceBusinessLogicTest {
             .thenReturn(err);
 
         try {
-            result = componentInstanceBusinessLogic
-                .batchDeleteComponentInstance(containerComponentParam, containerComponentId, componentInstanceIdList,
-                    userId);
+            Map<String, List<String>> result = componentInstanceBusinessLogic.batchDeleteComponentInstance(
+                containerComponentParam, containerComponentId, componentInstanceIdList, USER_ID);
             assertNotNull(result);
             assertEquals(deleteErrorMap, result);
         } catch (ComponentException e) {
@@ -1339,7 +1367,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testBatchDeleteComponentInstanceSuccess() {
+    void testBatchDeleteComponentInstanceSuccess() {
         Map<String, List<String>> result;
         String containerComponentParam = ComponentTypeEnum.SERVICE_PARAM_NAME;
         LifecycleStateEnum oldLifeCycleState = service.getLifecycleState();
@@ -1348,7 +1376,6 @@ public class ComponentInstanceBusinessLogicTest {
         service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
         String containerComponentId = service.getUniqueId();
         String componentInstanceId = TO_INSTANCE_ID;
-        String userId = USER_ID;
         List<String> componentInstanceIdList = new ArrayList<>();
         componentInstanceIdList.add(componentInstanceId);
         Map<String, List<String>> deleteErrorMap = new HashMap<>();
@@ -1370,7 +1397,7 @@ public class ComponentInstanceBusinessLogicTest {
 
         result = componentInstanceBusinessLogic
             .batchDeleteComponentInstance(containerComponentParam, containerComponentId,
-                componentInstanceIdList, userId);
+                componentInstanceIdList, USER_ID);
         assertNotNull(result);
 
         service.setLastUpdaterUserId(oldLastUpdatedUserId);
@@ -1379,7 +1406,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testDissociateRIFromRIFailDissociate() {
+    void testDissociateRIFromRIFailDissociate() {
 
         List<RequirementCapabilityRelDef> result;
         RequirementCapabilityRelDef ref = new RequirementCapabilityRelDef();
@@ -1396,7 +1423,6 @@ public class ComponentInstanceBusinessLogicTest {
         requirementDefList.add(ref);
         ComponentTypeEnum componentTypeEnum = service.getComponentType();
         String componentId = service.getUniqueId();
-        String userId = USER_ID;
         LifecycleStateEnum oldLifeCycleState = service.getLifecycleState();
         String oldLastUpdatedUserId = service.getLastUpdaterUserId();
         service.setLastUpdaterUserId(USER_ID);
@@ -1417,7 +1443,7 @@ public class ComponentInstanceBusinessLogicTest {
 
         try {
             result = componentInstanceBusinessLogic
-                .batchDissociateRIFromRI(componentId, userId, requirementDefList, componentTypeEnum);
+                .batchDissociateRIFromRI(componentId, USER_ID, requirementDefList, componentTypeEnum);
             assertNotNull(result);
             assertEquals(new ArrayList<>(), result);
         } catch (ComponentException e) {
@@ -1430,7 +1456,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testDissociateRIFromRISuccess() {
+    void testDissociateRIFromRISuccess() {
 
         List<RequirementCapabilityRelDef> result;
         RequirementCapabilityRelDef ref = new RequirementCapabilityRelDef();
@@ -1438,7 +1464,6 @@ public class ComponentInstanceBusinessLogicTest {
         requirementDefList.add(ref);
         ComponentTypeEnum componentTypeEnum = service.getComponentType();
         String componentId = service.getUniqueId();
-        String userId = USER_ID;
         LifecycleStateEnum oldLifeCycleState = service.getLifecycleState();
         String oldLastUpdatedUserId = service.getLastUpdaterUserId();
         service.setLastUpdaterUserId(USER_ID);
@@ -1456,7 +1481,7 @@ public class ComponentInstanceBusinessLogicTest {
         when(toscaOperationFacade.dissociateResourceInstances(componentId, ref)).thenReturn(resultEither);
 
         result = componentInstanceBusinessLogic
-            .batchDissociateRIFromRI(componentId, userId, requirementDefList, componentTypeEnum);
+            .batchDissociateRIFromRI(componentId, USER_ID, requirementDefList, componentTypeEnum);
         assertNotNull(result);
 
         service.setLastUpdaterUserId(oldLastUpdatedUserId);
@@ -1466,7 +1491,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testGetComponentInstancePropertyByPolicyId_success() {
+    void testGetComponentInstancePropertyByPolicyId_success() {
         Optional<ComponentInstanceProperty> propertyCandidate =
             getComponentInstanceProperty(PROP_NAME);
 
@@ -1475,7 +1500,7 @@ public class ComponentInstanceBusinessLogicTest {
     }
 
     @Test
-    public void testGetComponentInstancePropertyByPolicyId_failure() {
+    void testGetComponentInstancePropertyByPolicyId_failure() {
         Optional<ComponentInstanceProperty> propertyCandidate =
             getComponentInstanceProperty(NON_EXIST_NAME);
 
@@ -1490,14 +1515,14 @@ public class ComponentInstanceBusinessLogicTest {
         componentInstanceProperty.setGetPolicyValues(policyDefinition.getGetPolicyValues());
 
         service.setComponentInstancesProperties(
-            Collections.singletonMap(COMPONENT_INST_ID, Collections.singletonList(componentInstanceProperty)));
+            Collections.singletonMap(COMPONENT_INSTANCE_ID, Collections.singletonList(componentInstanceProperty)));
 
         return componentInstanceBusinessLogic.getComponentInstancePropertyByPolicyId(service, policyDefinition);
     }
 
     private PolicyDefinition getPolicyDefinition() {
         PolicyDefinition policyDefinition = new PolicyDefinition();
-        policyDefinition.setInstanceUniqueId(COMPONENT_INST_ID);
+        policyDefinition.setInstanceUniqueId(COMPONENT_INSTANCE_ID);
         policyDefinition.setName(PROP_NAME);
 
         GetPolicyValueDataDefinition getPolicy = new GetPolicyValueDataDefinition();
@@ -1522,4 +1547,231 @@ public class ComponentInstanceBusinessLogicTest {
         componentInst.setDeploymentArtifacts(component.getDeploymentArtifacts());
         return componentInst;
     }
+
+    // Prepare ComponentInstance & Resource objects used in createComponentInstance() tests
+    private Pair<ComponentInstance, Resource> prepareResourcesForCreateComponentInstanceTest() {
+        ComponentInstance instanceToBeCreated = new ComponentInstance();
+        instanceToBeCreated.setName(COMPONENT_INSTANCE_NAME);
+        instanceToBeCreated.setUniqueId(COMPONENT_INSTANCE_ID);
+        instanceToBeCreated.setComponentUid(ORIGIN_COMPONENT_ID);
+        instanceToBeCreated.setOriginType(OriginTypeEnum.VF);
+
+        Resource originComponent = new Resource();
+        originComponent.setLifecycleState(LifecycleStateEnum.CERTIFIED);
+        originComponent.setResourceType(ResourceTypeEnum.VF);
+        originComponent.setVersion(ORIGIN_COMPONENT_VERSION);
+        originComponent.setIcon(ICON_NAME);
+
+        return Pair.of(instanceToBeCreated, originComponent);
+    }
+
+    // Common part for testing component instance name validation
+    private void testCreateComponentInstanceNameValidationFailure(String ciName) {
+        ComponentInstance ci = new ComponentInstance();
+        ci.setName(ciName);
+
+        // Stub for getting component
+        when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
+            .thenReturn(Either.left(service));
+
+        // Expecting ByActionStatusComponentException
+        ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> {
+            componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci);
+        });
+        assertEquals(ActionStatus.INVALID_COMPONENT_NAME, e.getActionStatus());
+    }
+
+    @TestFactory
+    Iterable<DynamicTest> testCreateComponentInstanceNameValidationFailureFactory() {
+        String longName = String.join("", Collections.nCopies(ValidationUtils.COMPONENT_NAME_MAX_LENGTH + 1, "x"));
+        String invalidName = "componentInstance#name";
+        return Arrays.asList(
+            dynamicTest("instance name is empty", () ->
+                testCreateComponentInstanceNameValidationFailure("")),
+            dynamicTest("instance name is too long", () ->
+                testCreateComponentInstanceNameValidationFailure(longName)),
+            dynamicTest("instance name includes invalid character", () ->
+                testCreateComponentInstanceNameValidationFailure(invalidName))
+        );
+    }
+
+    @Test
+    void testCreateComponentInstanceFailToGetComponent() {
+        ComponentInstance ci = prepareResourcesForCreateComponentInstanceTest().getLeft();
+
+        // Stub for getting component
+        when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
+            .thenReturn(Either.left(service));
+        when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID)))
+            .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
+        when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND, ComponentTypeEnum.RESOURCE))
+            .thenReturn(ActionStatus.RESOURCE_NOT_FOUND);
+
+        ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> {
+            componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci);
+        });
+        assertThat(e.getActionStatus()).isEqualTo(ActionStatus.RESOURCE_NOT_FOUND);
+    }
+
+    @Test
+    void testCreateComponentInstanceFailureInvalidState() {
+        Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest();
+        ComponentInstance ci = p.getLeft();
+        Resource originComponent = p.getRight();
+        originComponent.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
+
+        // Stub for getting component
+        when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
+            .thenReturn(Either.left(service));
+        when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID)))
+            .thenReturn(Either.left(originComponent));
+
+        ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> {
+            componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci);
+        });
+        assertThat(e.getActionStatus()).isEqualTo(ActionStatus.CONTAINER_CANNOT_CONTAIN_COMPONENT_IN_STATE);
+    }
+
+    @Test
+    void testCreateComponentInstanceFailureArchived() {
+        Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest();
+        ComponentInstance ci = p.getLeft();
+        Resource originComponent = p.getRight();
+        originComponent.setArchived(Boolean.TRUE);
+
+        // Stub for getting component
+        when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
+            .thenReturn(Either.left(service));
+        when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID)))
+            .thenReturn(Either.left(originComponent));
+
+        ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> {
+            componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci);
+        });
+        assertThat(e.getActionStatus()).isEqualTo(ActionStatus.COMPONENT_IS_ARCHIVED);
+    }
+
+    @Test
+    void testCreateComponentInstanceFailureInvalidOriginType() {
+        Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest();
+        ComponentInstance ci = p.getLeft();
+        Resource originComponent = p.getRight();
+        ci.setOriginType(OriginTypeEnum.VFC); // Set different type from origin
+
+        // Stub for getting component
+        when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
+            .thenReturn(Either.left(service));
+        when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID)))
+            .thenReturn(Either.left(originComponent));
+
+        ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> {
+            componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci);
+        });
+        assertThat(e.getActionStatus()).isEqualTo(ActionStatus.INVALID_CONTENT);
+    }
+
+    @Test
+    void testCreateComponentInstanceFailureCannotContainInstance() {
+        Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest();
+        ComponentInstance ci = p.getLeft();
+        Resource originComponent = p.getRight();
+
+        // Stub for getting component
+        when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
+            .thenReturn(Either.left(service));
+        when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID)))
+            .thenReturn(Either.left(originComponent));
+        // Assume services cannot contain VF resource
+        when(containerInstanceTypeData.getServiceContainerList())
+            .thenReturn(Collections.singletonList(ResourceTypeEnum.VL));
+
+        ByActionStatusComponentException e = assertThrows(ByActionStatusComponentException.class, () -> {
+            componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci);
+        });
+        assertThat(e.getActionStatus()).isEqualTo(ActionStatus.CONTAINER_CANNOT_CONTAIN_INSTANCE);
+        verify(containerInstanceTypeData, times(1)).getServiceContainerList();
+    }
+
+    @Test
+    void testCreateComponentInstanceFailureAddToGraph() {
+        Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest();
+        ComponentInstance ci = p.getLeft();
+        Resource originComponent = p.getRight();
+
+        // TODO Refactor createComponentInstance() method and reduce these mocks
+        //      not to target the internal details too much
+        when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
+            .thenReturn(Either.left(service));
+        when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID)))
+            .thenReturn(Either.left(originComponent));
+        when(containerInstanceTypeData.getServiceContainerList())
+            .thenReturn(Collections.singletonList(ResourceTypeEnum.VF));
+        Mockito.doNothing().when(compositionBusinessLogic).validateAndSetDefaultCoordinates(ci);
+        when(graphLockOperation.lockComponent(COMPONENT_ID, NodeTypeEnum.Service))
+            .thenReturn(StorageOperationStatus.OK);
+        when(toscaOperationFacade.addComponentInstanceToTopologyTemplate(service, originComponent, ci, false, user))
+            .thenReturn(Either.right(StorageOperationStatus.BAD_REQUEST));
+        when(componentsUtils.convertFromStorageResponseForResourceInstance(StorageOperationStatus.BAD_REQUEST, true))
+            .thenReturn(ActionStatus.INVALID_CONTENT);
+        when(componentsUtils.getResponseFormatForResourceInstance(ActionStatus.INVALID_CONTENT, "", null))
+            .thenReturn(new ResponseFormat());
+        when(janusGraphDao.rollback()).thenReturn(JanusGraphOperationStatus.OK);
+        when(graphLockOperation.unlockComponent(COMPONENT_ID, NodeTypeEnum.Service))
+            .thenReturn(StorageOperationStatus.OK);
+
+        assertThrows(ByResponseFormatComponentException.class, () -> {
+            componentInstanceBusinessLogic.createComponentInstance(ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, ci);
+        });
+        verify(containerInstanceTypeData, times(1)).getServiceContainerList();
+        verify(compositionBusinessLogic, times(1)).validateAndSetDefaultCoordinates(ci);
+        verify(toscaOperationFacade, times(1))
+            .addComponentInstanceToTopologyTemplate(service, originComponent, ci, false, user);
+        verify(graphLockOperation, times(1)).unlockComponent(COMPONENT_ID, NodeTypeEnum.Service);
+    }
+
+    @Test
+    void testCreateComponentInstanceSuccess() {
+        Pair<ComponentInstance, Resource> p = prepareResourcesForCreateComponentInstanceTest();
+        ComponentInstance instanceToBeCreated = p.getLeft();
+        Resource originComponent = p.getRight();
+
+        Service updatedService = new Service();
+        updatedService.setComponentInstances(Collections.singletonList(instanceToBeCreated));
+        updatedService.setUniqueId(service.getUniqueId());
+
+        // TODO Refactor createComponentInstance() method and reduce these mocks
+        //      not to target the internal details too much
+        when(toscaOperationFacade.getToscaElement(eq(COMPONENT_ID), any(ComponentParametersView.class)))
+            .thenReturn(Either.left(service));
+        when(toscaOperationFacade.getToscaFullElement(eq(ORIGIN_COMPONENT_ID)))
+            .thenReturn(Either.left(originComponent));
+        when(containerInstanceTypeData.getServiceContainerList())
+            .thenReturn(Collections.singletonList(ResourceTypeEnum.VF));
+        Mockito.doNothing().when(compositionBusinessLogic).validateAndSetDefaultCoordinates(instanceToBeCreated);
+        when(graphLockOperation.lockComponent(COMPONENT_ID, NodeTypeEnum.Service))
+            .thenReturn(StorageOperationStatus.OK);
+        when(toscaOperationFacade.addComponentInstanceToTopologyTemplate(service, originComponent, instanceToBeCreated, false, user))
+            .thenReturn(Either.left(new ImmutablePair<>(updatedService, COMPONENT_INSTANCE_ID)));
+        when(artifactsBusinessLogic.getArtifacts(
+            ORIGIN_COMPONENT_ID, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null))
+            .thenReturn(Either.left(new HashMap<>()));
+        when(toscaOperationFacade
+            .addInformationalArtifactsToInstance(service.getUniqueId(), instanceToBeCreated, originComponent.getArtifacts()))
+            .thenReturn(StorageOperationStatus.OK);
+        when(janusGraphDao.commit()).thenReturn(JanusGraphOperationStatus.OK);
+        when(graphLockOperation.unlockComponent(COMPONENT_ID, NodeTypeEnum.Service))
+            .thenReturn(StorageOperationStatus.OK);
+
+        ComponentInstance result = componentInstanceBusinessLogic.createComponentInstance(
+            ComponentTypeEnum.SERVICE_PARAM_NAME, COMPONENT_ID, USER_ID, instanceToBeCreated);
+        assertThat(result).isEqualTo(instanceToBeCreated);
+        assertThat(instanceToBeCreated.getComponentVersion()).isEqualTo(originComponent.getVersion());
+        assertThat(instanceToBeCreated.getIcon()).isEqualTo(originComponent.getIcon());
+        verify(containerInstanceTypeData, times(1)).getServiceContainerList();
+        verify(compositionBusinessLogic, times(1)).validateAndSetDefaultCoordinates(instanceToBeCreated);
+        verify(toscaOperationFacade, times(1))
+            .addComponentInstanceToTopologyTemplate(service, originComponent, instanceToBeCreated, false, user);
+        // Check graph db change was committed
+        verify(janusGraphDao, times(1)).commit();
+    }
 }