1 package org.openecomp.sdc.be.components.merge.group;
5 import org.junit.Before;
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;
23 import java.util.List;
24 import java.util.stream.Stream;
26 import static org.assertj.core.api.Assertions.assertThat;
27 import static org.mockito.ArgumentMatchers.eq;
28 import static org.mockito.Mockito.*;
30 @RunWith(MockitoJUnitRunner.class)
31 public class GroupPropertiesMergeCommandTest {
33 private GroupPropertiesMergeCommand testInstance;
35 private DataDefinitionsValuesMergingBusinessLogic mergeBusinessLogic;
37 private GroupsOperation groupsOperation;
39 private ArgumentCaptor<List<GroupDefinition>> updatedGroupsCaptor;
41 private GroupDefinition newGroup1, newGroup2, newGroup3;
42 private GroupDefinition prevGroup1, prevGroup2, prevGroup3;
43 private Resource prevResource, newResource;
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");
56 prevResource = new ResourceBuilder()
64 newResource = new ResourceBuilder()
73 public void whenNewComponentHasNoGroups_returnOk() {
74 ActionStatus mergeStatus = testInstance.mergeComponents(prevResource, new Resource());
75 assertThat(mergeStatus).isEqualTo(ActionStatus.OK);
76 verifyZeroInteractions(mergeBusinessLogic, groupsOperation);
80 public void whenOldComponentHasNoGroups_returnOk() {
81 ActionStatus mergeStatus = testInstance.mergeComponents(new Resource(), newResource);
82 assertThat(mergeStatus).isEqualTo(ActionStatus.OK);
83 verifyZeroInteractions(mergeBusinessLogic, groupsOperation);
87 public void whenOldOrNewGroupHasNoProperties_noNeedToMergeItsProperties() {
88 GroupDefinition oldGrpNoProps = createVspGroupWithProperties("grp1", "grp1");
89 GroupDefinition newGrpWithProps = createVspGroupWithProperties("grp1", "grp1", "prop1", "prop2");
91 GroupDefinition oldGrpWithProps = createVspGroupWithProperties("grp2", "grp2", "prop3");
92 GroupDefinition newGrpNoProps = createVspGroupWithProperties("grp2", "grp2");
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);
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);
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);
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);
134 private GroupDefinition createUserGroupWithProperties(String invariantName, String groupName, String ... propsNames) {
135 return createGroupWithProperties(invariantName, groupName, CreatedFrom.UI, propsNames);
138 private GroupDefinition createVspGroupWithProperties(String invariantName, String groupName, String ... propsNames) {
139 return createGroupWithProperties(invariantName, groupName, CreatedFrom.CSAR, propsNames);
142 private GroupDefinition createGroupWithProperties(String invariantName, String groupName, CreatedFrom createdFrom, String ... propsNames) {
143 GroupDefinitionBuilder groupDefinitionBuilder = GroupDefinitionBuilder.create()
144 .setUniqueId(invariantName)
146 .setCreatedFrom(createdFrom)
147 .setInvariantName(invariantName);
148 Stream.of(propsNames).forEach(groupDefinitionBuilder::addProperty);
149 return groupDefinitionBuilder.build();
152 private Resource createResourceWithGroups(GroupDefinition ... groups) {
153 ResourceBuilder resourceBuilder = new ResourceBuilder();
154 Stream.of(groups).forEach(resourceBuilder::addGroup);
155 return resourceBuilder.build();