1 package org.openecomp.sdc.be.components.merge.input;
3 import org.junit.Before;
5 import org.openecomp.sdc.be.components.utils.PropertyDataDefinitionBuilder;
6 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
7 import org.openecomp.sdc.be.dao.utils.MapUtil;
8 import org.openecomp.sdc.be.datatypes.elements.PropertyDataDefinition;
9 import org.openecomp.sdc.be.model.ComponentInstanceInput;
10 import org.openecomp.sdc.be.model.ComponentInstanceProperty;
11 import org.openecomp.sdc.be.model.InputDefinition;
12 import org.openecomp.sdc.be.model.Resource;
14 import java.util.Arrays;
15 import java.util.Collections;
16 import java.util.List;
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertNull;
22 public class InputsValuesMergingBusinessLogicTest {
24 public static final String INPUT_DEFUALT_TYPE = "string";
25 public static final String INPUT1_ID = "input1";
26 public static final String INPUT2_ID = "input2";
27 public static final String INPUT3_ID = "input3";
28 public static final String INPUT4_ID = "input4";
29 private InputsValuesMergingBusinessLogic testInstance;
32 public void setUp() throws Exception {
33 testInstance = new InputsValuesMergingBusinessLogic();
37 public void testMergeInputs_inputsOfDifferentType_dontCopyOldValue() throws Exception {
38 InputDefinition oldInput = createUserDefinedInputDefinition(INPUT1_ID, "oldVal1");
40 InputDefinition newInput = createInputDefinition(INPUT1_ID, null);
41 newInput.setType("int");
44 Map<String, InputDefinition> updatedInputs = Collections.singletonMap(newInput.getName(), newInput);
45 Map<String, InputDefinition> oldInputs = Collections.singletonMap(oldInput.getName(), oldInput);
46 testInstance.mergeComponentInputs(oldInputs, updatedInputs);
48 assertNull(updatedInputs.get(INPUT1_ID).getDefaultValue());
52 public void testMergeInputs_newInputsHaveNoValue_copyOldValues() throws Exception {
53 InputDefinition oldInputWithCsarDefaultValue = createInputDefinition(INPUT1_ID, "oldVal1");
54 InputDefinition oldInputWithUserDefinedValue = createUserDefinedInputDefinition(INPUT2_ID, "oldVal2");
55 InputDefinition oldInputNotExistOnNew = createUserDefinedInputDefinition(INPUT3_ID, null);
57 InputDefinition newInput1 = createInputDefinition(INPUT1_ID, "");
58 InputDefinition newInput2 = createUserDefinedInputDefinition(INPUT2_ID, null);
60 Map<String, InputDefinition> updatedInputs = mapInputsByName(Arrays.asList(newInput1, newInput2));
61 Map<String, InputDefinition> oldInputs = mapInputsByName(Arrays.asList(oldInputWithCsarDefaultValue, oldInputWithUserDefinedValue, oldInputNotExistOnNew));
62 testInstance.mergeComponentInputs(oldInputs, updatedInputs);
64 assertEquals(oldInputWithCsarDefaultValue.getDefaultValue(), updatedInputs.get(INPUT1_ID).getDefaultValue());
65 assertEquals(oldInputWithUserDefinedValue.getDefaultValue(), updatedInputs.get(INPUT2_ID).getDefaultValue());
66 assertNull(updatedInputs.get(INPUT3_ID));
70 public void testMergeInputs_newInputsHaveValue_dontOverrideNewValue() throws Exception {
71 InputDefinition oldInputWithCsarDefaultValue = createInputDefinition(INPUT1_ID, "oldVal1");
72 InputDefinition oldInputWithUserDefinedValue = createUserDefinedInputDefinition(INPUT2_ID, "oldVal2");
73 InputDefinition oldInputWithNoValue = createUserDefinedInputDefinition(INPUT3_ID, null);
75 InputDefinition newInput1 = createInputDefinition(INPUT1_ID, "newVal1");
76 InputDefinition newInput2 = createUserDefinedInputDefinition(INPUT2_ID, "newVal2");
77 InputDefinition newInput3 = createUserDefinedInputDefinition(INPUT3_ID, "newVal3");
78 InputDefinition newInput4 = createUserDefinedInputDefinition(INPUT4_ID, "newVal4");
80 Map<String, InputDefinition> updatedInputs = mapInputsByName(Arrays.asList(newInput1, newInput2, newInput3, newInput4));
81 Map<String, InputDefinition> oldInputs = mapInputsByName(Arrays.asList(oldInputWithCsarDefaultValue, oldInputWithUserDefinedValue, oldInputWithNoValue));
82 testInstance.mergeComponentInputs(oldInputs, updatedInputs);
84 assertEquals(updatedInputs.get(INPUT1_ID).getDefaultValue(), newInput1.getDefaultValue());
85 assertEquals(updatedInputs.get(INPUT2_ID).getDefaultValue(), newInput2.getDefaultValue());
86 assertEquals(updatedInputs.get(INPUT3_ID).getDefaultValue(), newInput3.getDefaultValue());
87 assertEquals(updatedInputs.get(INPUT4_ID).getDefaultValue(), newInput4.getDefaultValue());
91 public void getPrevoislyDeclaredInputsToMerge() throws Exception {
92 PropertyDataDefinition declaredInputProp1 = new PropertyDataDefinitionBuilder().addGetInputValue(INPUT1_ID).addGetInputValue(INPUT3_ID).setUniqueId("prevDeclaredPropId").build();
93 PropertyDataDefinition declaredInputProp2 = new PropertyDataDefinitionBuilder().addGetInputValue(INPUT4_ID).setUniqueId("prevDeclaredPropId2").build();
95 Resource prevResource = new ResourceBuilder().addInput(INPUT1_ID).addInput(INPUT2_ID).addInput(INPUT3_ID).addInput(INPUT4_ID).build();
97 Resource currentResource = new ResourceBuilder()
99 .addInstanceProperty("inst1", new ComponentInstanceProperty(declaredInputProp1))
100 .addInstanceInput("inst2", new ComponentInstanceInput(declaredInputProp2))
103 List<InputDefinition> previouslyDeclaredInputs = testInstance.getPreviouslyDeclaredInputsToMerge(prevResource, currentResource);
104 assertEquals(3, previouslyDeclaredInputs.size());
106 assertInput(previouslyDeclaredInputs.get(0), INPUT1_ID, declaredInputProp1.getUniqueId(), "inst1");
107 assertInput(previouslyDeclaredInputs.get(1), INPUT3_ID, declaredInputProp1.getUniqueId(), "inst1");
108 assertInput(previouslyDeclaredInputs.get(2), INPUT4_ID, declaredInputProp2.getUniqueId(), "inst2");
111 private void assertInput(InputDefinition inputDefinition, String expectedInputId, String expectedPropertyId, String expectedInstanceUniqueId) {
112 assertEquals(expectedInputId, inputDefinition.getUniqueId());
113 assertEquals(expectedPropertyId, inputDefinition.getPropertyId());
114 assertEquals(inputDefinition.getInstanceUniqueId(), expectedInstanceUniqueId);
117 private Map<String, InputDefinition> mapInputsByName(List<InputDefinition> inputs) {
118 return MapUtil.toMap(inputs, InputDefinition::getName);
121 private InputDefinition createInputDefinition(String name, String value) {
122 InputDefinition inputDef = new InputDefinition();
123 inputDef.setName(name);
124 inputDef.setDefaultValue(value);
125 inputDef.setType(INPUT_DEFUALT_TYPE);
129 private InputDefinition createUserDefinedInputDefinition(String name, String value) {
130 InputDefinition inputDef = createInputDefinition(name, value);
131 inputDef.setOwnerId("owner");