Sync Integ to Master
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / merge / input / InputsValuesMergingBusinessLogicTest.java
1 package org.openecomp.sdc.be.components.merge.input;
2
3 import org.junit.Before;
4 import org.junit.Test;
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;
13
14 import java.util.Arrays;
15 import java.util.Collections;
16 import java.util.List;
17 import java.util.Map;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.assertNull;
21
22 public class InputsValuesMergingBusinessLogicTest {
23
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;
30
31     @Before
32     public void setUp() throws Exception {
33         testInstance = new InputsValuesMergingBusinessLogic();
34     }
35
36     @Test
37     public void testMergeInputs_inputsOfDifferentType_dontCopyOldValue() throws Exception {
38         InputDefinition oldInput = createUserDefinedInputDefinition(INPUT1_ID, "oldVal1");
39
40         InputDefinition newInput = createInputDefinition(INPUT1_ID, null);
41         newInput.setType("int");
42
43
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);
47
48         assertNull(updatedInputs.get(INPUT1_ID).getDefaultValue());
49     }
50
51     @Test
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);
56
57         InputDefinition newInput1 = createInputDefinition(INPUT1_ID, "");
58         InputDefinition newInput2 = createUserDefinedInputDefinition(INPUT2_ID, null);
59
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);
63
64         assertEquals(oldInputWithCsarDefaultValue.getDefaultValue(), updatedInputs.get(INPUT1_ID).getDefaultValue());
65         assertEquals(oldInputWithUserDefinedValue.getDefaultValue(), updatedInputs.get(INPUT2_ID).getDefaultValue());
66         assertNull(updatedInputs.get(INPUT3_ID));
67     }
68
69     @Test
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);
74
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");
79
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);
83
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());
88     }
89
90     @Test
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();
94
95         Resource prevResource = new ResourceBuilder().addInput(INPUT1_ID).addInput(INPUT2_ID).addInput(INPUT3_ID).addInput(INPUT4_ID).build();
96
97         Resource currentResource = new ResourceBuilder()
98                 .addInput(INPUT2_ID)
99                 .addInstanceProperty("inst1", new ComponentInstanceProperty(declaredInputProp1))
100                 .addInstanceInput("inst2", new ComponentInstanceInput(declaredInputProp2))
101                 .build();
102
103         List<InputDefinition> previouslyDeclaredInputs = testInstance.getPreviouslyDeclaredInputsToMerge(prevResource, currentResource);
104         assertEquals(3, previouslyDeclaredInputs.size());
105
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");
109     }
110
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);
115     }
116
117     private Map<String, InputDefinition> mapInputsByName(List<InputDefinition> inputs) {
118         return MapUtil.toMap(inputs, InputDefinition::getName);
119     }
120
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);
126         return inputDef;
127     }
128
129     private InputDefinition createUserDefinedInputDefinition(String name, String value) {
130         InputDefinition inputDef = createInputDefinition(name, value);
131         inputDef.setOwnerId("owner");
132         return inputDef;
133     }
134 }