re base code
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / merge / group / GroupPropertiesMergeCommandTest.java
1 package org.openecomp.sdc.be.components.merge.group;
2
3
4 import fj.data.Either;
5 import org.junit.Before;
6 import org.junit.Test;
7 import org.junit.runner.RunWith;
8 import org.mockito.ArgumentCaptor;
9 import org.mockito.Captor;
10 import org.mockito.Mock;
11 import org.mockito.junit.MockitoJUnitRunner;
12 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
13 import org.openecomp.sdc.be.components.merge.property.DataDefinitionsValuesMergingBusinessLogic;
14 import org.openecomp.sdc.be.components.utils.GroupDefinitionBuilder;
15 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
16 import org.openecomp.sdc.be.dao.api.ActionStatus;
17 import org.openecomp.sdc.be.datatypes.enums.CreatedFrom;
18 import org.openecomp.sdc.be.impl.ComponentsUtils;
19 import org.openecomp.sdc.be.model.GroupDefinition;
20 import org.openecomp.sdc.be.model.Resource;
21 import org.openecomp.sdc.be.model.jsontitan.operations.GroupsOperation;
22
23 import java.util.List;
24 import java.util.stream.Stream;
25
26 import static org.assertj.core.api.Assertions.assertThat;
27 import static org.mockito.ArgumentMatchers.eq;
28 import static org.mockito.Mockito.*;
29
30 @RunWith(MockitoJUnitRunner.class)
31 public class GroupPropertiesMergeCommandTest {
32
33     private GroupPropertiesMergeCommand testInstance;
34     @Mock
35     private DataDefinitionsValuesMergingBusinessLogic mergeBusinessLogic;
36     @Mock
37     private GroupsOperation groupsOperation;
38     @Captor
39     private ArgumentCaptor<List<GroupDefinition>> updatedGroupsCaptor;
40
41     private GroupDefinition newGroup1, newGroup2, newGroup3;
42     private GroupDefinition prevGroup1, prevGroup2, prevGroup3;
43     private Resource prevResource, newResource;
44
45
46     @Before
47     public void setUp() throws Exception {
48         testInstance = new GroupPropertiesMergeCommand(groupsOperation, new ComponentsUtils(mock(AuditingManager.class)), mergeBusinessLogic);
49         newGroup1 = createVspGroupWithProperties("group1Id", "group1New", "prop1", "prop2");
50         newGroup2 = createUserGroupWithProperties("group2Id", "group2New", "prop3", "prop4");
51         newGroup3 = createVspGroupWithProperties("group3Id", "group3New");
52         prevGroup1 = createVspGroupWithProperties("group1Id", "group1Old", "prop1", "prop2");
53         prevGroup2 = createUserGroupWithProperties("group2Id", "group2Old", "prop3", "prop4");
54         prevGroup3 = createVspGroupWithProperties("group3Id", "group3Old");
55
56         prevResource = new ResourceBuilder()
57                 .addGroup(prevGroup1)
58                 .addGroup(prevGroup2)
59                 .addGroup(prevGroup3)
60                 .addInput("input1")
61                 .addInput("input2")
62                 .build();
63
64         newResource = new ResourceBuilder()
65                 .addGroup(newGroup1)
66                 .addGroup(newGroup2)
67                 .addGroup(newGroup3)
68                 .addInput("input1")
69                 .build();
70     }
71
72     @Test
73     public void whenNewComponentHasNoGroups_returnOk() {
74         ActionStatus mergeStatus = testInstance.mergeComponents(prevResource, new Resource());
75         assertThat(mergeStatus).isEqualTo(ActionStatus.OK);
76         verifyZeroInteractions(mergeBusinessLogic, groupsOperation);
77     }
78
79     @Test
80     public void whenOldComponentHasNoGroups_returnOk() {
81         ActionStatus mergeStatus = testInstance.mergeComponents(new Resource(), newResource);
82         assertThat(mergeStatus).isEqualTo(ActionStatus.OK);
83         verifyZeroInteractions(mergeBusinessLogic, groupsOperation);
84     }
85
86     @Test
87     public void whenOldOrNewGroupHasNoProperties_noNeedToMergeItsProperties() {
88         GroupDefinition oldGrpNoProps = createVspGroupWithProperties("grp1", "grp1");
89         GroupDefinition newGrpWithProps = createVspGroupWithProperties("grp1", "grp1", "prop1", "prop2");
90
91         GroupDefinition oldGrpWithProps = createVspGroupWithProperties("grp2", "grp2", "prop3");
92         GroupDefinition newGrpNoProps = createVspGroupWithProperties("grp2", "grp2");
93
94         Resource prevResource = createResourceWithGroups(oldGrpNoProps, oldGrpWithProps);
95         Resource newResource = createResourceWithGroups(newGrpWithProps, newGrpNoProps);
96         ActionStatus mergeStatus = testInstance.mergeComponents(prevResource, newResource);
97         assertThat(mergeStatus).isEqualTo(ActionStatus.OK);
98         verifyZeroInteractions(mergeBusinessLogic, groupsOperation);
99     }
100
101     @Test
102     public void whenNewGroupIsUserDefined_itWasAlreadyMergedInEarlierCommand_noNeedToMerge() {
103         GroupDefinition oldUserDefinedGrp = createUserGroupWithProperties("grp1", "grp1", "prop1");
104         GroupDefinition newUserDefinedGrp = createVspGroupWithProperties("grp1", "grp1", "prop1");
105         Resource prevResource = createResourceWithGroups(oldUserDefinedGrp);
106         Resource newResource = createResourceWithGroups(newUserDefinedGrp);
107         ActionStatus mergeStatus = testInstance.mergeComponents(prevResource, newResource);
108         assertThat(mergeStatus).isEqualTo(ActionStatus.OK);
109         verifyZeroInteractions(mergeBusinessLogic, groupsOperation);
110     }
111
112     @Test
113     public void whenNewGroupWasntExistInPrevVersion_noMergeRequired_matchByInvariantName() {
114         GroupDefinition oldGrp = createUserGroupWithProperties("grp1", "grp1", "prop1");
115         GroupDefinition newGrp = createVspGroupWithProperties("newGrp1", "grp1", "prop1");
116         Resource prevResource = createResourceWithGroups(oldGrp);
117         Resource newResource = createResourceWithGroups(newGrp);
118         ActionStatus mergeStatus = testInstance.mergeComponents(prevResource, newResource);
119         assertThat(mergeStatus).isEqualTo(ActionStatus.OK);
120         verifyZeroInteractions(mergeBusinessLogic, groupsOperation);
121     }
122
123     @Test
124     public void mergeGroupProperties_updateGroupsAfterMerge_mergeOnlyGroups() {
125         when(groupsOperation.updateGroups(eq(newResource), updatedGroupsCaptor.capture(), eq(false))).thenReturn(Either.left(null));
126         ActionStatus mergeStatus = testInstance.mergeComponents(prevResource, newResource);
127         assertThat(mergeStatus).isEqualTo(ActionStatus.OK);
128         verify(mergeBusinessLogic).mergeInstanceDataDefinitions(prevGroup1.getProperties(), prevResource.getInputs(), newGroup1.getProperties(), newResource.getInputs());
129         assertThat(updatedGroupsCaptor.getValue())
130                 .containsExactly(newGroup1);
131
132     }
133
134     private GroupDefinition createUserGroupWithProperties(String invariantName, String groupName, String ... propsNames) {
135         return createGroupWithProperties(invariantName, groupName, CreatedFrom.UI, propsNames);
136     }
137
138     private GroupDefinition createVspGroupWithProperties(String invariantName, String groupName, String ... propsNames) {
139         return createGroupWithProperties(invariantName, groupName, CreatedFrom.CSAR, propsNames);
140     }
141
142     private GroupDefinition createGroupWithProperties(String invariantName, String groupName, CreatedFrom createdFrom, String ... propsNames) {
143         GroupDefinitionBuilder groupDefinitionBuilder = GroupDefinitionBuilder.create()
144                 .setUniqueId(invariantName)
145                 .setName(groupName)
146                 .setCreatedFrom(createdFrom)
147                 .setInvariantName(invariantName);
148         Stream.of(propsNames).forEach(groupDefinitionBuilder::addProperty);
149         return groupDefinitionBuilder.build();
150     }
151
152     private Resource createResourceWithGroups(GroupDefinition ... groups) {
153         ResourceBuilder resourceBuilder = new ResourceBuilder();
154         Stream.of(groups).forEach(resourceBuilder::addGroup);
155         return resourceBuilder.build();
156     }
157 }