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 javax.json.Json;
10 import java.util.Arrays;
11 import java.util.Collections;
12 import java.util.HashMap;
15 import static org.junit.Assert.assertEquals;
16 import static org.junit.Assert.assertNull;
18 public class DataTypePropertyConverterTest {
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;
28 public void setUp() throws Exception {
29 dataTypes = new HashMap<>();
31 prop1 = new PropertyDefinition();
32 prop1.setDefaultValue("def1");
33 prop1.setName("prop1");
35 prop2 = new PropertyDefinition();
36 prop2.setType("dataType1");
37 prop2.setName("prop2");
39 prop3 = new PropertyDefinition();
40 prop3.setDefaultValue("def3");
41 prop3.setName("prop3");
43 noDefaultProp = new PropertyDefinition();
44 noDefaultProp.setName("noDefaultProp");
46 noDefaultValue = new DataTypeDefinition();
47 noDefaultValue.setProperties(Collections.singletonList(noDefaultProp));
49 dataType1 = new DataTypeDefinition();
50 dataType1.setProperties(Arrays.asList(prop1, prop3));
52 dataType2 = new DataTypeDefinition();
53 dataType2.setDerivedFrom(dataType1);
55 dataType3 = new DataTypeDefinition();
56 dataType3.setProperties(Collections.singletonList(prop2));
57 dataType3.setDerivedFrom(noDefaultValue);
59 dataTypes.put("noDefault", noDefaultValue);
60 dataTypes.put("dataType1", dataType1);
61 dataTypes.put("dataType2", dataType2);
62 dataTypes.put("dataType3", dataType3);
66 public void testGetPropertyDefaultValuesRec_dataTypeNotExist() throws Exception {
67 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("someType", dataTypes);
68 assertNull(defaultValue);
72 public void testGetPropertyDefaultValuesRec_NoDefaultValue() throws Exception {
73 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("noDefault", dataTypes);
74 assertNull(defaultValue);
78 public void testGetPropertyDefaultValuesRec() throws Exception {
79 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType1", dataTypes);
80 assertEquals(PROPERTY2_DEFAULT, defaultValue);
84 public void testGetPropertyDefaultValuesRec_defaultFromDerivedDataType_derivedDataTypeHasNoDefaults() throws Exception {
85 dataType2.setDerivedFrom(noDefaultValue);
86 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType2", dataTypes);
87 assertNull(defaultValue);
91 public void testGetPropertyDefaultValuesRec_defaultFromDerivedDataType() throws Exception {
92 String defaultValue = testInstance.getDataTypePropertiesDefaultValuesRec("dataType2", dataTypes);
93 assertEquals(PROPERTY2_DEFAULT, defaultValue);
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);
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
110 public void testMergeDefaultValues_allDefaultValuesAreOverridden() throws Exception {
111 JsonObject value = new JsonObject();
112 value.addProperty(noDefaultProp.getName(), "override1");
114 JsonObject prop1Val = new JsonObject();
115 prop1Val.addProperty(prop1.getName(), "prop1Override");
117 JsonObject prop3Val = new JsonObject();
118 prop3Val.addProperty(prop3.getName(), "prop3Override");
120 JsonObject prop2Value = new JsonObject();
121 prop2Value.add(prop3.getName(), prop3Val);
122 prop2Value.add(prop1.getName(), prop1Val);
124 value.add(prop2.getName(), prop2Value);
126 String valBeforeMerge = value.toString();
128 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
129 assertEquals(valBeforeMerge, value.toString());
133 public void testMergeDefaultValues() throws Exception {
134 JsonObject value = new JsonObject();
135 value.addProperty(noDefaultProp.getName(), "override1");
137 JsonObject prop1Val = new JsonObject();
138 prop1Val.addProperty(prop1.getName(), "prop1Override");
140 value.add(prop2.getName(), prop1Val);
142 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
144 assertEquals("{\"noDefaultProp\":\"override1\",\"prop2\":{\"prop1\":\"prop1Override\",\"prop3\":\"def3\"}}",
145 value.toString());//expect to merge prop 3 default as it was not overridden
149 public void testMergeDefaultValues_mergeAll() throws Exception {
150 JsonObject value = new JsonObject();
151 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
153 assertEquals("{\"prop2\":" + PROPERTY2_DEFAULT + "}",
154 value.toString());//expect to merge prop 3 default as it was not overridden
158 public void testMergeDefaultValues_doNotAddDefaultsForGetInputValues() throws Exception {
160 JsonObject getInputValue = new JsonObject();
161 getInputValue.addProperty("get_input", "in1");
163 JsonObject value = new JsonObject();
164 value.add(prop2.getName(), getInputValue);
166 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
168 assertEquals("{\"prop2\":{\"get_input\":\"in1\"}}", value.toString());
172 public void testMergeDefaultValues_doNotAddDefaultsForGetInputInnerValues() throws Exception {
173 JsonObject getInputValue = new JsonObject();
174 getInputValue.addProperty("get_input", "in1");
176 JsonObject prop1Val = new JsonObject();
177 prop1Val.add(prop1.getName(), getInputValue);
179 JsonObject value = new JsonObject();
180 value.add(prop2.getName(), prop1Val);
182 testInstance.mergeDataTypeDefaultValuesWithPropertyValue(value, "dataType3", dataTypes);
184 assertEquals("{\"prop2\":{\"prop1\":{\"get_input\":\"in1\"},\"prop3\":\"def3\"}}", value.toString());