1 package org.openecomp.sdc.be.components.impl;
4 import org.apache.commons.lang3.tuple.ImmutablePair;
5 import org.junit.Before;
7 import org.junit.runner.RunWith;
8 import org.mockito.ArgumentCaptor;
9 import org.mockito.InjectMocks;
10 import org.mockito.Mock;
11 import org.mockito.junit.MockitoJUnitRunner;
12 import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge;
13 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
14 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
15 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
16 import org.openecomp.sdc.be.dao.neo4j.GraphPropertiesDictionary;
17 import org.openecomp.sdc.be.dao.titan.TitanGenericDao;
18 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
19 import org.openecomp.sdc.be.datatypes.components.ComponentMetadataDataDefinition;
20 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
21 import org.openecomp.sdc.be.datatypes.components.ServiceMetadataDataDefinition;
22 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
23 import org.openecomp.sdc.be.model.Resource;
24 import org.openecomp.sdc.be.model.Service;
25 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
26 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
27 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
28 import org.openecomp.sdc.be.resources.data.ResourceMetadataData;
29 import org.openecomp.sdc.be.resources.data.ServiceMetadataData;
30 import org.openecomp.sdc.be.resources.data.category.CategoryData;
31 import org.openecomp.sdc.common.util.ValidationUtils;
33 import java.util.ArrayList;
34 import java.util.List;
37 import static org.assertj.core.api.Assertions.assertThat;
38 import static org.mockito.ArgumentMatchers.eq;
39 import static org.mockito.Mockito.when;
42 * Created by chaya on 12/7/2017.
44 @RunWith(MockitoJUnitRunner.class)
45 public class ElementBLTest {
47 private static final String CATAGORY_NAME = "categoryName";
48 private static final String CATEGORY_UNIQUE_ID = "catUniqueId";
49 private static final String SERVICE_NOT_DELETED_ID = "notDeletedId";
50 private static final String DELETED_SERVICE_ID = "deletedId";
51 private List<CategoryData> categories = new ArrayList<>();
52 private List<ImmutablePair<ServiceMetadataData, GraphEdge>> services = new ArrayList<>();
53 private List<ImmutablePair<ResourceMetadataData, GraphEdge>> resources = new ArrayList<>();
54 private Service notDeletedService = new Service();
55 private Resource notDeletedResource = new Resource();
58 private TitanGenericDao titanGenericDao;
61 private ToscaOperationFacade toscaOperationFacade;
64 private TitanDao titanDao;
67 private ElementBusinessLogic elementBusinessLogic;
76 when(titanDao.commit()).thenReturn(TitanOperationStatus.OK);
79 private void initCategoriesList() {
80 CategoryData categoryData = new CategoryData(NodeTypeEnum.ServiceNewCategory);
81 categoryData.getCategoryDataDefinition().setUniqueId(CATEGORY_UNIQUE_ID);
82 categories.add(categoryData);
85 private void initServicesList() {
86 ServiceMetadataData serviceNotDeleted = new ServiceMetadataData();
87 ComponentMetadataDataDefinition componentMetadataDataDefinition1 = new ServiceMetadataDataDefinition();
88 componentMetadataDataDefinition1.setIsDeleted(false);
89 componentMetadataDataDefinition1.setHighestVersion(true);
90 componentMetadataDataDefinition1.setUniqueId(SERVICE_NOT_DELETED_ID);
91 serviceNotDeleted.setMetadataDataDefinition(componentMetadataDataDefinition1);
92 services.add(new ImmutablePair<>(serviceNotDeleted, null));
94 ServiceMetadataData deletedService = new ServiceMetadataData();
95 ComponentMetadataDataDefinition componentMetadataDataDefinition2 = new ServiceMetadataDataDefinition();
96 componentMetadataDataDefinition2.setIsDeleted(true);
97 componentMetadataDataDefinition2.setHighestVersion(true);
98 componentMetadataDataDefinition2.setUniqueId(DELETED_SERVICE_ID);
99 deletedService.setMetadataDataDefinition(componentMetadataDataDefinition2);
100 services.add(new ImmutablePair<>(deletedService, null));
103 private void initResourceslist() {
104 ResourceMetadataData notDeletedResource = new ResourceMetadataData();
105 ComponentMetadataDataDefinition componentMetadataDataDefinition3 = new ResourceMetadataDataDefinition();
106 componentMetadataDataDefinition3.setIsDeleted(false);
107 componentMetadataDataDefinition3.setHighestVersion(true);
108 componentMetadataDataDefinition3.setUniqueId(SERVICE_NOT_DELETED_ID);
109 notDeletedResource.setMetadataDataDefinition(componentMetadataDataDefinition3);
110 resources.add(new ImmutablePair<>(notDeletedResource, null));
112 ResourceMetadataData deletedResource = new ResourceMetadataData();
113 ComponentMetadataDataDefinition componentMetadataDataDefinition4 = new ResourceMetadataDataDefinition();
114 componentMetadataDataDefinition4.setIsDeleted(true);
115 componentMetadataDataDefinition4.setHighestVersion(true);
116 componentMetadataDataDefinition4.setUniqueId(DELETED_SERVICE_ID);
117 deletedResource.setMetadataDataDefinition(componentMetadataDataDefinition4);
118 resources.add(new ImmutablePair<>(deletedResource, null));
122 public void testFetchElementsByCategoryName_filterDeleted() {
123 ArgumentCaptor<Map> criteriaCapture = ArgumentCaptor.forClass(Map.class);
125 when(titanGenericDao.getByCriteria(eq(NodeTypeEnum.ServiceNewCategory), criteriaCapture.capture(), eq(CategoryData.class)))
126 .thenReturn(Either.left(categories));
127 when(titanGenericDao.getParentNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ServiceNewCategory),
128 CATEGORY_UNIQUE_ID, GraphEdgeLabels.CATEGORY, NodeTypeEnum.Service, ServiceMetadataData.class))
129 .thenReturn(Either.left(services));
130 when(toscaOperationFacade.getToscaElement(SERVICE_NOT_DELETED_ID, JsonParseFlagEnum.ParseMetadata))
131 .thenReturn(Either.left(notDeletedService));
133 Either<List<Object>, StorageOperationStatus> elementsByCategoryEither =
134 elementBusinessLogic.fetchByCategoryOrSubCategoryName(CATAGORY_NAME, NodeTypeEnum.ServiceNewCategory,
135 NodeTypeEnum.Service, false, ServiceMetadataData.class, null);
137 List<Object> elementsByCategory = elementsByCategoryEither.left().value();
138 assertThat(elementsByCategory.get(0)).isSameAs(notDeletedService);
139 assertThat(elementsByCategory.size()).isEqualTo(1);
140 verifyCriteriaProperties(criteriaCapture);
143 private void verifyCriteriaProperties(ArgumentCaptor<Map> propsCapture) {
144 Map<String, Object> props = propsCapture.getValue();
145 assertThat(props.size()).isEqualTo(1);
146 assertThat(props.get(GraphPropertiesDictionary.NORMALIZED_NAME.getProperty())).isEqualTo(ValidationUtils.normalizeCategoryName4Uniqueness(CATAGORY_NAME));
150 public void testFetchResourcesBySubcategoryUid_filterDeleted() {
152 when(titanGenericDao.getParentNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceSubcategory),
153 CATEGORY_UNIQUE_ID, GraphEdgeLabels.CATEGORY, NodeTypeEnum.Resource, ResourceMetadataData.class))
154 .thenReturn(Either.left(resources));
156 when(toscaOperationFacade.getToscaElement(SERVICE_NOT_DELETED_ID, JsonParseFlagEnum.ParseMetadata))
157 .thenReturn(Either.left(notDeletedResource));
159 Either<List<Object>, StorageOperationStatus> resourcesBySubCategoryUidEither = elementBusinessLogic.fetchByCategoryOrSubCategoryUid(CATEGORY_UNIQUE_ID, NodeTypeEnum.ResourceSubcategory,
160 NodeTypeEnum.Resource, false, ResourceMetadataData.class, null);
161 List<Object> resourcesBySubCategoryUid = resourcesBySubCategoryUidEither.left().value();
162 assertThat(resourcesBySubCategoryUid.size()).isEqualTo(1);
163 assertThat(resourcesBySubCategoryUid.get(0)).isSameAs(notDeletedResource);