1 package org.openecomp.sdc.be.model.tosca.converters;
3 import com.google.gson.JsonObject;
4 import org.junit.Before;
6 import org.openecomp.sdc.be.model.DataTypeDefinition;
7 import org.openecomp.sdc.be.model.PropertyDefinition;
9 import java.util.Arrays;
10 import java.util.Collections;
11 import java.util.HashMap;
14 import static org.junit.Assert.assertEquals;
15 import static org.junit.Assert.assertNull;
17 public class DataTypePropertyConverterTest {
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;
27 public void setUp() throws Exception {
28 dataTypes = new HashMap<>();
30 prop1 = new PropertyDefinition();
31 prop1.setDefaultValue("def1");
32 prop1.setName("prop1");
34 prop2 = new PropertyDefinition();
35 prop2.setType("dataType1");
36 prop2.setName("prop2");
38 prop3 = new PropertyDefinition();
39 prop3.setDefaultValue("def3");
40 prop3.setName("prop3");
42 noDefaultProp = new PropertyDefinition();
43 noDefaultProp.setName("noDefaultProp");
45 noDefaultValue = new DataTypeDefinition();
46 noDefaultValue.setProperties(Collections.singletonList(noDefaultProp));
48 dataType1 = new DataTypeDefinition();
49 dataType1.setProperties(Arrays.asList(prop1, prop3));
51 dataType2 = new DataTypeDefinition();
52 dataType2.setDerivedFrom(dataType1);
54 dataType3 = new DataTypeDefinition();
55 dataType3.setProperties(Collections.singletonList(prop2));
56 dataType3.setDerivedFrom(noDefaultValue);
58 dataTypes.put("noDefault", noDefaultValue);
59 dataTypes.put("dataType1", dataType1);
60 dataTypes.put("dataType2", dataType2);
61 dataTypes.put("dataType3", dataType3);
65 public void testGetPropertyDefaultValuesRec_dataTypeNotExist() throws Exception {
66 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("someType", dataTypes);
67 assertNull(defaultValue);
71 public void testGetPropertyDefaultValuesRec_NoDefaultValue() throws Exception {
72 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("noDefault", dataTypes);
73 assertNull(defaultValue);
77 public void testGetPropertyDefaultValuesRec() throws Exception {
78 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType1", dataTypes);
79 assertEquals(PROPERTY2_DEFAULT, defaultValue);
83 public void testGetPropertyDefaultValuesRec_defaultFromDerivedDataType_derivedDataTypeHasNoDefaults() throws Exception {
84 dataType2.setDerivedFrom(noDefaultValue);
85 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType2", dataTypes);
86 assertNull(defaultValue);
90 public void testGetPropertyDefaultValuesRec_defaultFromDerivedDataType() throws Exception {
91 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType2", dataTypes);
92 assertEquals(PROPERTY2_DEFAULT, defaultValue);
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);
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
109 public void testMergeDefaultValues_allDefaultValuesAreOverridden() throws Exception {
110 JsonObject value = new JsonObject();
111 value.addProperty(noDefaultProp.getName(), "override1");
113 JsonObject prop1Val = new JsonObject();
114 prop1Val.addProperty(prop1.getName(), "prop1Override");
116 JsonObject prop3Val = new JsonObject();
117 prop3Val.addProperty(prop3.getName(), "prop3Override");
119 JsonObject prop2Value = new JsonObject();
120 prop2Value.add(prop3.getName(), prop3Val);
121 prop2Value.add(prop1.getName(), prop1Val);
123 value.add(prop2.getName(), prop2Value);
125 String valBeforeMerge = value.toString();
127 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
128 assertEquals(valBeforeMerge, value.toString());
132 public void testMergeDefaultValues() throws Exception {
133 JsonObject value = new JsonObject();
134 value.addProperty(noDefaultProp.getName(), "override1");
136 JsonObject prop1Val = new JsonObject();
137 prop1Val.addProperty(prop1.getName(), "prop1Override");
139 value.add(prop2.getName(), prop1Val);
141 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
143 assertEquals("{\"noDefaultProp\":\"override1\",\"prop2\":{\"prop1\":\"prop1Override\",\"prop3\":\"def3\"}}",
144 value.toString());//expect to merge prop 3 default as it was not overridden
148 public void testMergeDefaultValues_mergeAll() throws Exception {
149 JsonObject value = new JsonObject();
150 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
152 assertEquals("{\"prop2\":" + PROPERTY2_DEFAULT + "}",
153 value.toString());//expect to merge prop 3 default as it was not overridden
157 public void testMergeDefaultValues_doNotAddDefaultsForGetInputValues() throws Exception {
159 JsonObject getInputValue = new JsonObject();
160 getInputValue.addProperty("get_input", "in1");
162 JsonObject value = new JsonObject();
163 value.add(prop2.getName(), getInputValue);
165 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
167 assertEquals("{\"prop2\":{\"get_input\":\"in1\"}}", value.toString());
171 public void testMergeDefaultValues_doNotAddDefaultsForGetInputInnerValues() throws Exception {
172 JsonObject getInputValue = new JsonObject();
173 getInputValue.addProperty("get_input", "in1");
175 JsonObject prop1Val = new JsonObject();
176 prop1Val.add(prop1.getName(), getInputValue);
178 JsonObject value = new JsonObject();
179 value.add(prop2.getName(), prop1Val);
181 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
183 assertEquals("{\"prop2\":{\"prop1\":{\"get_input\":\"in1\"},\"prop3\":\"def3\"}}", value.toString());