Improve test coverage
[sdc.git] / catalog-model / src / test / java / org / openecomp / sdc / be / model / operations / impl / AttributeOperationTest.java
1 /*
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021 Nordix Foundation
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  *
16  *  SPDX-License-Identifier: Apache-2.0
17  *  ============LICENSE_END=========================================================
18  */
19 package org.openecomp.sdc.be.model.operations.impl;
20
21 import static org.junit.jupiter.api.Assertions.assertEquals;
22 import static org.junit.jupiter.api.Assertions.assertFalse;
23 import static org.junit.jupiter.api.Assertions.assertNotNull;
24 import static org.junit.jupiter.api.Assertions.assertNull;
25 import static org.junit.jupiter.api.Assertions.assertTrue;
26 import static org.mockito.ArgumentMatchers.any;
27 import static org.mockito.ArgumentMatchers.eq;
28 import static org.mockito.Mockito.when;
29
30 import fj.data.Either;
31 import java.util.ArrayList;
32 import java.util.HashMap;
33 import java.util.List;
34 import org.apache.commons.lang3.tuple.ImmutablePair;
35 import org.junit.jupiter.api.BeforeAll;
36 import org.junit.jupiter.api.BeforeEach;
37 import org.junit.jupiter.api.Test;
38 import org.junit.jupiter.api.extension.ExtendWith;
39 import org.mockito.InjectMocks;
40 import org.mockito.Mock;
41 import org.mockito.junit.jupiter.MockitoExtension;
42 import org.openecomp.sdc.be.dao.graph.datatype.GraphEdge;
43 import org.openecomp.sdc.be.dao.graph.datatype.GraphNode;
44 import org.openecomp.sdc.be.dao.janusgraph.HealingJanusGraphGenericDao;
45 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
46 import org.openecomp.sdc.be.dao.neo4j.GraphEdgeLabels;
47 import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition;
48 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
49 import org.openecomp.sdc.be.datatypes.elements.SchemaDefinition;
50 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
51 import org.openecomp.sdc.be.model.DataTypeDefinition;
52 import org.openecomp.sdc.be.model.ModelTestBase;
53 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
54 import org.openecomp.sdc.be.model.tosca.validators.DataTypeValidatorConverter;
55 import org.openecomp.sdc.be.resources.data.DataTypeData;
56 import org.openecomp.sdc.be.resources.data.PropertyData;
57
58 @ExtendWith(MockitoExtension.class)
59 class AttributeOperationTest extends ModelTestBase {
60
61     @InjectMocks
62     private AttributeOperation attributeOperation;
63
64     @Mock
65     private HealingJanusGraphGenericDao janusGraphGenericDao;
66
67     @Mock
68     private DataTypeValidatorConverter dataTypeValidatorConverter;
69
70     @BeforeAll
71     public static void setupBeforeClass() {
72         ModelTestBase.init();
73     }
74
75     @BeforeEach
76     void setUp() {
77         attributeOperation = new AttributeOperation(janusGraphGenericDao);
78     }
79
80     @Test
81     void isAttributeTypeValid() {
82         final List<ImmutablePair<GraphNode, GraphEdge>> list = new ArrayList<>();
83         final GraphEdge edge = new GraphEdge();
84         final HashMap<String, Object> map = new HashMap<>();
85         map.put("name", "property");
86         edge.setProperties(map);
87         final ImmutablePair<GraphNode, GraphEdge> pairPropertyData = new ImmutablePair<>(new PropertyData(), edge);
88         list.add(pairPropertyData);
89         final ImmutablePair<GraphNode, GraphEdge> pairDataTypeData = new ImmutablePair<>(new DataTypeData(), edge);
90
91         when(janusGraphGenericDao.getNode(any(), any(), any())).thenReturn(Either.left(new DataTypeData()));
92         when(janusGraphGenericDao.getChildrenNodes(eq("uid"), eq("null.datatype"), any(GraphEdgeLabels.class), any(NodeTypeEnum.class), any()))
93             .thenReturn(Either.<List<ImmutablePair<GraphNode, GraphEdge>>, JanusGraphOperationStatus>left(list));
94         when(janusGraphGenericDao.getChild(eq("uid"), eq("null.datatype"), any(GraphEdgeLabels.class), any(NodeTypeEnum.class), any()))
95             .thenReturn(Either.<ImmutablePair<GraphNode, GraphEdge>, JanusGraphOperationStatus>left(pairDataTypeData));
96
97         when(janusGraphGenericDao.getChildrenNodes(eq("uid"), eq(null), any(GraphEdgeLabels.class), any(NodeTypeEnum.class), any()))
98             .thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
99         when(janusGraphGenericDao.getChild(eq("uid"), eq(null), any(GraphEdgeLabels.class), any(NodeTypeEnum.class), any()))
100             .thenReturn(Either.right(JanusGraphOperationStatus.GENERAL_ERROR));
101
102         final var attributeDefinition = new AttributeDataDefinition();
103         assertFalse(attributeOperation.isAttributeTypeValid(attributeDefinition));
104     }
105
106     @Test
107     void isAttributeTypeValid_when_Null() {
108         assertFalse(attributeOperation.isAttributeTypeValid(null));
109     }
110
111     @Test
112     void isAttributeTypeValid_when_type_valid() {
113         final var attributeDefinition = new AttributeDataDefinition();
114         attributeDefinition.setType("string");
115         assertTrue(attributeOperation.isAttributeTypeValid(attributeDefinition));
116     }
117
118     @Test
119     void isAttributeInnerTypeValid() {
120         final var attributeDefinition = new AttributeDataDefinition();
121         attributeDefinition.setType("string");
122         final var result = attributeOperation.isAttributeInnerTypeValid(attributeDefinition, new HashMap<>());
123         assertNotNull(result);
124         assertNull(result.getLeft());
125         assertFalse(result.getRight());
126     }
127
128     @Test
129     void isAttributeInnerTypeValid_when_null() {
130         final var result = attributeOperation.isAttributeInnerTypeValid(null, new HashMap<>());
131         assertNotNull(result);
132         assertNull(result.getLeft());
133         assertFalse(result.getRight());
134     }
135
136     @Test
137     void isAttributeDefaultValueValid() {
138         final var attributeDefinition = new AttributeDataDefinition();
139         attributeDefinition.setType("string");
140         final var result = attributeOperation.isAttributeDefaultValueValid(attributeDefinition, new HashMap<>());
141         assertTrue(result);
142     }
143
144     @Test
145     void isAttributeDefaultValueValid_when_list() {
146         final var attributeDefinition = new AttributeDataDefinition();
147         attributeDefinition.setType("list");
148         final SchemaDefinition schema = new SchemaDefinition();
149         schema.setProperty(new PropertyDataDefinition());
150         attributeDefinition.setSchema(schema);
151         final var result = attributeOperation.isAttributeDefaultValueValid(attributeDefinition, new HashMap<>());
152         assertTrue(result);
153     }
154
155     @Test
156     void validateAndUpdateAttributeValue() {
157         final var attributeDefinition = new AttributeDataDefinition();
158         attributeDefinition.setType("string");
159         attributeDefinition.setValue("new string");
160         final var result = attributeOperation.validateAndUpdateAttributeValue(attributeDefinition, "", new HashMap<>());
161         assertNotNull(result);
162     }
163
164     @Test
165     void validateAndUpdateAttributeValue_when_type_null() {
166         final var attributeDefinition = new AttributeDataDefinition();
167         attributeDefinition.setValue("[ 'test' : 123 ]");
168         final var result = attributeOperation.validateAndUpdateAttributeValue(attributeDefinition, "", new HashMap<>());
169         assertNotNull(result);
170         assertTrue(result.isRight());
171         assertFalse(result.right().value());
172     }
173
174     @Test
175     void validateAndUpdateAttribute() {
176         final var attributeDefinition = new AttributeDataDefinition();
177         attributeDefinition.setType("string");
178         final var result = attributeOperation.validateAndUpdateAttribute(attributeDefinition, new HashMap<>());
179         assertNotNull(result);
180         assertEquals(StorageOperationStatus.OK, result);
181     }
182
183     @Test
184     void validateAndUpdateAttribute_without_type() {
185         final var attributeDefinition = new AttributeDataDefinition();
186         attributeDefinition.setType("double");
187         final HashMap<String, DataTypeDefinition> dataTypes = new HashMap<>();
188         dataTypes.put("double", new DataTypeDefinition());
189         final var result = attributeOperation.validateAndUpdateAttribute(attributeDefinition, dataTypes);
190         assertNotNull(result);
191         assertEquals(StorageOperationStatus.OK, result);
192     }
193
194 }