+ verify(resourceBusinessLogic).propagateStateToCertified(eq(user), eq(resource), any(LifecycleChangeInfoWithAction.class), eq(false), eq(true),
+ eq(false));
+ }
+
+ @Test
+ void testReimportVfcToExistedResource() throws IOException {
+ user.setUserId(resourceMD.getContactId());
+ user.setRole("ADMIN");
+ user.setFirstName("John");
+ user.setLastName("Doe");
+ when(userAdmin.getUser(anyString(), anyBoolean())).thenReturn(user);
+
+ setResourceBusinessLogicMock();
+
+ final String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-blockStorage.yml");
+
+ ImmutablePair<Resource, ActionStatus> createResource =
+ importManager.importNormativeResource(jsonContent, resourceMD, null, user, true, true, false);
+ assertNotNull(createResource);
+ Resource resource = createResource.left;
+ assertNotNull(resource);
+
+ final GraphVertex graphVertex_1 = new GraphVertex();
+ graphVertex_1.setUniqueId("1-2-3-4-5-6-7");
+ graphVertex_1.addMetadataProperty(GraphPropertyEnum.VERSION, "1.1");
+ when(janusGraphDao.getByCriteria(eq(VertexTypeEnum.NODE_TYPE), anyMap(), anyMap(), eq(JsonParseFlagEnum.ParseAll), any(), anyBoolean()))
+ .thenReturn(Either.left(Arrays.asList(graphVertex_1)));
+ when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(Either.left(resource));
+ createResource = reimportVfc(resource, jsonContent);
+ assertNotNull(createResource);
+ resource = createResource.left;
+ assertNotNull(resource);
+ testPropertiesAfterReimport(resource);
+
+ final GraphVertex graphVertex_2 = new GraphVertex();
+ graphVertex_2.setUniqueId("11-22-33-44-55-66-77");
+ graphVertex_2.addMetadataProperty(GraphPropertyEnum.VERSION, "2.2");
+ when(janusGraphDao.getByCriteria(eq(VertexTypeEnum.NODE_TYPE), anyMap(), anyMap(), eq(JsonParseFlagEnum.ParseAll), any(), anyBoolean()))
+ .thenReturn(Either.left(Arrays.asList(graphVertex_1, graphVertex_2)));
+ when(toscaOperationFacade.getToscaElement(anyString())).thenReturn(Either.left(resource));
+ createResource = reimportVfc(resource, jsonContent);
+ assertNotNull(createResource);
+ resource = createResource.left;
+ assertNotNull(resource);
+ testPropertiesAfterReimport(resource);
+
+ verify(resourceBusinessLogic, times(3))
+ .propagateStateToCertified(eq(user), eq(resource), any(LifecycleChangeInfoWithAction.class), eq(false), eq(true), eq(false));
+ }
+
+ @Test
+ void importAllNormativeResourceSuccessTest() {
+ final List<NodeTypeMetadata> nodeMetadataList = new ArrayList<>();
+ var nodeTypeMetadata1 = new NodeTypeMetadata();
+ nodeTypeMetadata1.setToscaName("my.tosca.Type");
+ nodeTypeMetadata1.setName("Type");
+ nodeMetadataList.add(nodeTypeMetadata1);
+ var nodeTypeMetadata2 = new NodeTypeMetadata();
+ nodeTypeMetadata2.setToscaName("my.tosca.not.in.the.Yaml");
+ nodeMetadataList.add(nodeTypeMetadata2);
+ var nodeTypesMetadataList = new NodeTypesMetadataList();
+ nodeTypesMetadataList.setNodeMetadataList(nodeMetadataList);
+ var yaml = "node_types:\n"
+ + " my.tosca.Type:\n"
+ + " description: a description";
+
+ when(toscaOperationFacade.getLatestByName(any(), any())).thenReturn(Either.left(null));
+ when(resourceBusinessLogic
+ .createOrUpdateResourceByImport(any(Resource.class), any(User.class), eq(true), eq(true), eq(false), eq(null), eq(null), eq(false)))
+ .thenReturn(new ImmutablePair<>(new Resource(), ActionStatus.OK));
+
+ importManager.importAllNormativeResource(yaml, nodeTypesMetadataList, user, false, false);
+ verify(janusGraphDao).commit();
+ }
+
+ @Test
+ void importAllNormativeResourceTest_invalidYaml() {
+ var invalidYaml = "node_types: my.tosca.Type:";
+
+ final ByActionStatusComponentException actualException = assertThrows(ByActionStatusComponentException.class,
+ () -> importManager.importAllNormativeResource(invalidYaml, new NodeTypesMetadataList(), new User(), false, false));
+ assertEquals(ActionStatus.INVALID_NODE_TYPES_YAML, actualException.getActionStatus());
+ }
+
+ @Test
+ void importAllNormativeResourceTest_exceptionDuringImportShouldTriggerRollback() {
+ when(responseFormatManager.getResponseFormat(ActionStatus.GENERAL_ERROR)).thenReturn(mock(ResponseFormat.class));
+ when(toscaOperationFacade.getLatestByName(any(), any())).thenThrow(new RuntimeException());
+
+ final List<NodeTypeMetadata> nodeMetadataList = new ArrayList<>();
+ var nodeTypeMetadata1 = new NodeTypeMetadata();
+ nodeTypeMetadata1.setToscaName("my.tosca.Type");
+ nodeMetadataList.add(nodeTypeMetadata1);
+ var nodeTypeMetadata2 = new NodeTypeMetadata();
+ nodeTypeMetadata2.setToscaName("my.tosca.not.in.the.Yaml");
+ nodeMetadataList.add(nodeTypeMetadata2);
+ var nodeTypesMetadataList = new NodeTypesMetadataList();
+ nodeTypesMetadataList.setNodeMetadataList(nodeMetadataList);
+ var yaml = "node_types:\n"
+ + " my.tosca.Type:\n"
+ + " description: a description";
+
+ assertThrows(ComponentException.class,
+ () -> importManager.importAllNormativeResource(yaml, nodeTypesMetadataList, user, false, false));
+ verify(janusGraphDao).rollback();