From 2e6a7eb218ad07a19fd1cc09b94e1f6a82e05360 Mon Sep 17 00:00:00 2001 From: "Sindhuri.A" Date: Fri, 7 Sep 2018 13:53:56 +0530 Subject: Single node copy paste keyboard shorcut on canvas Keyboard Shortcut copy paste for single node on Composition page canvas for services Issue-ID: SDC-1736 Change-Id: I669a728d3641a59ba7a4d8cc18fdae1000a0377f Signed-off-by: Sindhuri.A --- .../impl/ComponentInstanceBusinessLogicTest.java | 222 ++++++++++++++++++++- .../be/servlets/ComponentInstanceServletTest.java | 38 ++++ 2 files changed, 256 insertions(+), 4 deletions(-) (limited to 'catalog-be/src/test/java/org/openecomp') diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java index 1a6483009d..929bb97281 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ComponentInstanceBusinessLogicTest.java @@ -1,6 +1,5 @@ package org.openecomp.sdc.be.components.impl; -import static org.junit.Assert.assertSame; import static org.assertj.core.api.Assertions.assertThat; import fj.data.Either; @@ -16,14 +15,18 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; import org.mockito.junit.MockitoJUnitRunner; import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; import org.openecomp.sdc.be.components.validation.UserValidations; import org.openecomp.sdc.be.dao.api.ActionStatus; +import org.openecomp.sdc.be.dao.jsongraph.TitanDao; import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum; +import org.openecomp.sdc.be.dao.titan.TitanOperationStatus; import org.openecomp.sdc.be.datatypes.elements.*; 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.impl.ComponentsUtils; import org.openecomp.sdc.be.impl.ServletUtils; import org.openecomp.sdc.be.info.CreateAndAssotiateInfo; @@ -32,19 +35,22 @@ import org.openecomp.sdc.be.model.LifecycleStateEnum; import org.openecomp.sdc.be.model.jsontitan.operations.ForwardingPathOperation; import org.openecomp.sdc.be.model.jsontitan.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.user.UserBusinessLogic; +import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum; import org.openecomp.sdc.exception.ResponseFormat; import java.util.function.BiPredicate; import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertSame; +import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anySet; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; -import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.when; @@ -86,6 +92,13 @@ public class ComponentInstanceBusinessLogicTest { private User user; @Mock private UserValidations userValidations; + @Mock + private TitanDao titanDao; + @Mock + private ArtifactsBusinessLogic artifactBusinessLogic; + @Mock + private GraphLockOperation graphLockOperation; + private Component service; private Component resource; private ComponentInstance toInstance; @@ -158,8 +171,8 @@ public class ComponentInstanceBusinessLogicTest { Either, ResponseFormat> resultOp = componentInstanceBusinessLogic.forwardingPathOnVersionChange (containerComponentParam,containerComponentID,componentInstanceID,newComponentInstance); - Assert.assertEquals(1,resultOp.left().value().size()); - Assert.assertEquals("FP-ID-1",resultOp.left().value().iterator().next()); + assertEquals(1,resultOp.left().value().size()); + assertEquals("FP-ID-1",resultOp.left().value().iterator().next()); } @@ -1067,4 +1080,205 @@ public class ComponentInstanceBusinessLogicTest { when(toscaOperationFacade.getToscaFullElement(containerComponentId)).thenReturn(Either.left(resource)); result=testSubject.updateInstanceCapabilityProperties(componentTypeEnum, containerComponentId, componentInstanceUniqueId, capabilityType, capabilityName, properties, userId); } + + @Test + public void testCopyComponentInstanceWrongUserId() { + + Either, ResponseFormat> result; + ComponentInstance inputComponentInstance = createComponetInstanceFromComponent(resource); + String containerComponentId = service.getUniqueId(); + String componentInstanceId = resource.getUniqueId(); + String oldLastUpdatedUserId = service.getLastUpdaterUserId(); + service.setLastUpdaterUserId("wrong user id"); + + Either leftServiceOp = Either.left(service); + when(toscaOperationFacade.getToscaElement(containerComponentId)).thenReturn(leftServiceOp); + when(toscaOperationFacade.getToscaElement(eq(containerComponentId), any(ComponentParametersView.class))) + .thenReturn(leftServiceOp); + when(titanDao.rollback()).thenReturn(TitanOperationStatus.OK); + when(graphLockOperation.unlockComponent(Mockito.anyString(), eq(NodeTypeEnum.Service))) + .thenReturn(StorageOperationStatus.OK); + when(graphLockOperation.lockComponent(Mockito.anyString(), eq(NodeTypeEnum.Service))) + .thenReturn(StorageOperationStatus.OK); + + result = componentInstanceBusinessLogic + .copyComponentInstance(inputComponentInstance, containerComponentId, componentInstanceId, USER_ID); + + service.setLastUpdaterUserId(oldLastUpdatedUserId); + + assertThat(result.isRight()); + } + + @Test + public void testCopyComponentInstanceComponentWrongState() { + Either, ResponseFormat> result; + ComponentInstance inputComponentInstance = createComponetInstanceFromComponent(resource); + String containerComponentId = service.getUniqueId(); + String componentInstanceId = resource.getUniqueId(); + String oldServiceLastUpdatedUserId = service.getLastUpdaterUserId(); + service.setLastUpdaterUserId(USER_ID); + + Either leftServiceOp = Either.left(service); + when(toscaOperationFacade.getToscaElement(containerComponentId)).thenReturn(leftServiceOp); + when(toscaOperationFacade.getToscaElement(eq(containerComponentId), any(ComponentParametersView.class))) + .thenReturn(leftServiceOp); + when(titanDao.rollback()).thenReturn(TitanOperationStatus.OK); + when(graphLockOperation.unlockComponent(Mockito.anyString(), eq(NodeTypeEnum.Service))) + .thenReturn(StorageOperationStatus.OK); + when(graphLockOperation.lockComponent(Mockito.anyString(), eq(NodeTypeEnum.Service))) + .thenReturn(StorageOperationStatus.OK); + Either getComponentRes = Either.left(resource); + when(toscaOperationFacade.getToscaFullElement(inputComponentInstance.getComponentUid())) + .thenReturn(getComponentRes); + + result = componentInstanceBusinessLogic + .copyComponentInstance(inputComponentInstance, containerComponentId, componentInstanceId, USER_ID); + + service.setLastUpdaterUserId(oldServiceLastUpdatedUserId); + + assertThat(result.isRight()); + } + + @Test + public void testCopyComponentInstance() { + Either, ResponseFormat> result; + ComponentInstance inputComponentInstance = createComponetInstanceFromComponent(resource); + String containerComponentId = service.getUniqueId(); + String componentInstanceId = resource.getUniqueId(); + String oldServiceLastUpdatedUserId = service.getLastUpdaterUserId(); + service.setLastUpdaterUserId(USER_ID); + LifecycleStateEnum oldResourceLifeCycle = resource.getLifecycleState(); + resource.setLifecycleState(LifecycleStateEnum.CERTIFIED); + + Either leftServiceOp = Either.left(service); + when(toscaOperationFacade.getToscaElement(containerComponentId)).thenReturn(leftServiceOp); + when(toscaOperationFacade.getToscaElement(eq(containerComponentId), any(ComponentParametersView.class))) + .thenReturn(leftServiceOp); + when(graphLockOperation.unlockComponent(Mockito.anyString(), eq(NodeTypeEnum.Service))) + .thenReturn(StorageOperationStatus.OK); + when(graphLockOperation.lockComponent(Mockito.anyString(), eq(NodeTypeEnum.Service))) + .thenReturn(StorageOperationStatus.OK); + Either getComponentRes = Either.left(resource); + when(toscaOperationFacade.getToscaFullElement(inputComponentInstance.getComponentUid())) + .thenReturn(getComponentRes); + ImmutablePair pair = new ImmutablePair<>(resource, TO_INSTANCE_ID); + Either, StorageOperationStatus> result2 = Either.left(pair); + when(toscaOperationFacade + .addComponentInstanceToTopologyTemplate(eq(service), eq(resource), eq(inputComponentInstance), eq(false), + isNull(User.class))).thenReturn(result2); + Either, StorageOperationStatus> getResourceDeploymentArtifacts = Either + .left(new HashMap()); + when(artifactBusinessLogic.getArtifacts(eq(inputComponentInstance.getComponentUid()), eq(NodeTypeEnum.Resource), + eq(ArtifactGroupTypeEnum.DEPLOYMENT), isNull(String.class))).thenReturn(getResourceDeploymentArtifacts); + StorageOperationStatus artStatus = StorageOperationStatus.OK; + when(toscaOperationFacade + .addInformationalArtifactsToInstance(eq(resource.getUniqueId()), eq(inputComponentInstance), + isNull(Map.class))).thenReturn(artStatus); + + result = componentInstanceBusinessLogic + .copyComponentInstance(inputComponentInstance, containerComponentId, componentInstanceId, USER_ID); + + service.setLastUpdaterUserId(oldServiceLastUpdatedUserId); + resource.setLifecycleState(oldResourceLifeCycle); + + assertThat(result.isLeft()); + } + + @Test + public void testCreateOrUpdateAttributeValueForCopyPaste() { + ComponentInstance serviceComponentInstance = createComponetInstanceFromComponent(service); + ComponentInstanceProperty attribute = new ComponentInstanceProperty(); + attribute.setType("string"); + attribute.setUniqueId("testCreateOrUpdateAttributeValueForCopyPaste"); + SchemaDefinition def = Mockito.mock(SchemaDefinition.class); + attribute.setSchema(def); + LifecycleStateEnum oldLifeCycleState = service.getLifecycleState(); + String oldLastUpdatedUserId = service.getLastUpdaterUserId(); + service.setLastUpdaterUserId(USER_ID); + service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT); + + Map> instAttrsMap = new HashMap>(); + List instAttrsList = new ArrayList(); + ComponentInstanceProperty prop = new ComponentInstanceProperty(); + prop.setUniqueId(attribute.getUniqueId()); + instAttrsList.add(prop); + instAttrsMap.put(toInstance.getUniqueId(), instAttrsList); + service.setComponentInstancesAttributes(instAttrsMap); + + Either serviceEitherLeft = Either.left(service); + when(toscaOperationFacade.getToscaElement(serviceComponentInstance.getUniqueId(), JsonParseFlagEnum.ParseAll)).thenReturn(serviceEitherLeft); + when(toscaOperationFacade.updateComponentInstanceAttribute(service, toInstance.getUniqueId(), attribute)).thenReturn(StorageOperationStatus.OK); + when(toscaOperationFacade.updateComponentInstanceMetadataOfTopologyTemplate(service)).thenReturn(serviceEitherLeft); + + Either result = Deencapsulation.invoke(componentInstanceBusinessLogic, "createOrUpdateAttributeValueForCopyPaste", ComponentTypeEnum.SERVICE, + serviceComponentInstance.getUniqueId(), + toInstance.getUniqueId(), + attribute, + USER_ID); + + service.setLastUpdaterUserId(oldLastUpdatedUserId); + service.setLifecycleState(oldLifeCycleState); + + assertTrue(result.isLeft()); + ComponentInstanceProperty resultProp = result.left().value(); + assertEquals(resultProp.getPath().size(), 1); + assertEquals(resultProp.getPath().get(0), toInstance.getUniqueId()); + } + + @Test + public void testUpdateComponentInstanceProperty() { + + String containerComponentId = service.getUniqueId(); + String componentInstanceId = "dummy_id"; + ComponentInstanceProperty property = Mockito.mock(ComponentInstanceProperty.class); + + Either getComponent = Either.left(service); + when(toscaOperationFacade.getToscaElement(containerComponentId)).thenReturn(getComponent); + StorageOperationStatus status = StorageOperationStatus.OK; + when(toscaOperationFacade.updateComponentInstanceProperty(service, componentInstanceId, property)) + .thenReturn(status); + Either updateContainerRes = Either.left(service); + when(toscaOperationFacade.updateComponentInstanceMetadataOfTopologyTemplate(service)) + .thenReturn(updateContainerRes); + + Either result = Deencapsulation + .invoke(componentInstanceBusinessLogic, "updateComponentInstanceProperty", containerComponentId, + componentInstanceId, property); + + assertTrue(result.isLeft()); + } + + @Test + public void testGetInputListDefaultValue() { + Component component = service; + String inputId = "dummy_id"; + String defaultValue = "dummy_default_value"; + List newInputs = new ArrayList(); + InputDefinition in = new InputDefinition(); + in.setUniqueId(inputId); + in.setDefaultValue(defaultValue); + newInputs.add(in); + List oldInputs = service.getInputs(); + service.setInputs(newInputs); + + Either result = Deencapsulation + .invoke(componentInstanceBusinessLogic, "getInputListDefaultValue", component, inputId); + + service.setInputs(oldInputs); + + assertEquals(result.left().value(), defaultValue); + } + + private ComponentInstance createComponetInstanceFromComponent(Component component) { + ComponentInstance componentInst = new ComponentInstance(); + componentInst.setUniqueId(component.getUniqueId()); + componentInst.setComponentUid(component.getUniqueId() + "_test"); + componentInst.setPosX("10"); + componentInst.setPosY("10"); + componentInst.setCapabilities(component.getCapabilities()); + componentInst.setRequirements(component.getRequirements()); + componentInst.setArtifacts(component.getArtifacts()); + componentInst.setDeploymentArtifacts(component.getDeploymentArtifacts()); + return componentInst; + } } diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ComponentInstanceServletTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ComponentInstanceServletTest.java index 0c91b49fee..d8e7896d71 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ComponentInstanceServletTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/servlets/ComponentInstanceServletTest.java @@ -1,6 +1,10 @@ package org.openecomp.sdc.be.servlets; import fj.data.Either; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import javax.ws.rs.client.Entity; import org.eclipse.jetty.http.HttpStatus; import org.glassfish.hk2.utilities.binding.AbstractBinder; import org.glassfish.jersey.server.ResourceConfig; @@ -16,7 +20,10 @@ import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; import org.openecomp.sdc.be.impl.ComponentsUtils; import org.openecomp.sdc.be.impl.ServletUtils; import org.openecomp.sdc.be.impl.WebAppContextWrapper; +import org.openecomp.sdc.be.model.CapabilityDefinition; +import org.openecomp.sdc.be.model.ComponentInstance; import org.openecomp.sdc.be.model.RequirementCapabilityRelDef; +import org.openecomp.sdc.be.model.RequirementDefinition; import org.openecomp.sdc.common.api.Constants; import org.openecomp.sdc.exception.ResponseFormat; import org.springframework.context.ApplicationContext; @@ -31,6 +38,7 @@ import javax.ws.rs.core.Response; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.when; @@ -94,6 +102,36 @@ public class ComponentInstanceServletTest extends JerseyTest { assertEquals(response.getStatus(), HttpStatus.BAD_REQUEST_400); } + @Test + public void testCopyComponentInstanceSuccess(){ + + String componentId = "componentId"; + String componentInstanceId = "componentInstanceId"; + String path = "/v1/catalog/services/" + componentId + "/copyComponentInstance/" + componentInstanceId; + + Either, ResponseFormat> successResponse = Either.left(new HashMap()); + when(componentInstanceBusinessLogic.copyComponentInstance(any(ComponentInstance.class), eq(componentId), eq(componentInstanceId), eq(USER_ID))).thenReturn(successResponse); + when(responseFormat.getStatus()).thenReturn(HttpStatus.OK_200); + when(componentsUtils.getResponseFormat(ActionStatus.OK)).thenReturn(responseFormat); + + ComponentInstance c = new ComponentInstance(); + c.setName("comp1"); + c.setUniqueId("comp1"); + c.setComponentUid("comp1"); + c.setPosX("10"); + c.setPosY("10"); + c.setCapabilities(new HashMap>()); + c.setRequirements(new HashMap>()); + + Response response = target() + .path(path) + .request(MediaType.APPLICATION_JSON) + .header("USER_ID", USER_ID) + .post(Entity.json(c)); + + assertEquals(response.getStatus(), HttpStatus.OK_200); + } + @Override protected ResourceConfig configure() { forceSet(TestProperties.CONTAINER_PORT, "0"); -- cgit 1.2.3-korg