re base code
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / ElementBLTest.java
1 package org.openecomp.sdc.be.components.impl;
2
3 import fj.data.Either;
4 import org.apache.commons.lang3.tuple.ImmutablePair;
5 import org.junit.Before;
6 import org.junit.Test;
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;
32
33 import java.util.ArrayList;
34 import java.util.List;
35 import java.util.Map;
36
37 import static org.assertj.core.api.Assertions.assertThat;
38 import static org.mockito.ArgumentMatchers.eq;
39 import static org.mockito.Mockito.when;
40
41 /**
42  * Created by chaya on 12/7/2017.
43  */
44 @RunWith(MockitoJUnitRunner.class)
45 public class ElementBLTest {
46
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();
56
57     @Mock
58     private TitanGenericDao titanGenericDao;
59
60     @Mock
61     private ToscaOperationFacade toscaOperationFacade;
62
63     @Mock
64     private TitanDao titanDao;
65
66     @InjectMocks
67     private ElementBusinessLogic elementBusinessLogic;
68
69     @Before
70     public void setup() {
71
72         initCategoriesList();
73         initServicesList();
74         initResourceslist();
75
76         when(titanDao.commit()).thenReturn(TitanOperationStatus.OK);
77     }
78
79     private void initCategoriesList() {
80         CategoryData categoryData = new CategoryData(NodeTypeEnum.ServiceNewCategory);
81         categoryData.getCategoryDataDefinition().setUniqueId(CATEGORY_UNIQUE_ID);
82         categories.add(categoryData);
83     }
84
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));
93
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));
101     }
102
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));
111
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));
119     }
120
121     @Test
122     public void testFetchElementsByCategoryName_filterDeleted() {
123         ArgumentCaptor<Map> criteriaCapture = ArgumentCaptor.forClass(Map.class);
124
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));
132
133         Either<List<Object>, StorageOperationStatus> elementsByCategoryEither =
134                 elementBusinessLogic.fetchByCategoryOrSubCategoryName(CATAGORY_NAME, NodeTypeEnum.ServiceNewCategory,
135                         NodeTypeEnum.Service, false, ServiceMetadataData.class, null);
136
137         List<Object> elementsByCategory = elementsByCategoryEither.left().value();
138         assertThat(elementsByCategory.get(0)).isSameAs(notDeletedService);
139         assertThat(elementsByCategory.size()).isEqualTo(1);
140         verifyCriteriaProperties(criteriaCapture);
141     }
142
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));
147     }
148
149     @Test
150     public void testFetchResourcesBySubcategoryUid_filterDeleted() {
151
152         when(titanGenericDao.getParentNodes(UniqueIdBuilder.getKeyByNodeType(NodeTypeEnum.ResourceSubcategory),
153                 CATEGORY_UNIQUE_ID, GraphEdgeLabels.CATEGORY, NodeTypeEnum.Resource, ResourceMetadataData.class))
154                 .thenReturn(Either.left(resources));
155
156         when(toscaOperationFacade.getToscaElement(SERVICE_NOT_DELETED_ID, JsonParseFlagEnum.ParseMetadata))
157                 .thenReturn(Either.left(notDeletedResource));
158
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);
164     }
165 }