re base code
[sdc.git] / openecomp-be / backend / openecomp-sdc-item-permissions-manager / src / test / java / org / openecomp / sdc / itempermissions / dao / impl / PermissionsManagerImplTest.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *   http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16
17 package org.openecomp.sdc.itempermissions.dao.impl;
18
19 import org.mockito.*;
20 import org.openecomp.sdc.common.errors.CoreException;
21 import org.openecomp.sdc.common.session.SessionContextProviderFactory;
22 import org.openecomp.sdc.itempermissions.PermissionsServices;
23 import org.openecomp.sdc.notification.dtos.Event;
24 import org.openecomp.sdc.notification.services.NotificationPropagationManager;
25 import org.openecomp.sdc.notification.services.SubscriptionService;
26 import org.openecomp.sdc.versioning.AsdcItemManager;
27 import org.openecomp.sdc.versioning.types.Item;
28 import org.testng.annotations.BeforeMethod;
29 import org.testng.annotations.Test;
30
31 import java.util.Collections;
32 import java.util.HashSet;
33 import java.util.Map;
34 import java.util.Set;
35 import java.util.stream.Collectors;
36 import java.util.stream.Stream;
37
38 import static org.mockito.Mockito.doReturn;
39 import static org.mockito.Mockito.verify;
40 import static org.openecomp.sdc.itempermissions.notifications.NotificationConstants.*;
41 import static org.testng.Assert.assertEquals;
42 import static org.testng.Assert.assertTrue;
43
44 /**
45  * Created by ayalaben on 7/6/2017
46  */
47 public class PermissionsManagerImplTest {
48
49   private static final String ITEM1_ID = "1";
50   private static final String PERMISSION = "Contributor";
51   private static final String ACTION = "Change_Item_Permissions";
52   private static final String USER = "user";
53   private static final String AFFECTED_USER1 = "affected_user1";
54   private static final String AFFECTED_USER2 = "affected_user2";
55   private static final String AFFECTED_USER3 = "affected_user3";
56   private static final String tenant = "dox";
57
58   @Mock
59   private PermissionsServices permissionsServicesMock;
60   @Mock
61   private AsdcItemManager asdcItemManagerMock;
62   @Mock
63   private SubscriptionService subscriptionServiceMock;
64   @Mock
65   private NotificationPropagationManager notifierMock;
66   @Captor
67   private ArgumentCaptor<Event> eventArgumentCaptor;
68
69   @InjectMocks
70   private PermissionsManagerImpl permissionsManager;
71
72
73   @BeforeMethod
74   public void setUp() throws Exception {
75     SessionContextProviderFactory.getInstance().createInterface().create(USER,
76         tenant);
77     MockitoAnnotations.initMocks(this);
78   }
79
80   @Test(expectedExceptions = CoreException.class, expectedExceptionsMessageRegExp = "Permissions " +
81           "Error. The user does not have permission to perform this action.")
82   public void testUpdateItemPermissionsWhenNotAllowed() {
83     doReturn(false).when(permissionsServicesMock).isAllowed(ITEM1_ID, USER, ACTION);
84
85     permissionsManager
86             .updateItemPermissions(ITEM1_ID, PERMISSION, Collections.singleton(AFFECTED_USER1),
87                     new HashSet<>());
88   }
89
90   @Test
91   public void testUpdateItemPermissions() {
92     doReturn(true).when(permissionsServicesMock).isAllowed(ITEM1_ID, USER, ACTION);
93     Item item = new Item();
94     item.setName("Item 1 Name");
95     doReturn(item).when(asdcItemManagerMock).get(ITEM1_ID);
96
97     Set<String> addedUsersIds =
98             Stream.of(AFFECTED_USER1, AFFECTED_USER2).collect(Collectors.toSet());
99     Set<String> removedUsersIds = Collections.singleton(AFFECTED_USER3);
100     permissionsManager
101             .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds);
102
103     verify(permissionsServicesMock)
104             .updateItemPermissions(ITEM1_ID, PERMISSION, addedUsersIds, removedUsersIds);
105
106     for (String addedUsersId : addedUsersIds) {
107       verifyCallsToNotificationsFramework(addedUsersId, true);
108     }
109     for (String removedUsersId : removedUsersIds) {
110       verifyCallsToNotificationsFramework(removedUsersId, false);
111     }
112   }
113
114   @Test
115   public void testListUserPermittedItems(){
116     permissionsManager.listUserPermittedItems(AFFECTED_USER1,PERMISSION);
117
118     verify(permissionsServicesMock)
119             .listUserPermittedItems(AFFECTED_USER1, PERMISSION);
120
121   }
122
123   private void verifyCallsToNotificationsFramework(String affectedUser, boolean permissionGranted) {
124     verifyCallToSubscriptionService(affectedUser, permissionGranted);
125     verifyDirectNotificationCallParameters(affectedUser, permissionGranted);
126   }
127
128   private void verifyDirectNotificationCallParameters(String affectedUser, boolean permissionGranted) {
129     verify(notifierMock).directNotification(eventArgumentCaptor.capture(), Matchers.eq(affectedUser));
130     Event event = eventArgumentCaptor.getValue();
131     assertTrue(event.getEventType().equals(PERMISSION_CHANGED));
132     Map<String, Object> attributes = event.getAttributes();
133     assertEquals(attributes.get(PERMISSION_GRANTED), permissionGranted);
134     assertEquals(attributes.get(ITEM_ID_PROP), ITEM1_ID);
135     assertEquals(attributes.get(PERMISSION_ITEM), PERMISSION);
136   }
137
138   private void verifyCallToSubscriptionService(String affectedUser, boolean permissionGranted) {
139     if (permissionGranted) {
140       verify(subscriptionServiceMock).subscribe(affectedUser, ITEM1_ID);
141     } else {
142       verify(subscriptionServiceMock).unsubscribe(affectedUser, ITEM1_ID);
143     }
144   }
145
146
147 }