98154b3eaa60dd8a867c06f8b30ee0adf3614474
[sdc.git] /
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
39   @Mock
40   private PermissionsServices permissionsServicesMock;
41   @Mock
42   private ItemManager itemManagerMock;
43   @Mock
44   private SubscriptionService subscriptionServiceMock;
45   @Mock
46   private NotificationPropagationManager notifierMock;
47   @Captor
48   private ArgumentCaptor<Event> eventArgumentCaptor;
49
50   @InjectMocks
51   private ItemPermissionsManagerImpl permissionsManager;
52
53
54   @BeforeMethod
55   public void setUp() throws Exception {
56     SessionContextProviderFactory.getInstance().createInterface().create(USER);
57     MockitoAnnotations.initMocks(this);
58   }
59
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);
64
65     permissionsManager
66             .updateItemPermissions(ITEM1_ID, PERMISSION, Collections.singleton(AFFECTED_USER1),
67                     new HashSet<>());
68   }
69
70   @Test
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);
76
77     Set<String> addedUsersIds =
78             Stream.of(AFFECTED_USER1, AFFECTED_USER2).collect(Collectors.toSet());
79     Set<String> removedUsersIds = Collections.singleton(AFFECTED_USER3);
80     permissionsManager
81             .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds);
82
83     verify(permissionsServicesMock)
84             .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds);
85
86     for (String addedUsersId : addedUsersIds) {
87       verifyCallsToNotificationsFramework(addedUsersId, true);
88     }
89     for (String removedUsersId : removedUsersIds) {
90       verifyCallsToNotificationsFramework(removedUsersId, false);
91     }
92   }
93
94   private void verifyCallsToNotificationsFramework(String affectedUser, boolean permissionGranted) {
95     verifyCallToSubscriptionService(affectedUser, permissionGranted);
96     verifyDirectNotificationCallParameters(affectedUser, permissionGranted);
97   }
98
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);
107   }
108
109   private void verifyCallToSubscriptionService(String affectedUser, boolean permissionGranted) {
110     if (permissionGranted) {
111       verify(subscriptionServiceMock).subscribe(affectedUser, ITEM1_ID);
112     } else {
113       verify(subscriptionServiceMock).unsubscribe(affectedUser, ITEM1_ID);
114     }
115   }
116
117
118 }