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