From 6dfc4feaf5e7bc3a6a8ec002565dded1e9553561 Mon Sep 17 00:00:00 2001 From: "bilal.iqbal" Date: Fri, 10 May 2019 17:45:07 +0000 Subject: Added JUnit Test for coverage Change-Id: I7bbd5fca6847f30f64cba6d9beb521c3ba61d1cb Issue-ID: SDC-2279 Signed-off-by: bilal.iqbal --- .../DistributionMonitoringBusinessLogicTest.java | 148 ++++++ .../components/impl/ElementBusinessLogicTest.java | 433 +++++++-------- .../components/impl/ProductBusinessLogicTest.java | 587 ++++++++++----------- .../upgrade/UpgradeBusinessLogicTest.java | 307 +++++++++++ 4 files changed, 914 insertions(+), 561 deletions(-) create mode 100644 catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/DistributionMonitoringBusinessLogicTest.java create mode 100644 catalog-be/src/test/java/org/openecomp/sdc/be/components/upgrade/UpgradeBusinessLogicTest.java (limited to 'catalog-be/src') diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/DistributionMonitoringBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/DistributionMonitoringBusinessLogicTest.java new file mode 100644 index 0000000000..9b84989b56 --- /dev/null +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/DistributionMonitoringBusinessLogicTest.java @@ -0,0 +1,148 @@ +/* + * - + * * ============LICENSE_START======================================================= + * * Copyright (C) 2019 Nordix Foundation. + * * ================================================================================ + * * 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. + * * + * * SPDX-License-Identifier: Apache-2.0 + * * ============LICENSE_END========================================================= + * + */ + +package org.openecomp.sdc.be.components.impl; + +import fj.data.Either; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.openecomp.sdc.be.components.validation.UserValidations; +import org.openecomp.sdc.be.dao.api.ActionStatus; +import org.openecomp.sdc.be.dao.cassandra.AuditCassandraDao; +import org.openecomp.sdc.be.impl.ComponentsUtils; +import org.openecomp.sdc.be.info.DistributionStatusListResponse; +import org.openecomp.sdc.be.model.User; +import org.openecomp.sdc.be.resources.data.auditing.AuditingGenericEvent; +import org.openecomp.sdc.be.resources.data.auditing.DistributionStatusEvent; +import org.openecomp.sdc.exception.ResponseFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.when; + +public class DistributionMonitoringBusinessLogicTest { + + private String uId; + private User user; + private String ditributionId; + private String serviceId; + + @InjectMocks + private DistributionMonitoringBusinessLogic businessLogic; + + @Mock + private AuditCassandraDao cassandraDao; + + @Mock + private UserValidations userValidations; + + @Mock + private ComponentsUtils componentsUtils; + + @Before + public void setUp() { + businessLogic = new DistributionMonitoringBusinessLogic(); + MockitoAnnotations.initMocks(this); + + user = new User(); + uId = "userId"; + ditributionId = "did"; + serviceId = "serviceId"; + + when(userValidations.validateUserExists(Mockito.eq(uId), eq(ditributionId), anyBoolean())) + .thenReturn(user); + } + + @Test + public void testGetListOfDistribution_givenInvalidDistributionId_thenReturnsError() { + when(cassandraDao.getListOfDistributionStatuses(ditributionId)) + .thenReturn(Either.right(ActionStatus.DISTRIBUTION_NOT_FOUND)); + + assertTrue(businessLogic.getListOfDistributionStatus(ditributionId, uId).isRight()); + } + + @Test + public void testGetListOfDistribution_givenValidDistributionId_thenReturnsSuccessful() { + + List distributionEvents = new ArrayList<>(); + DistributionStatusEvent event = new DistributionStatusEvent(); + distributionEvents.add(event); + + when(cassandraDao.getListOfDistributionStatuses(ditributionId)) + .thenReturn(Either.left(distributionEvents)); + + Either result = businessLogic.getListOfDistributionStatus(ditributionId, uId); + + assertTrue(result.isLeft()); + assertEquals(1, result.left().value().getDistributionStatusList().size()); + } + + @Test + public void testGetDistributionServiceStatus_givenInvalidServiceIdId_thenReturnsError() { + + when(cassandraDao.getServiceDistributionStatusesList(serviceId)) + .thenReturn(Either.right(ActionStatus.DISTRIBUTION_NOT_FOUND)); + assertTrue(businessLogic.getListOfDistributionServiceStatus(serviceId, uId).isRight()); + } + + @Test + public void testGetDistributionServiceStatus_givenValidServiceId_thenReturnsSuccessful() { + + List serviceEvents = new ArrayList<>(); + AuditingGenericEvent event1 = new AuditingGenericEvent(); + AuditingGenericEvent event2 = new AuditingGenericEvent(); + + Map event1Fields = new HashMap<>(); + Map event2Fields = new HashMap<>(); + + event1Fields.put("DID", "event1"); + event1Fields.put("ACTION", "DRequest"); + event1Fields.put("STATUS", "200"); + event1Fields.put("MODIFIER", uId); + + event2Fields.put("DID", "event2"); + event2Fields.put("ACTION", "DNotify"); + event2Fields.put("STATUS", "200"); + event2Fields.put("MODIFIER", uId); + + event1.setFields(event1Fields); + event2.setFields(event2Fields); + + serviceEvents.add(event1); + serviceEvents.add(event2); + + when(cassandraDao.getServiceDistributionStatusesList(serviceId)) + .thenReturn(Either.left(serviceEvents)); + + assertTrue(businessLogic.getListOfDistributionServiceStatus(serviceId, uId).isLeft()); + } +} \ No newline at end of file diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ElementBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ElementBusinessLogicTest.java index cb6f8899f4..36f7084755 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ElementBusinessLogicTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ElementBusinessLogicTest.java @@ -1,353 +1,277 @@ package org.openecomp.sdc.be.components.impl; +import java.util.ArrayList; +import java.util.HashSet; import java.util.List; import java.util.Map; - -import com.att.aft.dme2.internal.apache.commons.lang.ObjectUtils; +import java.util.Set; import org.junit.Assert; +import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; 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.datatypes.enums.FilterKeyEnum; -import org.openecomp.sdc.be.datatypes.enums.OriginTypeEnum; +import org.openecomp.sdc.be.dao.jsongraph.TitanDao; +import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; +import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum; import org.openecomp.sdc.be.impl.ComponentsUtils; -import org.openecomp.sdc.be.model.ArtifactType; import org.openecomp.sdc.be.model.Component; -import org.openecomp.sdc.be.model.PropertyScope; +import org.openecomp.sdc.be.model.Product; +import org.openecomp.sdc.be.model.Resource; +import org.openecomp.sdc.be.model.Service; import org.openecomp.sdc.be.model.User; import org.openecomp.sdc.be.model.category.CategoryDefinition; -import org.openecomp.sdc.be.model.category.GroupingDefinition; import org.openecomp.sdc.be.model.category.SubCategoryDefinition; +import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; +import org.openecomp.sdc.be.model.operations.api.IElementOperation; import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; -import org.openecomp.sdc.be.ui.model.UiCategories; +import org.openecomp.sdc.be.user.Role; import org.openecomp.sdc.be.user.UserBusinessLogic; import org.openecomp.sdc.exception.ResponseFormat; - import fj.data.Either; -import javax.validation.constraints.Null; - +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anySet; import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.when; @RunWith(MockitoJUnitRunner.class) public class ElementBusinessLogicTest { - private ElementBusinessLogic createTestSubject() { - return new ElementBusinessLogic(); - } + private User user; + + @Mock + private ComponentsUtils componentsUtils; + + @Mock + private UserBusinessLogic userAdminManager; @Mock - ComponentsUtils componentsUtils; + private TitanDao titanDao; @Mock - UserBusinessLogic userAdminManager; + private UserValidations userValidations; + + @Mock + private ToscaOperationFacade toscaOperationFacade; + + @Mock + private IElementOperation elementOperation; @InjectMocks ElementBusinessLogic elementBusinessLogic; - - @Test - public void testGetFollowed() throws Exception { - ElementBusinessLogic testSubject; - User user = null; - Either>, ResponseFormat> result; - // default test - testSubject = createTestSubject(); + @Before + public void setUp() { + + elementBusinessLogic = new ElementBusinessLogic(); + MockitoAnnotations.initMocks(this); + user = new User(); + user.setUserId("admin"); } - - - - @Test - public void testGetAllResourceCategories() throws Exception { - ElementBusinessLogic testSubject; - Either, ActionStatus> result; + @Test + public void testGetFollowed_givenUserWithDesignerRole_thenReturnsSuccessful() { + user.setUserId("designer1"); + user.setRole(Role.DESIGNER.name()); - // default test - testSubject = createTestSubject(); - } + Set resources = new HashSet<>(); + Set services = new HashSet<>(); - - @Test - public void testGetAllServiceCategories() throws Exception { - ElementBusinessLogic testSubject; - Either, ActionStatus> result; + Resource resource = new Resource(); + Service service = new Service(); - // default test - testSubject = createTestSubject(); - } + resources.add(resource); + services.add(service); - - @Test - public void testCreateCategory() throws Exception { - ElementBusinessLogic testSubject; - CategoryDefinition category = null; - String componentTypeParamName = ""; - String userId = ""; - Either result; - - // test 1 - testSubject = createTestSubject(); - category = null; - } + Mockito.when(toscaOperationFacade.getFollowed(eq(user.getUserId()), Mockito.anySet(), Mockito.anySet(), Mockito.eq(ComponentTypeEnum.RESOURCE))) + .thenReturn(Either.left(resources)); + Mockito.when(toscaOperationFacade.getFollowed(eq(user.getUserId()), anySet(), anySet(), eq(ComponentTypeEnum.SERVICE))) + .thenReturn(Either.left(services)); - - @Test - public void testCreateSubCategory() throws Exception { - ElementBusinessLogic testSubject; - SubCategoryDefinition subCategory = null; - String componentTypeParamName = ""; - String parentCategoryId = ""; - String userId = ""; - Either result; - - // test 1 - testSubject = createTestSubject(); - subCategory = null; + Map> result = elementBusinessLogic.getFollowed(user).left().value(); + Assert.assertTrue(result.get("services").size() == 1); + Assert.assertTrue(result.get("resources").size() == 1); } - @Test - public void testCreateGrouping() throws Exception { - ElementBusinessLogic testSubject; - GroupingDefinition grouping = null; - String componentTypeParamName = ""; - String grandParentCategoryId = ""; - String parentSubCategoryId = ""; - String userId = ""; - Either result; - - // test 1 - testSubject = createTestSubject(); - grouping = null; - } + public void testGetFollowed_givenUserWithTesterRoleErrorOccursGettingService_thenReturnsError () { + user.setUserId("tester1"); + user.setRole(Role.TESTER.name()); - - @Test - public void testGetAllCategories() throws Exception { - ElementBusinessLogic testSubject; - String componentType = ""; - String userId = ""; - Either, ResponseFormat> result; - - // test 1 - testSubject = createTestSubject(); - userId = null; - - // test 2 - testSubject = createTestSubject(); - userId = ""; - } + Set resources = new HashSet<>(); - - @Test - public void testGetAllCategories_1() throws Exception { - ElementBusinessLogic testSubject; - String userId = ""; - Either result; + Resource resource = new Resource(); + resources.add(resource); - // default test - testSubject = createTestSubject(); + Mockito.when(toscaOperationFacade.getFollowed(any(), Mockito.anySet(), any(), Mockito.eq(ComponentTypeEnum.RESOURCE))) + .thenReturn(Either.left(resources)); + Mockito.when(toscaOperationFacade.getFollowed(any(), anySet(), any(), eq(ComponentTypeEnum.SERVICE))) + .thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR)); + Assert.assertTrue(elementBusinessLogic.getFollowed(user).isRight()); } - @Test - public void testDeleteCategory() throws Exception { - ElementBusinessLogic testSubject; - String categoryId = ""; - String componentTypeParamName = ""; - String userId = ""; - Either result; - - // default test - testSubject = createTestSubject(); - } + public void testGetFollowed_givenUserWithGovernorRole_thenReturnsSuccessful(){ + user.setUserId("governor1"); + user.setRole(Role.GOVERNOR.name()); - - @Test - public void testDeleteSubCategory() throws Exception { - ElementBusinessLogic testSubject; - String grandParentCategoryId = ""; - String parentSubCategoryId = ""; - String componentTypeParamName = ""; - String userId = ""; - Either result; - - // default test - testSubject = createTestSubject(); + List services = new ArrayList<>(); + services.add(new Service()); + + when(toscaOperationFacade.getCertifiedServicesWithDistStatus(any())) + .thenReturn(Either.left(services)); + Assert.assertTrue(elementBusinessLogic.getFollowed(user).isLeft()); } - @Test - public void testDeleteGrouping() throws Exception { - ElementBusinessLogic testSubject; - String grandParentCategoryId = ""; - String parentSubCategoryId = ""; - String groupingId = ""; - String componentTypeParamName = ""; - String userId = ""; - Either result; - - // default test - testSubject = createTestSubject(); - } + public void testGetFollowed_givenUserWithOPSRoleErrorOccursGettingServices_thenReturnsError(){ + user.setUserId("ops1"); + user.setRole(Role.OPS.name()); - + when(toscaOperationFacade.getCertifiedServicesWithDistStatus(any())) + .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND)); - - @Test - public void testGetAllPropertyScopes() throws Exception { - ElementBusinessLogic testSubject; - String userId = ""; - Either, ActionStatus> result; + Assert.assertTrue(elementBusinessLogic.getFollowed(user).isRight()); - // default test - testSubject = createTestSubject(); } - @Test - public void testGetAllArtifactTypes() throws Exception { - ElementBusinessLogic testSubject; - String userId = ""; - Either, ActionStatus> result; + public void testGetFollowed_givenUserWithProductStrategistRole_thenReturnsEmptyList(){ + user.setUserId("pstra1"); + user.setRole(Role.PRODUCT_STRATEGIST.name()); + + Map> result = elementBusinessLogic.getFollowed(user).left().value(); + Assert.assertEquals("products list should be empty", 0, result.get("products").size()); - // default test - testSubject = createTestSubject(); } - @Test - public void testGetAllDeploymentArtifactTypes() throws Exception { - ElementBusinessLogic testSubject; - Either, ActionStatus> result; + public void testGetFollowed_givenUserWithProductManagerRole_thenReturnsProducts(){ + user.setUserId("pmanager1"); + user.setRole(Role.PRODUCT_MANAGER.name()); + + Set products = new HashSet<>(); + products.add(new Product()); + + when(toscaOperationFacade.getFollowed(any(), anySet(), any(), eq(ComponentTypeEnum.PRODUCT))) + .thenReturn(Either.left(products)); + + Map> result = elementBusinessLogic.getFollowed(user).left().value(); + Assert.assertEquals("1 product should exist", 1, result.get("products").size()); - // default test - testSubject = createTestSubject(); } - @Test - public void testGetDefaultHeatTimeout() throws Exception { - ElementBusinessLogic testSubject; - Either result; + public void testGetFollowed_givenUserWithRoleAdminErrorOccursGettingResources_thenReturnsError() { + user.setUserId("admin1"); + user.setRole(Role.ADMIN.name()); + + when(toscaOperationFacade.getFollowed(any(), anySet(), any(), eq(ComponentTypeEnum.RESOURCE))) + .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND)); - // default test - testSubject = createTestSubject(); + Assert.assertTrue(elementBusinessLogic.getFollowed(user).isRight()); } - @Test - public void testGetCatalogComponents() throws Exception { - ElementBusinessLogic testSubject; - String userId = ""; - List excludeTypes = null; - Either>, ResponseFormat> result; - - // default test - testSubject = createTestSubject(); + public void testGetAllCategories_givenUserIsNull_thenReturnsError() { + Assert.assertTrue(elementBusinessLogic.getAllCategories(null, null).isRight()); } - - @Test - public void testGetFilteredCatalogComponents() throws Exception { - ElementBusinessLogic testSubject; - String assetType = ""; - Map filters = null; - String query = ""; - Either, ResponseFormat> result; - - // test 1 - testSubject = createTestSubject(); - query = null; - - // test 2 - testSubject = createTestSubject(); - query = ""; - - // test 3 - testSubject = createTestSubject(); - filters = null; + @Test(expected = ComponentException.class) + public void testGetAllCategories_givenValidationOfUserFails_thenReturnsError() { + doThrow(new ComponentException(new ResponseFormat())).when(userValidations).validateUserExists(eq(user.getUserId()), + anyString(), anyBoolean()); + elementBusinessLogic.getAllCategories(null, user.getUserId()); } - - - @Test - public void testGetCatalogComponentsByUuidAndAssetType() throws Exception { - ElementBusinessLogic testSubject; - String assetType = ""; - String uuid = ""; - Either, ResponseFormat> result; - - // test 1 - testSubject = createTestSubject(); - assetType = null; - - // test 2 - testSubject = createTestSubject(); - assetType = ""; - - // test 3 - testSubject = createTestSubject(); - assetType = null; - - // test 4 - testSubject = createTestSubject(); - assetType = ""; + public void testGetAllCategories_givenInvalidComponentType_thenReturnsError() { + when(userValidations.validateUserExists(eq(user.getUserId()), anyString(), anyBoolean())).thenReturn(user); + + Assert.assertTrue(elementBusinessLogic.getAllCategories("NONE", user.getUserId()).isRight()); + } - @Test - public void testGetAllComponentTypesParamNames() throws Exception { - ElementBusinessLogic testSubject; - List result; + public void testGetAllCategories_givenValidUserAndComponentType_thenReturnsSuccessful() { - // default test - testSubject = createTestSubject(); - result = testSubject.getAllComponentTypesParamNames(); + List categoryDefinitionList = new ArrayList<>(); + categoryDefinitionList.add(new CategoryDefinition()); + + when(userValidations.validateUserExists(eq(user.getUserId()), anyString(), anyBoolean())).thenReturn(user); + when(elementOperation.getAllCategories(NodeTypeEnum.ResourceNewCategory, false)) + .thenReturn(Either.left(categoryDefinitionList)); + Assert.assertTrue(elementBusinessLogic.getAllCategories(ComponentTypeEnum.RESOURCE_PARAM_NAME, user.getUserId()) + .isLeft()); } - @Test - public void testGetAllSupportedRoles() throws Exception { - ElementBusinessLogic testSubject; - List result; + public void testGetAllCategories_givenValidUserId_thenReturnsSuccessful() { + + List dummyCategoryDefinitionList = new ArrayList<>(); + dummyCategoryDefinitionList.add(new CategoryDefinition()); + + when(userValidations.validateUserExists(eq(user.getUserId()), anyString(), anyBoolean())) + .thenReturn(user); + when(elementOperation.getAllCategories(any(NodeTypeEnum.class), anyBoolean())) + .thenReturn(Either.left(dummyCategoryDefinitionList)); - // default test - testSubject = createTestSubject(); - result = testSubject.getAllSupportedRoles(); + Assert.assertTrue(elementBusinessLogic.getAllCategories(user.getUserId()).isLeft()); } - @Test - public void testGetResourceTypesMap() throws Exception { - ElementBusinessLogic testSubject; - Either, ActionStatus> result; + public void testDeleteCategory_givenValidComponentTypeAndCategoryId_thenReturnsSuccessful() { - // default test - testSubject = createTestSubject(); + when(elementOperation.deleteCategory(any(NodeTypeEnum.class), anyString())) + .thenReturn(Either.left(new CategoryDefinition())); + + Assert.assertTrue(elementBusinessLogic.deleteCategory("cat1", "resources", user.getUserId()).isLeft()); } - - + @Test + public void testCreateSubCategory_givenValidSubCategory_thenReturnsSuccessful() { + user.setRole(Role.ADMIN.name()); + SubCategoryDefinition subCatDef = new SubCategoryDefinition(); + subCatDef.setName("subCat1"); + + when(userValidations.validateUserExists(eq(user.getUserId()), anyString(), anyBoolean())) + .thenReturn(user); + when(elementOperation.getCategory(any(NodeTypeEnum.class), anyString())) + .thenReturn(Either.left(new CategoryDefinition())); + when(elementOperation.isSubCategoryUniqueForCategory(any(NodeTypeEnum.class), anyString(), anyString())) + .thenReturn(Either.left(Boolean.TRUE)); + when(elementOperation.getSubCategoryUniqueForType(any(NodeTypeEnum.class), anyString())) + .thenReturn(Either.left(subCatDef)); + when(elementOperation.createSubCategory(anyString(), any(SubCategoryDefinition.class), any(NodeTypeEnum.class))) + .thenReturn(Either.left(subCatDef)); + + Assert.assertTrue(elementBusinessLogic.createSubCategory(subCatDef, "resources", + "cat1", user.getUserId()).isLeft()); + } - @Test - public void testGetFilteredResouces() throws Exception { - ElementBusinessLogic testSubject; - Map filters = null; - boolean inTransaction = false; - Either, StorageOperationStatus> result; - - // default test - testSubject = createTestSubject(); + public void testCreateSubCategory_givenNullSubCategory_thenReturnsError() { + Assert.assertTrue(elementBusinessLogic.createSubCategory(null, "resources", + "cat1", user.getUserId()).isRight()); } + @Test(expected = ComponentException.class) + public void testCreateSubCategory_givenUserValidationFails_thenReturnsException() { + SubCategoryDefinition subCategoryDefinition = new SubCategoryDefinition(); + doThrow(new ComponentException(new ResponseFormat())).when(userValidations).validateUserExists(eq(user.getUserId()), + anyString(), anyBoolean()); + elementBusinessLogic.createSubCategory(subCategoryDefinition, "resources", "cat1", user.getUserId()); + } @Test public void testcreateCategory_VALIDATION_OF_USER_FAILED() throws Exception { @@ -417,5 +341,4 @@ public class ElementBusinessLogicTest { Assert.assertEquals(true,response.isRight()); Assert.assertEquals((Integer) 9, response.right().value().getStatus()); } - } \ No newline at end of file diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ProductBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ProductBusinessLogicTest.java index cbb5f7b719..faaddd7565 100644 --- a/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ProductBusinessLogicTest.java +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/impl/ProductBusinessLogicTest.java @@ -1,384 +1,359 @@ package org.openecomp.sdc.be.components.impl; +import java.util.ArrayList; import java.util.List; import java.util.Map; - -import org.apache.commons.math3.stat.descriptive.summary.Product; +import org.junit.Before; import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.openecomp.sdc.be.components.impl.exceptions.ComponentException; +import org.openecomp.sdc.be.components.validation.UserValidations; +import org.openecomp.sdc.be.components.validation.ValidationUtils; +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.datatypes.elements.ProductMetadataDataDefinition; import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; -import org.openecomp.sdc.be.model.Component; -import org.openecomp.sdc.be.model.ComponentInstance; +import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum; +import org.openecomp.sdc.be.impl.ComponentsUtils; +import org.openecomp.sdc.be.model.ComponentMetadataDefinition; +import org.openecomp.sdc.be.model.Product; import org.openecomp.sdc.be.model.User; -import org.openecomp.sdc.be.model.operations.api.ICacheMangerOperation; -import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum; -import org.openecomp.sdc.be.ui.model.UiComponentDataTransfer; -import org.openecomp.sdc.exception.ResponseFormat; - +import org.openecomp.sdc.be.model.category.CategoryDefinition; +import org.openecomp.sdc.be.model.category.GroupingDefinition; +import org.openecomp.sdc.be.model.category.SubCategoryDefinition; +import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; +import org.openecomp.sdc.be.model.operations.api.IElementOperation; +import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation; +import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; import fj.data.Either; +import org.openecomp.sdc.exception.ResponseFormat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyList; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.when; public class ProductBusinessLogicTest { - private ProductBusinessLogic createTestSubject() { - return new ProductBusinessLogic(); - } - - @Test - public void testValidateProductNameExists() throws Exception { - ProductBusinessLogic testSubject; - String productName = ""; - String userId = ""; - Either, ResponseFormat> result; - - // default test - testSubject = createTestSubject(); - } - - @Test - public void testSetDeploymentArtifactsPlaceHolder() throws Exception { - ProductBusinessLogic testSubject; - Component component = null; - User user = null; - - // default test - testSubject = createTestSubject(); - testSubject.setDeploymentArtifactsPlaceHolder(component, user); + private Product product; + private User user; + private List contacts; + private List tags; + + private String pId; + private String pName; + private String uId; + private String pCode; + private String pIcon; + private String desc; + private String role; + + @InjectMocks + private ProductBusinessLogic productBusinessLogic; + + @Mock + private ToscaOperationFacade toscaOperationFacade; + + @Mock + private TitanDao titanDao; + + @Mock + private ValidationUtils validationUtils; + + @Mock + private ComponentsUtils componentsUtils; + + @Mock + private IGraphLockOperation iGraphLockOperation; + + @Mock + private UserValidations userValidations; + + @Mock + private IElementOperation elementOperation; + + @Before + public void setUp() { + productBusinessLogic = new ProductBusinessLogic(); + MockitoAnnotations.initMocks(this); + product = new Product(); + user = new User(); + contacts = new ArrayList<>(); + tags = new ArrayList<>(); + + pName = "product1"; + pId = "productId"; + uId = "userId"; + pCode = "productCode"; + pIcon = "projectIcon"; + desc = "Testing Product Business Logic"; + role = "PROJECT_MANAGER"; + + user.setUserId(uId); + user.setRole(role); } @Test - public void testDeleteMarkedComponents() throws Exception { - ProductBusinessLogic testSubject; - Either, ResponseFormat> result; + public void testCreateProduct_givenValidProductAndUser_thenReturnsProduct() { + product.setName(pName); + product.setFullName("avengers"); + product.setInvariantUUID("ABCD1234"); + product.setContacts(getContacts()); + product.setTags(getTags()); + product.setIcon(pIcon); + product.setProjectCode(pCode); + product.setDescription(desc); + + when(userValidations.validateUserNotEmpty(Mockito.any(User.class), Mockito.anyString())) + .thenReturn(user); + when(userValidations.validateUserExists(Mockito.anyString(), Mockito.anyString(), Mockito.anyBoolean())) + .thenReturn(user); + when(toscaOperationFacade.validateComponentNameExists(Mockito.anyString(), Mockito.any(), Mockito.any(ComponentTypeEnum.class))) + .thenReturn(Either.left(Boolean.FALSE)); + when(iGraphLockOperation.lockComponentByName(Mockito.any(), Mockito.any(NodeTypeEnum.class))) + .thenReturn(StorageOperationStatus.OK); + when(toscaOperationFacade.createToscaComponent(any(org.openecomp.sdc.be.model.Product.class))) + .thenReturn(Either.left(product)); + Either result = productBusinessLogic.createProduct(product, user); + assertTrue(result.isLeft()); + Product returnedProduct = (Product) result.left().value(); + + assertEquals(product.getFullName(), returnedProduct.getFullName()); - // default test - testSubject = createTestSubject(); - } - @Test - public void testGetComponentInstanceBL() throws Exception { - ProductBusinessLogic testSubject; - ComponentInstanceBusinessLogic result; - - // default test - testSubject = createTestSubject(); - + @Test(expected = ComponentException.class) + public void testCreateProduct_givenEmptyUserId_thenReturnsException() { + when(userValidations.validateUserNotEmpty(Mockito.any(User.class), Mockito.anyString())) + .thenThrow(new ComponentException(new ResponseFormat())); + productBusinessLogic.createProduct(product, user); } - @Test - public void testGetComponentInstancesFilteredByPropertiesAndInputs() throws Exception { - ProductBusinessLogic testSubject; - String componentId = ""; - ComponentTypeEnum componentTypeEnum = null; - String userId = ""; - String searchText = ""; - Either, ResponseFormat> result; - - // default test - testSubject = createTestSubject(); - + @Test(expected = ComponentException.class) + public void testCreateProduct_givenUnknownUser_thenReturnsException() { + ComponentException componentException = new ComponentException(ActionStatus.USER_NOT_FOUND); + when(userValidations.validateUserNotEmpty(any(User.class), anyString())) + .thenReturn(user); + when(userValidations.validateUserExists(anyString(), anyString(), anyBoolean())) + .thenThrow(componentException); + productBusinessLogic.createProduct(product, user); } - @Test - public void testGetCacheManagerOperation() throws Exception { - ProductBusinessLogic testSubject; - ICacheMangerOperation result; - - // default test - testSubject = createTestSubject(); - + @Test(expected = ComponentException.class) + public void testCreateProduct_givenInvalidUserRole_thenReturnsException() { + user.setRole("CREATOR"); + doThrow(new ComponentException(new ResponseFormat())).when(userValidations).validateUserRole(any(), anyList()); + assertTrue(productBusinessLogic.createProduct(product, user).isRight()); } @Test - public void testSetCacheManagerOperation() throws Exception { - ProductBusinessLogic testSubject; - ICacheMangerOperation cacheManagerOperation = null; - - // default test - testSubject = createTestSubject(); - testSubject.setCacheManagerOperation(cacheManagerOperation); + public void testCreateProduct_givenProductIsNull_thenReturnsError() { + product = null; + assertTrue(productBusinessLogic.createProduct(product, user).isRight()); } @Test - public void testGetUiComponentDataTransferByComponentId() throws Exception { - ProductBusinessLogic testSubject; - String componentId = ""; - List dataParamsToReturn = null; - Either result; - - // default test - testSubject = createTestSubject(); - + public void testCreateProduct_givenInvalidProductFullNames_thenReturnsErrors() { + List invalidProductNames = new ArrayList<>(); + invalidProductNames.add(null); + invalidProductNames.add("~~"); + invalidProductNames.add("yo"); + invalidProductNames.add("infinity"); + when(toscaOperationFacade.validateComponentNameExists(anyString(), any(), any(ComponentTypeEnum.class))) + .thenReturn(Either.left(Boolean.TRUE)); + for (String s : invalidProductNames) { + product.setName(s); + assertTrue(productBusinessLogic.createProduct(product, user).isRight()); + } } - @Test - public void testCreateProduct() throws Exception { - ProductBusinessLogic testSubject; - Product product = null; - User user = null; - Either result; - - // test 1 - testSubject = createTestSubject(); - product = null; - + public void testValidateProductName_givenValidName_thenReturnsSuccessful() { + when(userValidations.validateUserExists(anyString(), anyString(), anyBoolean())) + .thenReturn(user); + when(toscaOperationFacade.validateComponentNameUniqueness(eq(pName), any(), any(ComponentTypeEnum.class))) + .thenReturn(Either.left(Boolean.TRUE)); + + Map result = productBusinessLogic.validateProductNameExists(pName, uId).left().value(); + assertEquals(Boolean.TRUE, result.get("isValid")); } - @Test - public void testCheckUnupdatableProductFields() throws Exception { - ProductBusinessLogic testSubject; - Product product = null; - - // default test - testSubject = createTestSubject(); + public void testValidateProductName_givenInvalidName_thenReturnsError() { + String invalidProductName = "~~"; + when(userValidations.validateUserExists(anyString(), anyString(), anyBoolean())) + .thenReturn(user); + when(toscaOperationFacade.validateComponentNameUniqueness(eq(invalidProductName), any(), any(ComponentTypeEnum.class))) + .thenReturn(Either.left(Boolean.FALSE)); + Map result = productBusinessLogic.validateProductNameExists(invalidProductName, uId).left().value(); + assertEquals(Boolean.FALSE, result.get("isValid")); } - @Test - public void testValidateProductBeforeCreate() throws Exception { - ProductBusinessLogic testSubject; - Product product = null; - User user = null; - AuditingActionEnum actionEnum = null; - Either result; - - // default test - testSubject = createTestSubject(); - + public void testValidateProductName_givenNameUniquenessCheckFails_thenReturnsError() { + when(userValidations.validateUserExists(anyString(), anyString(), anyBoolean())) + .thenReturn(user); + when(toscaOperationFacade.validateComponentNameUniqueness(eq(pName), any(), any(ComponentTypeEnum.class))) + .thenReturn(Either.right(StorageOperationStatus.ENTITY_ALREADY_EXISTS)); + assertTrue(productBusinessLogic.validateProductNameExists(pName, uId).isRight()); } - @Test - public void testValidateProductFieldsBeforeCreate() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product product = null; - AuditingActionEnum actionEnum = null; - Either result; - - // default test - testSubject = createTestSubject(); - + public void testGetProduct_givenValidProductIdAndUser_thenReturnsSuccessful() { + when(toscaOperationFacade.getToscaElement(eq(pName))) + .thenReturn(Either.left(product)); + assertTrue(productBusinessLogic.getProduct(pName, user).isLeft()); } - @Test - public void testValidateAndUpdateProductContactsList() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product product = null; - AuditingActionEnum actionEnum = null; - Either result; - - // default test - testSubject = createTestSubject(); - + public void testGetProduct_givenInvalidProductId_thenReturnsError() { + when(toscaOperationFacade.getToscaElement(eq(pName))) + .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND)); + assertTrue(productBusinessLogic.getProduct(pName, user).isRight()); } - @Test - public void testValidateGrouping() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product product = null; - AuditingActionEnum actionEnum = null; - Either result; - - // default test - testSubject = createTestSubject(); - + public void testDeleteProduct_givenValidProductIdAndUser_thenReturnsSuccessful() { + when(toscaOperationFacade.deleteToscaComponent(pId)) + .thenReturn(Either.left(product)); + assertTrue(productBusinessLogic.deleteProduct(pId, user).isLeft()); } - @Test - public void testGetProduct() throws Exception { - ProductBusinessLogic testSubject; - String productId = ""; - User user = null; - Either result; - - // default test - testSubject = createTestSubject(); - + public void testDeleteProduct_givenInvalidProductId_thenReturnsError() { + when(toscaOperationFacade.deleteToscaComponent(pId)) + .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND)); + assertTrue(productBusinessLogic.deleteProduct(pId, user).isRight()); } - @Test - public void testDeleteProduct() throws Exception { - ProductBusinessLogic testSubject; - String productId = ""; - User user = null; - Either result; - - // default test - testSubject = createTestSubject(); - + public void testUpdateProductMetadata_givenValidProductAndUser_thenReturnsSuccessful() { + String componentId = "component1"; + String projectName = "Product1"; + String version = "2.0"; + String lifecycleState = "NOT_CERTIFIED_CHECKOUT"; + String uniqueId = "pUniqueId"; + + Product product = new Product(); + ProductMetadataDataDefinition productMetadataDataDefinition = new ProductMetadataDataDefinition(); + ComponentMetadataDefinition componentMetadataDefinition = new ComponentMetadataDefinition(productMetadataDataDefinition); + CategoryDefinition categoryDefinition = new CategoryDefinition(); + SubCategoryDefinition subCategoryDefinition = new SubCategoryDefinition(); + GroupingDefinition groupingDefinition = new GroupingDefinition(); + + List categoryDefinitionList = new ArrayList<>(); + List subCategoryDefinitionList = new ArrayList<>(); + List groupingDefinitionsList = new ArrayList<>(); + + categoryDefinition.setName("cat1"); + subCategoryDefinition.setName("subCat1"); + groupingDefinition.setName("subCatGroup1"); + + groupingDefinitionsList.add(groupingDefinition); + subCategoryDefinition.setGroupings(groupingDefinitionsList); + subCategoryDefinitionList.add(subCategoryDefinition); + categoryDefinition.setSubcategories(subCategoryDefinitionList); + categoryDefinitionList.add(categoryDefinition); + + productMetadataDataDefinition.setFullName(projectName); + productMetadataDataDefinition.setName(projectName); + productMetadataDataDefinition.setState(lifecycleState); + productMetadataDataDefinition.setUniqueId(uniqueId); + productMetadataDataDefinition.setComponentType(ComponentTypeEnum.PRODUCT); + + product.setMetadataDefinition(componentMetadataDefinition); + product.setLastUpdaterUserId(uId); + product.setDescription(desc); + product.setVersion(version); + product.setProjectCode(pCode); + product.setIcon(pIcon); + product.setCategories(categoryDefinitionList); + product.setContacts(contacts); + product.setTags(tags); + + when(userValidations.validateUserExists(eq(uId), anyString(), anyBoolean())) + .thenReturn(user); + when(toscaOperationFacade.getToscaElement(eq(componentId))) + .thenReturn(Either.left(product)); + when(toscaOperationFacade.getToscaElement(eq(componentId), any(JsonParseFlagEnum.class))) + .thenReturn(Either.left(product)); + when(elementOperation.getAllProductCategories()) + .thenReturn(Either.left(categoryDefinitionList)); + when(iGraphLockOperation.lockComponent(anyString(), any(NodeTypeEnum.class))) + .thenReturn(StorageOperationStatus.OK); + when(toscaOperationFacade.updateToscaElement(any(Product.class))) + .thenReturn(Either.left(product)); + + assertTrue(productBusinessLogic.updateProductMetadata(componentId, product, user).isLeft()); } - @Test - public void testValidateProductFullNameAndCleanup() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product product = null; - AuditingActionEnum actionEnum = null; - Either result; - - // default test - testSubject = createTestSubject(); - + public void testUpdateProductMetadata_givenUpdateProductNull_thenReturnsError() { + Product updateProduct = null; + String productId = null; + assertTrue(productBusinessLogic.updateProductMetadata(productId, updateProduct, user).isRight()); } - @Test - public void testValidateProductNameAndCleanup() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product product = null; - AuditingActionEnum actionEnum = null; - Either result; - - // default test - testSubject = createTestSubject(); + public void testUpdateProductMetadata_givenProductDoesNotExist_thenReturnsError() { + String productId = "product1"; + when(toscaOperationFacade.getToscaElement(eq(productId))) + .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND)); + assertTrue(productBusinessLogic.updateProductMetadata(productId, product, user).isRight()); } - @Test - public void testValidateTagsListAndRemoveDuplicates() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product product = null; - String oldProductName = ""; - AuditingActionEnum actionEnum = null; - Either result; - - // default test - testSubject = createTestSubject(); - } + public void testUpdateProductMetada_givenUserRestricted_thenReturnsError() { - - @Test - public void testUpdateProductMetadata() throws Exception { - ProductBusinessLogic testSubject; - String productId = ""; - Product updatedProduct = null; - User user = null; - Either result; - - // test 1 - testSubject = createTestSubject(); - updatedProduct = null; - } + ProductMetadataDataDefinition productMetadataDataDefinition = new ProductMetadataDataDefinition(); + productMetadataDataDefinition.setLifecycleState("CERTIFIED"); + ComponentMetadataDefinition componentMetadataDefinition = new ComponentMetadataDefinition(productMetadataDataDefinition); + product.setMetadataDefinition(componentMetadataDefinition); - - @Test - public void testValidateAndUpdateProductMetadata() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product currentProduct = null; - Product updatedProduct = null; - Either result; - - // default test - testSubject = createTestSubject(); - - } - - @Test - public void testValidateAndUpdateProductName() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product currentProduct = null; - Product updatedProduct = null; - Either result; - - // default test - testSubject = createTestSubject(); - + when(userValidations.validateUserExists(eq(uId), anyString(), anyBoolean())) + .thenReturn(user); + when(toscaOperationFacade.getToscaElement(eq(pId))) + .thenReturn(Either.left(product)); + when(toscaOperationFacade.getToscaElement(eq(pId), eq(JsonParseFlagEnum.ParseMetadata))) + .thenReturn(Either.left(product)); + assertTrue(productBusinessLogic.updateProductMetadata(pId, product, user).isRight()); } - - @Test - public void testValidateAndUpdateFullName() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product currentProduct = null; - Product updatedProduct = null; - Either result; - - // default test - testSubject = createTestSubject(); - - } - @Test - public void testValidateAndUpdateCategory() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product currentProduct = null; - Product updatedProduct = null; - Either result; - - // default test - testSubject = createTestSubject(); - - } + public void testGetProductByNameAndVersion_givenValidNameAndVersion_thenReturnsSuccessful() { + String productVersion = "2.0"; - - @Test - public void testValidateAndUpdateContactList() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product currentProduct = null; - Product updatedProduct = null; - Either result; - - // default test - testSubject = createTestSubject(); - + when(toscaOperationFacade.getComponentByNameAndVersion(eq(ComponentTypeEnum.PRODUCT), eq(pName), eq(productVersion))) + .thenReturn(Either.left(product)); + assertTrue(productBusinessLogic.getProductByNameAndVersion(pName, productVersion, uId).isLeft()); } - @Test - public void testValidateAndUpdateTags() throws Exception { - ProductBusinessLogic testSubject; - User user = null; - Product currentProduct = null; - Product updatedProduct = null; - Either result; - - // default test - testSubject = createTestSubject(); - + public void testGetProductByNameAndVersion_givenInvalidDetails_thenReturnsError() { + String productVersion = "2.0"; + when(toscaOperationFacade.getComponentByNameAndVersion(eq(ComponentTypeEnum.PRODUCT), eq(pName), eq(productVersion))) + .thenReturn(Either.right(StorageOperationStatus.NOT_FOUND)); + assertTrue(productBusinessLogic.getProductByNameAndVersion(pName, productVersion, uId).isRight()); } - - @Test - public void testValidateTagPattern() throws Exception { - ProductBusinessLogic testSubject; - String tag = ""; - boolean result; - - // default test - testSubject = createTestSubject(); - + private List getContacts() { + contacts.add("user1"); + return contacts; } - - @Test - public void testGetProductByNameAndVersion() throws Exception { - ProductBusinessLogic testSubject; - String productName = ""; - String productVersion = ""; - String userId = ""; - Either result; - - // default test - testSubject = createTestSubject(); - + private List getTags() { + tags.add("product1"); + return tags; } } \ No newline at end of file diff --git a/catalog-be/src/test/java/org/openecomp/sdc/be/components/upgrade/UpgradeBusinessLogicTest.java b/catalog-be/src/test/java/org/openecomp/sdc/be/components/upgrade/UpgradeBusinessLogicTest.java new file mode 100644 index 0000000000..ea9095fd11 --- /dev/null +++ b/catalog-be/src/test/java/org/openecomp/sdc/be/components/upgrade/UpgradeBusinessLogicTest.java @@ -0,0 +1,307 @@ +/* + * - + * * ============LICENSE_START======================================================= + * * Copyright (C) 2019 Nordix Foundation. + * * ================================================================================ + * * 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. + * * + * * SPDX-License-Identifier: Apache-2.0 + * * ============LICENSE_END========================================================= + * + */ + +package org.openecomp.sdc.be.components.upgrade; + +import fj.data.Either; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic; +import org.openecomp.sdc.be.components.lifecycle.LifecycleBusinessLogic; +import org.openecomp.sdc.be.components.lifecycle.LifecycleChangeInfoWithAction; +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.datatypes.components.ResourceMetadataDataDefinition; +import org.openecomp.sdc.be.datatypes.components.ServiceMetadataDataDefinition; +import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum; +import org.openecomp.sdc.be.datatypes.enums.JsonPresentationFields; +import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum; +import org.openecomp.sdc.be.impl.ComponentsUtils; +import org.openecomp.sdc.be.model.Component; +import org.openecomp.sdc.be.model.ComponentDependency; +import org.openecomp.sdc.be.model.ComponentInstance; +import org.openecomp.sdc.be.model.ComponentInstanceProperty; +import org.openecomp.sdc.be.model.ComponentParametersView; +import org.openecomp.sdc.be.model.LifeCycleTransitionEnum; +import org.openecomp.sdc.be.model.LifecycleStateEnum; +import org.openecomp.sdc.be.model.Resource; +import org.openecomp.sdc.be.model.ResourceMetadataDefinition; +import org.openecomp.sdc.be.model.Service; +import org.openecomp.sdc.be.model.ServiceMetadataDefinition; +import org.openecomp.sdc.be.model.User; +import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade; +import org.openecomp.sdc.be.model.jsontitan.operations.UpgradeOperation; +import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus; +import org.openecomp.sdc.be.user.Role; +import org.openecomp.sdc.exception.ResponseFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.when; + + +public class UpgradeBusinessLogicTest { + + private static final String COMPONENT_ID = "componentId"; + private static final String USER_ID = "admin123"; + private static final String SERVICE_ID = "service01"; + private static final String RESOURCE_ID = "resource01"; + + private User user; + private Resource resource; + private Service service; + private ResourceMetadataDefinition resourceMetadataDefinition; + private ResourceMetadataDataDefinition resourceMetadataDataDefinition; + private ServiceMetadataDefinition serviceMetadataDefinition; + private ServiceMetadataDataDefinition serviceMetadataDataDefinition; + + @Mock + private LifecycleBusinessLogic lifecycleBusinessLogic; + + @Mock + private ComponentInstanceBusinessLogic componentInstanceBusinessLogic; + + @Mock + private UserValidations userValidations; + + @Mock + private ToscaOperationFacade toscaOperationFacade; + + @Mock + private ComponentsUtils componentsUtils; + + @Mock + private UpgradeOperation upgradeOperation; + + @Mock + private TitanDao titanDao; + + @InjectMocks + private UpgradeBusinessLogic upgradeBusinessLogic; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + + upgradeBusinessLogic = new UpgradeBusinessLogic(lifecycleBusinessLogic, componentInstanceBusinessLogic, + userValidations, toscaOperationFacade, componentsUtils, upgradeOperation, titanDao); + + user = new User(); + user.setRole(Role.ADMIN.name()); + user.setUserId(USER_ID); + + resourceMetadataDataDefinition = new ResourceMetadataDataDefinition(); + resourceMetadataDefinition = new ResourceMetadataDefinition(resourceMetadataDataDefinition); + serviceMetadataDataDefinition = new ServiceMetadataDataDefinition(); + serviceMetadataDefinition = new ServiceMetadataDefinition(serviceMetadataDataDefinition); + + resource = new Resource(resourceMetadataDefinition); + service = new Service(serviceMetadataDefinition); + + when(userValidations.validateUserExists(eq(user.getUserId()), anyString(), anyBoolean())) + .thenReturn(user); + } + + @Test + public void testAutomatedUpgrade_givenValidResource_returnsSuccessful() { + + resourceMetadataDataDefinition.setHighestVersion(true); + resourceMetadataDataDefinition.setLifecycleState(LifecycleStateEnum.CERTIFIED.name()); + resourceMetadataDataDefinition.setComponentType(ComponentTypeEnum.RESOURCE); + resourceMetadataDataDefinition.setResourceType(ResourceTypeEnum.VF); + + when(toscaOperationFacade.getToscaFullElement(anyString())) + .thenReturn(Either.left(resource)); + + UpgradeStatus automatedUpgradeStatus = upgradeBusinessLogic.automatedUpgrade(COMPONENT_ID, getRequests(), user.getUserId()); + assertEquals(ActionStatus.OK, automatedUpgradeStatus.getStatus()); + } + + @Test + public void testAutomatedUpgrade_givenResourceIsNotVFType_returnsUnsuccessful() { + resourceMetadataDataDefinition.setResourceType(ResourceTypeEnum.PNF); + resourceMetadataDataDefinition.setHighestVersion(true); + resourceMetadataDataDefinition.setLifecycleState(LifecycleStateEnum.CERTIFIED.name()); + when(toscaOperationFacade.getToscaFullElement(COMPONENT_ID)) + .thenReturn(Either.left(resource)); + + UpgradeStatus automatedUpgradeStatus = upgradeBusinessLogic.automatedUpgrade( + COMPONENT_ID, getRequests(), user.getUserId()); + + assertEquals("Status should be GENERAL Error ", ActionStatus.GENERAL_ERROR, + automatedUpgradeStatus.getStatus()); + } + + @Test + public void testAutomatedUpgrade_givenResourceVersionIsNotHighest_thenReturnsError() { + ResponseFormat responseFormat = new ResponseFormat(); + responseFormat.setStatus(001); + + resourceMetadataDataDefinition.setHighestVersion(false); + + when(toscaOperationFacade.getToscaFullElement(COMPONENT_ID)) + .thenReturn(Either.left(resource)); + when(componentsUtils.getResponseFormat(eq(ActionStatus.COMPONENT_IS_NOT_HIHGEST_CERTIFIED), any())) + .thenReturn(responseFormat); + + UpgradeStatus status = upgradeBusinessLogic.automatedUpgrade(COMPONENT_ID, null, user.getUserId()); + + assertEquals(responseFormat.getStatus(), status.getError().getStatus()); + } + + @Test + public void testAutomatedUpgrade_givenInvalidResourceId_thenReturnsError() { + + String invalidResourceId = "invalidResourceId"; + ResponseFormat stubResponseFormat = new ResponseFormat(); + stubResponseFormat.setStatus(001); + + when(toscaOperationFacade.getToscaFullElement(invalidResourceId)) + .thenReturn(Either.right(StorageOperationStatus.GENERAL_ERROR)); + when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.GENERAL_ERROR)) + .thenReturn(ActionStatus.RESOURCE_NOT_FOUND); + + when(componentsUtils.getResponseFormatByResource(eq(ActionStatus.RESOURCE_NOT_FOUND), anyString())) + .thenReturn(stubResponseFormat); + + + UpgradeStatus status = upgradeBusinessLogic.automatedUpgrade(invalidResourceId, + null, user.getUserId()); + assertEquals(stubResponseFormat.getStatus(), status.getError().getStatus()); + } + + @Test + public void testAutomatedUpgrade_givenResourceIsArchived_thenReturnsError() { + ResponseFormat responseFormat = new ResponseFormat(); + responseFormat.setStatus(001); + + resourceMetadataDataDefinition.setHighestVersion(true); + resourceMetadataDataDefinition.setLifecycleState(LifecycleStateEnum.CERTIFIED.name()); + resourceMetadataDataDefinition.setArchived(true); + + when(toscaOperationFacade.getToscaFullElement(COMPONENT_ID)) + .thenReturn(Either.left(resource)); + when(componentsUtils.getResponseFormat(eq(ActionStatus.COMPONENT_IS_ARCHIVED), any())) + .thenReturn(responseFormat); + + UpgradeStatus status = upgradeBusinessLogic.automatedUpgrade(COMPONENT_ID, null, user.getUserId()); + + assertEquals(responseFormat.getStatus(), status.getError().getStatus()); + } + + @Test + public void testAutomatedUpgrade_givenService_thenReturnsSuccessful() { + user.setRole(Role.TESTER.name()); + + List stubInstanceIdsList = new ArrayList<>(); + + List stubComponentInstanceList = new ArrayList<>(); + ComponentInstance componentInstance = new ComponentInstance(); + componentInstance.setToscaPresentationValue(JsonPresentationFields.CI_IS_PROXY, Boolean.TRUE); + componentInstance.setSourceModelUid("sm1"); + stubComponentInstanceList.add(componentInstance); + + List stubComponentPropertyList = new ArrayList<>(); + ComponentInstanceProperty componentInstanceProperty = new ComponentInstanceProperty(); + stubComponentPropertyList.add(componentInstanceProperty); + + Map> stubComponentInstanceProperties = new HashMap<>(); + stubComponentInstanceProperties.put("prop1", stubComponentPropertyList); + service.setComponentInstancesProperties(stubComponentInstanceProperties); + service.setComponentInstances(stubComponentInstanceList); + + serviceMetadataDataDefinition.setHighestVersion(true); + serviceMetadataDataDefinition.setLifecycleState(LifecycleStateEnum.CERTIFIED.name()); + serviceMetadataDataDefinition.setComponentType(ComponentTypeEnum.SERVICE); + serviceMetadataDataDefinition.setUniqueId("sUniqueId1"); + serviceMetadataDataDefinition.setInvariantUUID("iid"); + serviceMetadataDataDefinition.setVersion("1.0"); + + + ServiceMetadataDataDefinition serviceMetadataDataDefinition2 = new ServiceMetadataDataDefinition(); + serviceMetadataDataDefinition2.setLifecycleState(LifecycleStateEnum.CERTIFIED.name()); + serviceMetadataDataDefinition2.setComponentType(ComponentTypeEnum.SERVICE); + serviceMetadataDataDefinition2.setUniqueId("sUniqueId2"); + serviceMetadataDataDefinition2.setInvariantUUID("iid"); + serviceMetadataDataDefinition2.setVersion("2.0"); + + Service service2 = new Service(new ServiceMetadataDefinition(serviceMetadataDataDefinition2)); + + when(toscaOperationFacade.getToscaFullElement(anyString())) + .thenReturn(Either.left(service)); + + when(toscaOperationFacade.getToscaElement(RESOURCE_ID)) + .thenReturn(Either.left(service)); + when(toscaOperationFacade.getToscaElement(eq(componentInstance.getSourceModelUid()), any(ComponentParametersView.class))) + .thenReturn(Either.left(service2)); + + doReturn(Either.left(service)).when(lifecycleBusinessLogic).changeComponentState( + any(ComponentTypeEnum.class), any(), any(User.class), + any(LifeCycleTransitionEnum.class), any(LifecycleChangeInfoWithAction.class), anyBoolean(), anyBoolean()); + + when(upgradeOperation.getInstanceIdFromAllottedEdge(any(), any())) + .thenReturn(stubInstanceIdsList); + when(toscaOperationFacade.updateComponentInstancePropsToComponent(any(Map.class), any())) + .thenReturn(Either.left(stubComponentInstanceProperties)); + when(componentInstanceBusinessLogic.changeInstanceVersion(any(Component.class), any(ComponentInstance.class), any(ComponentInstance.class), any(User.class), any(ComponentTypeEnum.class))) + .thenReturn(Either.left(componentInstance)); + + UpgradeStatus status = upgradeBusinessLogic.automatedUpgrade(COMPONENT_ID, getRequests(), user.getUserId()); + Assert.assertEquals(ActionStatus.OK, status.getStatus()); + } + + @Test + public void testGetComponentDependencies_givenValidComponentId_thenReturnsSuccessful() { + String componentId = "componentId"; + List stubComponentDependencies + = new ArrayList<>(); + stubComponentDependencies.add(new ComponentDependency()); + + when(upgradeOperation.getComponentDependencies(componentId)) + .thenReturn(Either.left(stubComponentDependencies)); + + assertEquals("should contain one component dependency", 1, + upgradeBusinessLogic.getComponentDependencies(componentId, user.getUserId()).left().value().size()); + } + + private List getRequests() { + List stubRequests = new ArrayList<>(); + UpgradeRequest request1 = new UpgradeRequest(); + request1.setServiceId(SERVICE_ID); + request1.setResourceId(RESOURCE_ID); + stubRequests.add(request1); + return stubRequests; + } +} \ No newline at end of file -- cgit 1.2.3-korg