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
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.
16 * SPDX-License-Identifier: Apache-2.0
17 * ============LICENSE_END=========================================================
19 package org.openecomp.sdc.be.model.operations.impl;
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;
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;
58 @ExtendWith(MockitoExtension.class)
59 class AttributeOperationTest extends ModelTestBase {
62 private AttributeOperation attributeOperation;
65 private HealingJanusGraphGenericDao janusGraphGenericDao;
68 private DataTypeValidatorConverter dataTypeValidatorConverter;
71 public static void setupBeforeClass() {
77 attributeOperation = new AttributeOperation(janusGraphGenericDao);
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);
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));
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));
102 final var attributeDefinition = new AttributeDataDefinition();
103 assertFalse(attributeOperation.isAttributeTypeValid(attributeDefinition));
107 void isAttributeTypeValid_when_Null() {
108 assertFalse(attributeOperation.isAttributeTypeValid(null));
112 void isAttributeTypeValid_when_type_valid() {
113 final var attributeDefinition = new AttributeDataDefinition();
114 attributeDefinition.setType("string");
115 assertTrue(attributeOperation.isAttributeTypeValid(attributeDefinition));
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());
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());
137 void isAttributeDefaultValueValid() {
138 final var attributeDefinition = new AttributeDataDefinition();
139 attributeDefinition.setType("string");
140 final var result = attributeOperation.isAttributeDefaultValueValid(attributeDefinition, new HashMap<>());
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<>());
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);
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());
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);
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);