re base code
[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 com.google.gson.JsonObject;
4 import org.junit.Before;
5 import org.junit.Test;
6 import org.openecomp.sdc.be.model.DataTypeDefinition;
7 import org.openecomp.sdc.be.model.PropertyDefinition;
8
9 import java.util.Arrays;
10 import java.util.Collections;
11 import java.util.HashMap;
12 import java.util.Map;
13
14 import static org.junit.Assert.assertEquals;
15 import static org.junit.Assert.assertNull;
16
17 public class DataTypePropertyConverterTest {
18
19     private static final String EMPTY_JSON_STR = "{}";
20     public static final String PROPERTY2_DEFAULT = "{\"prop1\":\"def1\",\"prop3\":\"def3\"}";
21     private DataTypePropertyConverter testInstance = DataTypePropertyConverter.getInstance();
22     private Map<String, DataTypeDefinition> dataTypes;
23     private DataTypeDefinition noDefaultValue, dataType1, dataType2, dataType3;
24     private PropertyDefinition prop1, prop2, prop3, noDefaultProp;
25
26     @Before
27     public void setUp() throws Exception {
28         dataTypes = new HashMap<>();
29
30         prop1 = new PropertyDefinition();
31         prop1.setDefaultValue("def1");
32         prop1.setName("prop1");
33
34         prop2 = new PropertyDefinition();
35         prop2.setType("dataType1");
36         prop2.setName("prop2");
37
38         prop3 = new PropertyDefinition();
39         prop3.setDefaultValue("def3");
40         prop3.setName("prop3");
41
42         noDefaultProp = new PropertyDefinition();
43         noDefaultProp.setName("noDefaultProp");
44
45         noDefaultValue = new DataTypeDefinition();
46         noDefaultValue.setProperties(Collections.singletonList(noDefaultProp));
47
48         dataType1 = new DataTypeDefinition();
49         dataType1.setProperties(Arrays.asList(prop1, prop3));
50
51         dataType2 = new DataTypeDefinition();
52         dataType2.setDerivedFrom(dataType1);
53
54         dataType3 = new DataTypeDefinition();
55         dataType3.setProperties(Collections.singletonList(prop2));
56         dataType3.setDerivedFrom(noDefaultValue);
57
58         dataTypes.put("noDefault", noDefaultValue);
59         dataTypes.put("dataType1", dataType1);
60         dataTypes.put("dataType2", dataType2);
61         dataTypes.put("dataType3", dataType3);
62     }
63
64     @Test
65     public void testGetPropertyDefaultValuesRec_dataTypeNotExist() throws Exception {
66         String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("someType", dataTypes);
67         assertNull(defaultValue);
68     }
69
70     @Test
71     public void testGetPropertyDefaultValuesRec_NoDefaultValue() throws Exception {
72         String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("noDefault", dataTypes);
73         assertNull(defaultValue);
74     }
75
76     @Test
77     public void testGetPropertyDefaultValuesRec() throws Exception {
78         String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType1", dataTypes);
79         assertEquals(PROPERTY2_DEFAULT, defaultValue);
80     }
81
82     @Test
83     public void testGetPropertyDefaultValuesRec_defaultFromDerivedDataType_derivedDataTypeHasNoDefaults() throws Exception {
84         dataType2.setDerivedFrom(noDefaultValue);
85         String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType2", dataTypes);
86         assertNull(defaultValue);
87     }
88
89     @Test
90     public void testGetPropertyDefaultValuesRec_defaultFromDerivedDataType() throws Exception {
91         String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType2", dataTypes);
92         assertEquals(PROPERTY2_DEFAULT, defaultValue);
93     }
94
95     @Test
96     public void testGetPropertyDefaultValuesRec_defaultFromDataTypesOfProperties_dataTypeOfPropertyHasNoDefault() throws Exception {
97         dataType3.getProperties().get(0).setType(noDefaultValue.getName());
98         String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType3", dataTypes);
99         assertNull(defaultValue);
100     }
101
102     @Test
103     public void testGetPropertyDefaultValuesRec_defaultFromDataTypesOfProperties() throws Exception {
104         String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType3", dataTypes);
105         assertEquals("{\"prop2\":" + PROPERTY2_DEFAULT + "}", defaultValue);//data type 3 has property prop2 which has a data type with property prop1 which has a default value
106     }
107
108     @Test
109     public void testMergeDefaultValues_allDefaultValuesAreOverridden() throws Exception {
110         JsonObject value = new JsonObject();
111         value.addProperty(noDefaultProp.getName(), "override1");
112
113         JsonObject prop1Val = new JsonObject();
114         prop1Val.addProperty(prop1.getName(), "prop1Override");
115
116         JsonObject prop3Val = new JsonObject();
117         prop3Val.addProperty(prop3.getName(), "prop3Override");
118
119         JsonObject prop2Value = new JsonObject();
120         prop2Value.add(prop3.getName(), prop3Val);
121         prop2Value.add(prop1.getName(), prop1Val);
122
123         value.add(prop2.getName(), prop2Value);
124
125         String valBeforeMerge = value.toString();
126
127         testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
128         assertEquals(valBeforeMerge, value.toString());
129     }
130
131     @Test
132     public void testMergeDefaultValues() throws Exception {
133         JsonObject value = new JsonObject();
134         value.addProperty(noDefaultProp.getName(), "override1");
135
136         JsonObject prop1Val = new JsonObject();
137         prop1Val.addProperty(prop1.getName(), "prop1Override");
138
139         value.add(prop2.getName(), prop1Val);
140
141         testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
142
143         assertEquals("{\"noDefaultProp\":\"override1\",\"prop2\":{\"prop1\":\"prop1Override\",\"prop3\":\"def3\"}}",
144                       value.toString());//expect to merge prop 3 default as it was not overridden
145     }
146
147     @Test
148     public void testMergeDefaultValues_mergeAll() throws Exception {
149         JsonObject value = new JsonObject();
150         testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
151
152         assertEquals("{\"prop2\":" + PROPERTY2_DEFAULT + "}",
153                      value.toString());//expect to merge prop 3 default as it was not overridden
154     }
155
156     @Test
157     public void testMergeDefaultValues_doNotAddDefaultsForGetInputValues() throws Exception {
158
159         JsonObject getInputValue = new JsonObject();
160         getInputValue.addProperty("get_input", "in1");
161
162         JsonObject value = new JsonObject();
163         value.add(prop2.getName(), getInputValue);
164
165         testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
166
167         assertEquals("{\"prop2\":{\"get_input\":\"in1\"}}", value.toString());
168     }
169
170     @Test
171     public void testMergeDefaultValues_doNotAddDefaultsForGetInputInnerValues() throws Exception {
172         JsonObject getInputValue = new JsonObject();
173         getInputValue.addProperty("get_input", "in1");
174
175         JsonObject prop1Val = new JsonObject();
176         prop1Val.add(prop1.getName(), getInputValue);
177
178         JsonObject value = new JsonObject();
179         value.add(prop2.getName(), prop1Val);
180
181         testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
182
183         assertEquals("{\"prop2\":{\"prop1\":{\"get_input\":\"in1\"},\"prop3\":\"def3\"}}", value.toString());
184
185     }
186 }