Onboarding foundation changes
[sdc.git] / openecomp-be / backend / openecomp-sdc-item-permissions-manager / src / test / java / org / openecomp / sdc / itempermissions / dao / impl / ItemPermissionsManagerImplTest.java
1 package org.openecomp.sdc.itempermissions.dao.impl;
2
3 import org.mockito.*;
4 import org.openecomp.sdc.common.errors.CoreException;
5 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
6 import org.openecomp.sdc.itempermissions.PermissionsServices;
7 import org.openecomp.sdc.notification.dtos.Event;
8 import org.openecomp.sdc.notification.services.NotificationPropagationManager;
9 import org.openecomp.sdc.notification.services.SubscriptionService;
10 import org.openecomp.sdc.versioning.ItemManager;
11 import org.openecomp.sdc.versioning.types.Item;
12 import org.testng.annotations.BeforeMethod;
13 import org.testng.annotations.Test;
14
15 import java.util.*;
16 import java.util.stream.Collectors;
17 import java.util.stream.Stream;
18
19 import static org.mockito.Mockito.doReturn;
20 import static org.mockito.Mockito.verify;
21 import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.*;
22 import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.PERMISSION_CHANGED;
23 import static org.testng.Assert.assertEquals;
24 import static org.testng.Assert.assertTrue;
25
26 /**
27  * Created by ayalaben on 7/6/2017
28  */
29 public class ItemPermissionsManagerImplTest {
30
31   private static final String ITEM1_ID = "1";
32   private static final String PERMISSION = "Contributor";
33   private static final String ACTION = "Change_Item_Permissions";
34   private static final String USER = "user";
35   private static final String AFFECTED_USER1 = "affected_user1";
36   private static final String AFFECTED_USER2 = "affected_user2";
37   private static final String AFFECTED_USER3 = "affected_user3";
38   private static final String tenant = "dox";
39
40   @Mock
41   private PermissionsServices permissionsServicesMock;
42   @Mock
43   private ItemManager itemManagerMock;
44   @Mock
45   private SubscriptionService subscriptionServiceMock;
46   @Mock
47   private NotificationPropagationManager notifierMock;
48   @Captor
49   private ArgumentCaptor<Event> eventArgumentCaptor;
50
51   @InjectMocks
52   private ItemPermissionsManagerImpl permissionsManager;
53
54
55   @BeforeMethod
56   public void setUp() throws Exception {
57     SessionContextProviderFactory.getInstance().createInterface().create(USER, tenant);
58     MockitoAnnotations.initMocks(this);
59   }
60
61   @Test(expectedExceptions = CoreException.class, expectedExceptionsMessageRegExp = "Permissions " +
62           "Error. The user does not have permission to perform this action.")
63   public void testUpdateItemPermissionsWhenNotAllowed() {
64     doReturn(false).when(permissionsServicesMock).isAllowed(ITEM1_ID, USER, ACTION);
65
66     permissionsManager
67             .updateItemPermissions(ITEM1_ID, PERMISSION, Collections.singleton(AFFECTED_USER1),
68                     new HashSet<>());
69   }
70
71   @Test
72   public void testUpdateItemPermissions() {
73     doReturn(true).when(permissionsServicesMock).isAllowed(ITEM1_ID, USER, ACTION);
74     Item item = new Item();
75     item.setName("Item 1 Name");
76     doReturn(item).when(itemManagerMock).get(ITEM1_ID);
77
78     Set<String> addedUsersIds =
79             Stream.of(AFFECTED_USER1, AFFECTED_USER2).collect(Collectors.toSet());
80     Set<String> removedUsersIds = Collections.singleton(AFFECTED_USER3);
81     permissionsManager
82             .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds);
83
84     verify(permissionsServicesMock)
85             .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds);
86
87     for (String addedUsersId : addedUsersIds) {
88       verifyCallsToNotificationsFramework(addedUsersId, true);
89     }
90     for (String removedUsersId : removedUsersIds) {
91       verifyCallsToNotificationsFramework(removedUsersId, false);
92     }
93   }
94
95   private void verifyCallsToNotificationsFramework(String affectedUser, boolean permissionGranted) {
96     verifyCallToSubscriptionService(affectedUser, permissionGranted);
97     verifyDirectNotificationCallParameters(affectedUser, permissionGranted);
98   }
99
100   private void verifyDirectNotificationCallParameters(String affectedUser, boolean permissionGranted) {
101     verify(notifierMock).directNotification(eventArgumentCaptor.capture(), Matchers.eq(affectedUser));
102     Event event = eventArgumentCaptor.getValue();
103     assertTrue(event.getEventType().equals(PERMISSION_CHANGED));
104     Map<String, Object> attributes = event.getAttributes();
105     assertEquals(attributes.get(PERMISSION_GRANTED), permissionGranted);
106     assertEquals(attributes.get(ITEM_ID_PROP), ITEM1_ID);
107     assertEquals(attributes.get(PERMISSION_ITEM), PERMISSION);
108   }
109
110   private void verifyCallToSubscriptionService(String affectedUser, boolean permissionGranted) {
111     if (permissionGranted) {
112       verify(subscriptionServiceMock).subscribe(affectedUser, ITEM1_ID);
113     } else {
114       verify(subscriptionServiceMock).unsubscribe(affectedUser, ITEM1_ID);
115     }
116   }
117
118
119 }