re base code
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / instance / GroupMembersUpdateOperationTest.java
@@ -1,22 +1,15 @@
-package org.openecomp.sdc.be.components.impl.version;
-
-import static java.util.Collections.emptyMap;
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.mockito.ArgumentMatchers.eq;
-import static org.mockito.Mockito.when;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Stream;
+package org.openecomp.sdc.be.components.impl.instance;
 
+import fj.data.Either;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
 import org.mockito.Captor;
-import org.mockito.InjectMocks;
 import org.mockito.Mock;
 import org.mockito.junit.MockitoJUnitRunner;
+import org.openecomp.sdc.be.auditing.impl.AuditingManager;
+import org.openecomp.sdc.be.components.impl.group.GroupMembersUpdater;
 import org.openecomp.sdc.be.components.utils.ComponentInstanceBuilder;
 import org.openecomp.sdc.be.components.utils.GroupDefinitionBuilder;
 import org.openecomp.sdc.be.components.utils.ResourceBuilder;
@@ -30,7 +23,16 @@ import org.openecomp.sdc.be.model.Resource;
 import org.openecomp.sdc.be.model.jsontitan.operations.GroupsOperation;
 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
 
-import fj.data.Either;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Stream;
+
+import static java.util.Collections.emptyMap;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.ArgumentMatchers.anyList;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
 
 @RunWith(MockitoJUnitRunner.class)
 public class GroupMembersUpdateOperationTest {
@@ -38,28 +40,26 @@ public class GroupMembersUpdateOperationTest {
     private static final String CONTAINER_ID = "containerId";
     private static final String INSTANCE_ID_PRE_CHANGE = "inst2";
     private static final String INSTANCE_ID_POST_CHANGE = "newInst2";
-    @InjectMocks
     private GroupMembersUpdateOperation testInstance;
     @Mock
     private GroupsOperation groupsOperation;
-    @Mock
-    private ComponentsUtils componentsUtils;
-
     @Captor
     private ArgumentCaptor<List<GroupDataDefinition>> updatedGroupsCaptor;
     private GroupDefinition group1, group2, group3;
     private Resource container;
     private ComponentInstance prevInst2Version, currInst2Version;
-    private static final ComponentInstance DONT_CARE = new ComponentInstance();
+    private static final ComponentInstance DONT_CARE_WHICH_INST = new ComponentInstance();
+    private static final String DONT_CARE_WHICH_ID = "someString";
 
     @Before
     public void setUp() throws Exception {
+        testInstance = new GroupMembersUpdateOperation(groupsOperation, new ComponentsUtils(mock(AuditingManager.class)), new GroupMembersUpdater());
         group1 = createGroupWithMembers("group1", "inst1", INSTANCE_ID_PRE_CHANGE);
-        group2 = createGroupWithMembers("group2", "inst1", "inst2", "inst3");
+        group2 = createGroupWithMembers("group2", "inst1", INSTANCE_ID_PRE_CHANGE, "inst3");
         group3 = createGroupWithMembers("group3", "inst1", "inst3");
         container = new ResourceBuilder()
-                .addGroups(group1)
-                .addGroups(group2)
+                .addGroup(group1)
+                .addGroup(group2)
                 .setUniqueId(CONTAINER_ID)
                 .setComponentType(ComponentTypeEnum.RESOURCE)
                 .build();
@@ -72,60 +72,114 @@ public class GroupMembersUpdateOperationTest {
     }
 
     @Test
-    public void whenNoGroupsOnContainer_returnOk() {
-        ActionStatus actionStatus = testInstance.onChangeVersion(new Resource(), DONT_CARE, DONT_CARE);
+    public void onChangeVersion_whenNoGroupsOnContainer_returnOk() {
+        ActionStatus actionStatus = testInstance.onChangeVersion(new Resource(), DONT_CARE_WHICH_INST, DONT_CARE_WHICH_INST);
         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
     }
 
     @Test
-    public void whenEmptyListOfGroups_returnOk() {
+    public void onChangeVersion_whenEmptyListOfGroups_returnOk() {
         Resource resource = new Resource();
         resource.setGroups(new ArrayList<>());
-        ActionStatus actionStatus = testInstance.onChangeVersion(resource, DONT_CARE, DONT_CARE);
+        ActionStatus actionStatus = testInstance.onChangeVersion(resource, DONT_CARE_WHICH_INST, DONT_CARE_WHICH_INST);
         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
     }
 
     @Test
-    public void whenGroupsHasNoMembers_returnOk() {
+    public void onChangeVersion_whenGroupsHasNoMembers_returnOk() {
         GroupDefinition group1 = new GroupDefinition();
         group1.setMembers(emptyMap());
         GroupDefinition group2 = new GroupDefinition();
         group2.setMembers(emptyMap());
         Resource container = new ResourceBuilder()
-                .addGroups(group1)
-                .addGroups(group2)
+                .addGroup(group1)
+                .addGroup(group2)
                 .build();
         ComponentInstance prevInstance = new ComponentInstanceBuilder().setId("inst1").build();
-        ActionStatus actionStatus = testInstance.onChangeVersion(container, prevInstance, DONT_CARE);
+        ActionStatus actionStatus = testInstance.onChangeVersion(container, prevInstance, DONT_CARE_WHICH_INST);
         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
     }
 
     @Test
-    public void whenPrevInstanceIsNotAMemberOfAnyGroup_returnOk() {
+    public void onChangeVersion_whenPrevInstanceIsNotAMemberOfAnyGroup_returnOk() {
         ComponentInstance prevInstance = new ComponentInstanceBuilder().setId("nonMemberInst").build();
-        ActionStatus actionStatus = testInstance.onChangeVersion(container, prevInstance, DONT_CARE);
+        ActionStatus actionStatus = testInstance.onChangeVersion(container, prevInstance, DONT_CARE_WHICH_INST);
         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
     }
 
     @Test
-    public void whenGroupHasPrevInstanceAsMember_replaceWithNewInstanceId_updateReplacedGroups() {
+    public void onChangeVersion_whenGroupHasPrevInstanceAsMember_replaceWithNewInstanceId_updateReplacedGroups() {
         verifyAllGroupsHasPrevInstancesAsMembers();
-        when(groupsOperation.updateGroups(eq(container), updatedGroupsCaptor.capture())).thenReturn(Either.left(null));
+        when(groupsOperation.updateGroups(eq(container), updatedGroupsCaptor.capture(), eq(false))).thenReturn(Either.left(null));
         ActionStatus actionStatus = testInstance.onChangeVersion(container, prevInst2Version, currInst2Version);
         assertThat(actionStatus).isEqualTo(ActionStatus.OK);
+        assertUpdatedGroups(updatedGroupsCaptor.getValue(), group1, group2);
         verifyGroupWithPrevInstanceMemberWereReplaced();
-        assertThat(updatedGroupsCaptor.getValue())
-                .containsExactlyInAnyOrder(group1, group2);
     }
 
     @Test
-    public void whenFailingToUpdateGroups_propagateError() {
-        when(groupsOperation.updateGroups(eq(container), updatedGroupsCaptor.capture())).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
-        when(componentsUtils.convertFromStorageResponse(StorageOperationStatus.NOT_FOUND, ComponentTypeEnum.RESOURCE)).thenCallRealMethod();
+    public void onChangeVersion_whenFailingToUpdateGroups_propagateError() {
+        when(groupsOperation.updateGroups(eq(container), updatedGroupsCaptor.capture(), eq(false))).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
         ActionStatus actionStatus = testInstance.onChangeVersion(container, prevInst2Version, currInst2Version);
         assertThat(actionStatus).isEqualTo(ActionStatus.RESOURCE_NOT_FOUND);
     }
 
+    @Test
+    public void onDeleteInstance_whenNoGroupsOnContainer_returnOk() {
+        ActionStatus actionStatus = testInstance.onDelete(new Resource(), DONT_CARE_WHICH_ID);
+        assertThat(actionStatus).isEqualTo(ActionStatus.OK);
+    }
+
+    @Test
+    public void onDeleteInstance_whenEmptyListOfGroups_returnOk() {
+        Resource resource = new Resource();
+        resource.setGroups(new ArrayList<>());
+        ActionStatus actionStatus = testInstance.onDelete(resource, DONT_CARE_WHICH_ID);
+        assertThat(actionStatus).isEqualTo(ActionStatus.OK);
+    }
+
+    @Test
+    public void onDeleteInstance_whenGroupsHasNoMembers_returnOk() {
+        GroupDefinition group1 = new GroupDefinition();
+        group1.setMembers(emptyMap());
+        GroupDefinition group2 = new GroupDefinition();
+        group2.setMembers(emptyMap());
+        Resource container = new ResourceBuilder()
+                .addGroup(group1)
+                .addGroup(group2)
+                .build();
+        ActionStatus actionStatus = testInstance.onDelete(container, "inst1");
+        assertThat(actionStatus).isEqualTo(ActionStatus.OK);
+    }
+
+    @Test
+    public void onDeleteInstance_whenDeletedInstanceIsNotAMemberOfAnyGroup_returnOk() {
+        ActionStatus actionStatus = testInstance.onDelete(container, "nonMemberInst");
+        assertThat(actionStatus).isEqualTo(ActionStatus.OK);
+    }
+
+    @Test
+    public void onDeleteInstance_removeInstanceIdFromGroupMember() {
+        when(groupsOperation.updateGroups(eq(container), updatedGroupsCaptor.capture(), eq(false))).thenReturn(Either.left(null));
+        ActionStatus actionStatus = testInstance.onDelete(container, INSTANCE_ID_PRE_CHANGE);
+        assertThat(actionStatus).isEqualTo(ActionStatus.OK);
+        assertUpdatedGroups(updatedGroupsCaptor.getValue(), group1, group2);
+        assertGroupMembersIds(group1, "inst1");
+        assertGroupMembersIds(group2, "inst1", "inst3");
+    }
+
+    @Test
+    public void onDeleteInstance_whenGroupsUpdateFails_propagateTheFailure() {
+        when(groupsOperation.updateGroups(eq(container), anyList(), eq(false))).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
+        ActionStatus actionStatus = testInstance.onDelete(container, INSTANCE_ID_PRE_CHANGE);
+        assertThat(actionStatus).isEqualTo(ActionStatus.RESOURCE_NOT_FOUND);
+    }
+
+    private void assertUpdatedGroups(List<GroupDataDefinition> actual, GroupDataDefinition ... expected) {
+        assertThat(actual)
+                .containsExactlyInAnyOrder(expected);
+    }
+
     private void verifyGroupWithPrevInstanceMemberWereReplaced() {
         assertGroupMembersIds(group1, "inst1", INSTANCE_ID_POST_CHANGE);
         assertGroupMembersIds(group2, "inst1", INSTANCE_ID_POST_CHANGE, "inst3");
@@ -145,7 +199,7 @@ public class GroupMembersUpdateOperationTest {
 
     private GroupDefinition createGroupWithMembers(String groupId, String ... membersIds) {
         GroupDefinitionBuilder groupDefinitionBuilder = GroupDefinitionBuilder.create();
-        Stream.of(membersIds).forEach(memberId -> groupDefinitionBuilder.addMember(memberId + "name", memberId));
+        Stream.of(membersIds).forEach(groupDefinitionBuilder::addMember);
         groupDefinitionBuilder.setUniqueId(groupId);
         return groupDefinitionBuilder.build();
     }