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";
38 private static final String tenant = "dox";
41 private PermissionsServices permissionsServicesMock;
43 private ItemManager itemManagerMock;
45 private SubscriptionService subscriptionServiceMock;
47 private NotificationPropagationManager notifierMock;
49 private ArgumentCaptor<Event> eventArgumentCaptor;
52 private ItemPermissionsManagerImpl permissionsManager;
56 public void setUp() throws Exception {
57 SessionContextProviderFactory.getInstance().createInterface().create(USER, tenant);
58 MockitoAnnotations.initMocks(this);
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);
67 .updateItemPermissions(ITEM1_ID, PERMISSION, Collections.singleton(AFFECTED_USER1),
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);
78 Set<String> addedUsersIds =
79 Stream.of(AFFECTED_USER1, AFFECTED_USER2).collect(Collectors.toSet());
80 Set<String> removedUsersIds = Collections.singleton(AFFECTED_USER3);
82 .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds);
84 verify(permissionsServicesMock)
85 .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds);
87 for (String addedUsersId : addedUsersIds) {
88 verifyCallsToNotificationsFramework(addedUsersId, true);
90 for (String removedUsersId : removedUsersIds) {
91 verifyCallsToNotificationsFramework(removedUsersId, false);
95 private void verifyCallsToNotificationsFramework(String affectedUser, boolean permissionGranted) {
96 verifyCallToSubscriptionService(affectedUser, permissionGranted);
97 verifyDirectNotificationCallParameters(affectedUser, permissionGranted);
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);
110 private void verifyCallToSubscriptionService(String affectedUser, boolean permissionGranted) {
111 if (permissionGranted) {
112 verify(subscriptionServiceMock).subscribe(affectedUser, ITEM1_ID);
114 verify(subscriptionServiceMock).unsubscribe(affectedUser, ITEM1_ID);