Support complex types in artifact properties
[sdc.git] / catalog-model / src / test / java / org / openecomp / sdc / be / model / tosca / converters / ToscaValueBaseConverterTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2021 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.model.tosca.converters;
22
23 import static org.junit.jupiter.api.Assertions.assertEquals;
24 import static org.junit.jupiter.api.Assertions.assertFalse;
25 import static org.junit.jupiter.api.Assertions.assertNull;
26 import static org.junit.jupiter.api.Assertions.assertTrue;
27
28 import com.google.gson.JsonArray;
29 import com.google.gson.JsonObject;
30 import com.google.gson.JsonPrimitive;
31 import java.util.HashMap;
32 import java.util.LinkedList;
33 import java.util.List;
34 import java.util.Map;
35 import org.junit.jupiter.api.Test;
36
37
38 class ToscaValueBaseConverterTest {
39
40     private final ToscaValueBaseConverter converter = new ToscaValueBaseConverter();
41
42     @Test
43     void testJson2JavaPrimitive() {
44         JsonPrimitive prim1 = new JsonPrimitive(Boolean.FALSE);
45         Object res1 = converter.json2JavaPrimitive(prim1);
46         assertFalse((Boolean)res1);
47
48         JsonPrimitive prim2 = new JsonPrimitive("Test");
49         Object res2 = converter.json2JavaPrimitive(prim2);
50         assertEquals("Test", res2);
51
52         JsonPrimitive prim3 = new JsonPrimitive(3);
53         Object res3 = converter.json2JavaPrimitive(prim3);
54         assertEquals(3, (int) (Integer) res3);
55
56         JsonPrimitive prim4 = new JsonPrimitive(3.6);
57         Object res4 = converter.json2JavaPrimitive(prim4);
58         assertEquals(3.6, (Double) res4);
59     }
60
61     @Test
62     void testIsEmptyObjectValue() {
63         boolean res1 = ToscaValueBaseConverter.isEmptyObjectValue(null);
64         assertTrue(res1);
65
66         boolean res2 = ToscaValueBaseConverter.isEmptyObjectValue("");
67         assertTrue(res2);
68
69         boolean res3 = ToscaValueBaseConverter.isEmptyObjectValue(new HashMap<>());
70         assertTrue(res3);
71
72         boolean res4 = ToscaValueBaseConverter.isEmptyObjectValue(new LinkedList<>());
73         assertTrue(res4);
74
75         boolean res5 = ToscaValueBaseConverter.isEmptyObjectValue("test");
76         assertFalse(res5);
77     }
78
79     @Test
80     void testHandleComplexJsonValue() {
81         JsonObject innerObject = new JsonObject();
82         innerObject.addProperty("string", "stringValue");
83         innerObject.addProperty("int", 1);
84         innerObject.addProperty("float", 1.1);
85         innerObject.add("null", null);
86
87         JsonArray jsonArray1 = new JsonArray();
88         jsonArray1.add(innerObject);
89         jsonArray1.add(innerObject);
90         jsonArray1.add(innerObject);
91
92         JsonArray jsonArray2 = new JsonArray();
93         jsonArray2.add("value0");
94         jsonArray2.add("value1");
95         jsonArray2.add("value2");
96
97         JsonObject jsonObject = new JsonObject();
98         jsonObject.add("objectProperty", innerObject);
99         jsonObject.add("arrayProperty1", jsonArray1);
100         jsonObject.add("arrayProperty2", jsonArray2);
101         jsonObject.addProperty("stringProperty", "stringPropertyValue");
102
103         final Object resultingObject = converter.handleComplexJsonValue(jsonObject);
104         assertTrue(resultingObject instanceof Map);
105         final Map<String, Object> jsonObjectAsMap = (Map<String, Object>) resultingObject;
106         assertEquals(4, jsonObjectAsMap.keySet().size());
107         assertTrue(jsonObjectAsMap.containsKey("objectProperty"));
108         assertTrue(jsonObjectAsMap.containsKey("arrayProperty1"));
109         assertTrue(jsonObjectAsMap.containsKey("arrayProperty2"));
110         assertTrue(jsonObjectAsMap.containsKey("stringProperty"));
111
112         final String stringProperty = (String) jsonObjectAsMap.get("stringProperty");
113         assertEquals(jsonObject.get("stringProperty").getAsString(), stringProperty);
114
115         final Object arrayProperty1 = jsonObjectAsMap.get("arrayProperty1");
116         assertTrue(arrayProperty1 instanceof List);
117         final List<Object> arrayProperty1AsList = (List<Object>) arrayProperty1;
118         assertEquals(3, arrayProperty1AsList.size());
119         for (int i = 0; i < arrayProperty1AsList.size(); i++) {
120             final Object actualElement = arrayProperty1AsList.get(i);
121             assertTrue(actualElement instanceof Map);
122             final Map<String, Object> actualElementAsMap = (Map<String, Object>) actualElement;
123             final JsonObject expectedJsonObject = jsonArray1.get(i).getAsJsonObject();
124             assertEquals(expectedJsonObject.get("string").getAsString(), actualElementAsMap.get("string"));
125             assertEquals(expectedJsonObject.get("int").getAsInt(), actualElementAsMap.get("int"));
126             assertEquals(expectedJsonObject.get("float").getAsDouble(), actualElementAsMap.get("float"));
127             assertNull(actualElementAsMap.get("null"));
128         }
129
130         final Object arrayProperty2 = jsonObjectAsMap.get("arrayProperty2");
131         assertTrue(arrayProperty2 instanceof List);
132         final List<String> arrayProperty2AsList = (List<String>) arrayProperty2;
133         assertEquals(3, arrayProperty2AsList.size());
134         for (int i = 0; i < arrayProperty2AsList.size(); i++) {
135             assertEquals("value" + i, arrayProperty2AsList.get(i));
136         }
137
138         final Object objectProperty = jsonObjectAsMap.get("objectProperty");
139         assertTrue(objectProperty instanceof Map);
140         final Map<String, Object> objectPropertyAsMap = (Map<String, Object>) objectProperty;
141         assertEquals(3, objectPropertyAsMap.keySet().size());
142         assertTrue(objectPropertyAsMap.containsKey("string"));
143         assertEquals(innerObject.get("string").getAsString(), objectPropertyAsMap.get("string"));
144         assertEquals(innerObject.get("int").getAsInt(), objectPropertyAsMap.get("int"));
145         assertEquals(innerObject.get("float").getAsDouble(), objectPropertyAsMap.get("float"));
146         assertNull(objectPropertyAsMap.get("null"));
147     }
148 }