1 package org.openecomp.sdc.itempermissions.dao.impl;
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;
16 import java.util.stream.Collectors;
17 import java.util.stream.Stream;
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;
27 * Created by ayalaben on 7/6/2017
29 public class ItemPermissionsManagerImplTest {
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";
40 private PermissionsServices permissionsServicesMock;
42 private ItemManager itemManagerMock;
44 private SubscriptionService subscriptionServiceMock;
46 private NotificationPropagationManager notifierMock;
48 private ArgumentCaptor<Event> eventArgumentCaptor;
51 private ItemPermissionsManagerImpl permissionsManager;
55 public void setUp() throws Exception {
56 SessionContextProviderFactory.getInstance().createInterface().create(USER);
57 MockitoAnnotations.initMocks(this);
60 @Test(expectedExceptions = CoreException.class, expectedExceptionsMessageRegExp = "Permissions " +
61 "Error. The user does not have permission to perform this action.")
62 public void testUpdateItemPermissionsWhenNotAllowed() {
63 doReturn(false).when(permissionsServicesMock).isAllowed(ITEM1_ID, USER, ACTION);
66 .updateItemPermissions(ITEM1_ID, PERMISSION, Collections.singleton(AFFECTED_USER1),
71 public void testUpdateItemPermissions() {
72 doReturn(true).when(permissionsServicesMock).isAllowed(ITEM1_ID, USER, ACTION);
73 Item item = new Item();
74 item.setName("Item 1 Name");
75 doReturn(item).when(itemManagerMock).get(ITEM1_ID);
77 Set<String> addedUsersIds =
78 Stream.of(AFFECTED_USER1, AFFECTED_USER2).collect(Collectors.toSet());
79 Set<String> removedUsersIds = Collections.singleton(AFFECTED_USER3);
81 .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds);
83 verify(permissionsServicesMock)
84 .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds);
86 for (String addedUsersId : addedUsersIds) {
87 verifyCallsToNotificationsFramework(addedUsersId, true);
89 for (String removedUsersId : removedUsersIds) {
90 verifyCallsToNotificationsFramework(removedUsersId, false);
94 private void verifyCallsToNotificationsFramework(String affectedUser, boolean permissionGranted) {
95 verifyCallToSubscriptionService(affectedUser, permissionGranted);
96 verifyDirectNotificationCallParameters(affectedUser, permissionGranted);
99 private void verifyDirectNotificationCallParameters(String affectedUser, boolean permissionGranted) {
100 verify(notifierMock).directNotification(eventArgumentCaptor.capture(), Matchers.eq(affectedUser));
101 Event event = eventArgumentCaptor.getValue();
102 assertTrue(event.getEventType().equals(PERMISSION_CHANGED));
103 Map<String, Object> attributes = event.getAttributes();
104 assertEquals(attributes.get(PERMISSION_GRANTED), permissionGranted);
105 assertEquals(attributes.get(ITEM_ID_PROP), ITEM1_ID);
106 assertEquals(attributes.get(PERMISSION_ITEM), PERMISSION);
109 private void verifyCallToSubscriptionService(String affectedUser, boolean permissionGranted) {
110 if (permissionGranted) {
111 verify(subscriptionServiceMock).subscribe(affectedUser, ITEM1_ID);
113 verify(subscriptionServiceMock).unsubscribe(affectedUser, ITEM1_ID);