ebb7566611691150bc2833817ff015f2c0773d47
[sdc.git] / catalog-model / src / test / java / org / openecomp / sdc / be / model / tosca / converters / DataTypePropertyConverterTest.java
1 package org.openecomp.sdc.be.model.tosca.converters;
2
3 import static org.junit.Assert.*;
4
5 import com.google.gson.JsonElement;
6 import com.google.gson.JsonObject;
7 import org.junit.Before;
8 import org.junit.Test;
9 import org.openecomp.sdc.be.model.DataTypeDefinition;
10 import org.openecomp.sdc.be.model.PropertyDefinition;
11
12 import javax.json.Json;
13 import java.util.Arrays;
14 import java.util.Collections;
15 import java.util.HashMap;
16 import java.util.Map;
17
18 import static org.junit.Assert.assertEquals;
19 import static org.junit.Assert.assertTrue;
20 import java.util.*;
21 import org.junit.Assert;
22
23 public class DataTypePropertyConverterTest {
24
25         private static final String EMPTY_JSON_STR = "{}";
26         public static final String PROPERTY2_DEFAULT = "{\"prop1\":\"def1\",\"prop3\":\"def3\"}";
27         private DataTypePropertyConverter testInstance = DataTypePropertyConverter.getInstance();
28         private Map<String, DataTypeDefinition> dataTypes;
29         private DataTypeDefinition noDefaultValue, dataType1, dataType2, dataType3;
30         private PropertyDefinition prop1, prop2, prop3, noDefaultProp;
31
32         @Before
33         public void setUp() throws Exception {
34                 dataTypes = new HashMap<>();
35
36                 prop1 = new PropertyDefinition();
37                 prop1.setDefaultValue("def1");
38                 prop1.setName("prop1");
39
40                 prop2 = new PropertyDefinition();
41                 prop2.setType("dataType1");
42                 prop2.setName("prop2");
43
44                 prop3 = new PropertyDefinition();
45                 prop3.setDefaultValue("def3");
46                 prop3.setName("prop3");
47
48                 noDefaultProp = new PropertyDefinition();
49                 noDefaultProp.setName("noDefaultProp");
50
51                 noDefaultValue = new DataTypeDefinition();
52                 noDefaultValue.setProperties(Collections.singletonList(noDefaultProp));
53
54                 dataType1 = new DataTypeDefinition();
55                 dataType1.setProperties(Arrays.asList(prop1, prop3));
56
57                 dataType2 = new DataTypeDefinition();
58                 dataType2.setDerivedFrom(dataType1);
59
60                 dataType3 = new DataTypeDefinition();
61                 dataType3.setProperties(Collections.singletonList(prop2));
62                 dataType3.setDerivedFrom(noDefaultValue);
63
64                 dataTypes.put("noDefault", noDefaultValue);
65                 dataTypes.put("dataType1", dataType1);
66                 dataTypes.put("dataType2", dataType2);
67                 dataTypes.put("dataType3", dataType3);
68         }
69
70         @Test
71         public void testGetPropertyDefaultValuesRec_dataTypeNotExist() throws Exception {
72                 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("someType", dataTypes);
73                 assertEquals(EMPTY_JSON_STR, defaultValue);
74         }
75
76         @Test
77         public void testGetPropertyDefaultValuesRec_NoDefaultValue() throws Exception {
78                 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("noDefault", dataTypes);
79                 assertEquals(EMPTY_JSON_STR, defaultValue);
80         }
81
82         @Test
83         public void testGetPropertyDefaultValuesRec() throws Exception {
84                 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType1", dataTypes);
85                 assertEquals(PROPERTY2_DEFAULT, defaultValue);
86         }
87
88         @Test
89         public void testGetPropertyDefaultValuesRec_defaultFromDerivedDataType_derivedDataTypeHasNoDefaults()
90                         throws Exception {
91                 dataType2.setDerivedFrom(noDefaultValue);
92                 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType2", dataTypes);
93                 assertEquals(EMPTY_JSON_STR, defaultValue);
94         }
95
96         @Test
97         public void testGetPropertyDefaultValuesRec_defaultFromDerivedDataType() throws Exception {
98                 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType2", dataTypes);
99                 assertEquals(PROPERTY2_DEFAULT, defaultValue);
100         }
101
102         @Test
103         public void testGetPropertyDefaultValuesRec_defaultFromDataTypesOfProperties_dataTypeOfPropertyHasNoDefault()
104                         throws Exception {
105                 dataType3.getProperties().get(0).setType(noDefaultValue.getName());
106                 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType3", dataTypes);
107                 assertEquals(EMPTY_JSON_STR, defaultValue);
108         }
109
110         @Test
111         public void testGetPropertyDefaultValuesRec_defaultFromDataTypesOfProperties() throws Exception {
112                 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType3", dataTypes);
113                 assertEquals("{\"prop2\":" + PROPERTY2_DEFAULT + "}", defaultValue);// data
114                                                                                                                                                         // type
115                                                                                                                                                         // 3
116                                                                                                                                                         // has
117                                                                                                                                                         // property
118                                                                                                                                                         // prop2
119                                                                                                                                                         // which
120                                                                                                                                                         // has
121                                                                                                                                                         // a
122                                                                                                                                                         // data
123                                                                                                                                                         // type
124                                                                                                                                                         // with
125                                                                                                                                                         // property
126                                                                                                                                                         // prop1
127                                                                                                                                                         // which
128                                                                                                                                                         // has
129                                                                                                                                                         // a
130                                                                                                                                                         // default
131                                                                                                                                                         // value
132         }
133
134         @Test
135         public void testMergeDefaultValues_allDefaultValuesAreOverridden() throws Exception {
136                 JsonObject value = new JsonObject();
137                 value.addProperty(noDefaultProp.getName(), "override1");
138
139                 JsonObject prop1Val = new JsonObject();
140                 prop1Val.addProperty(prop1.getName(), "prop1Override");
141
142                 JsonObject prop3Val = new JsonObject();
143                 prop3Val.addProperty(prop3.getName(), "prop3Override");
144
145                 JsonObject prop2Value = new JsonObject();
146                 prop2Value.add(prop3.getName(), prop3Val);
147                 prop2Value.add(prop1.getName(), prop1Val);
148
149                 value.add(prop2.getName(), prop2Value);
150
151                 String valBeforeMerge = value.toString();
152
153                 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
154                 assertEquals(valBeforeMerge, value.toString());
155         }
156
157         @Test
158         public void testMergeDefaultValues() throws Exception {
159                 JsonObject value = new JsonObject();
160                 value.addProperty(noDefaultProp.getName(), "override1");
161
162                 JsonObject prop1Val = new JsonObject();
163                 prop1Val.addProperty(prop1.getName(), "prop1Override");
164
165                 value.add(prop2.getName(), prop1Val);
166
167                 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
168
169                 assertEquals("{\"noDefaultProp\":\"override1\",\"prop2\":{\"prop1\":\"prop1Override\",\"prop3\":\"def3\"}}",
170                                 value.toString());// expect to merge prop 3 default as it was
171                                                                         // not overridden
172         }
173
174         @Test
175         public void testMergeDefaultValues_mergeAll() throws Exception {
176                 JsonObject value = new JsonObject();
177                 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
178
179                 assertEquals("{\"prop2\":" + PROPERTY2_DEFAULT + "}", value.toString());// expect
180                                                                                                                                                                 // to
181                                                                                                                                                                 // merge
182                                                                                                                                                                 // prop
183                                                                                                                                                                 // 3
184                                                                                                                                                                 // default
185                                                                                                                                                                 // as
186                                                                                                                                                                 // it
187                                                                                                                                                                 // was
188                                                                                                                                                                 // not
189                                                                                                                                                                 // overridden
190         }
191
192         @Test
193         public void testMergeDefaultValues_doNotAddDefaultsForGetInputValues() throws Exception {
194
195                 JsonObject getInputValue = new JsonObject();
196                 getInputValue.addProperty("get_input", "in1");
197
198                 JsonObject value = new JsonObject();
199                 value.add(prop2.getName(), getInputValue);
200
201                 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
202
203                 assertEquals("{\"prop2\":{\"get_input\":\"in1\"}}", value.toString());
204         }
205
206         @Test
207         public void testMergeDefaultValues_doNotAddDefaultsForGetInputInnerValues() throws Exception {
208                 JsonObject getInputValue = new JsonObject();
209                 getInputValue.addProperty("get_input", "in1");
210
211                 JsonObject prop1Val = new JsonObject();
212                 prop1Val.add(prop1.getName(), getInputValue);
213
214                 JsonObject value = new JsonObject();
215                 value.add(prop2.getName(), prop1Val);
216
217                 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
218
219                 assertEquals("{\"prop2\":{\"prop1\":{\"get_input\":\"in1\"},\"prop3\":\"def3\"}}", value.toString());
220
221         }
222
223         private DataTypePropertyConverter createTestSubject() {
224                 return DataTypePropertyConverter.getInstance();
225         }
226
227         
228         @Test
229         public void testGetInstance() throws Exception {
230                 DataTypePropertyConverter result;
231
232                 // default test
233                 result = DataTypePropertyConverter.getInstance();
234         }
235
236         
237
238
239         
240
241 }