Skip to content
InvitedRegistrationManagerTest.java 5.75 KiB
Newer Older
package it.inaf.ia2.gms.manager;

import it.inaf.ia2.gms.authn.SessionData;
import it.inaf.ia2.gms.model.Identity;
import it.inaf.ia2.gms.model.IdentityType;
import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.model.RapUser;
import it.inaf.ia2.gms.persistence.GroupsDAO;
import it.inaf.ia2.gms.persistence.InvitedRegistrationDAO;
import it.inaf.ia2.gms.persistence.LoggingDAO;
import it.inaf.ia2.gms.persistence.MembershipsDAO;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.InvitedRegistration;
import it.inaf.ia2.gms.rap.RapClient;
import it.inaf.ia2.gms.service.PermissionsService;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import javax.servlet.http.HttpSession;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import org.mockito.junit.MockitoJUnitRunner;

@RunWith(MockitoJUnitRunner.class)
public class InvitedRegistrationManagerTest {

    private static final String USER_ID = "USER_ID";
    private static final String EMAIL = "user@inaf.it";

    @Mock
    private GroupsDAO groupsDAO;
    @Mock
    private MembershipsDAO membershipsDAO;
    @Mock
    private PermissionsService permissionsService;
    @Mock
    private PermissionsManager permissionsManager;
    @Mock
    private InvitedRegistrationDAO invitedRegistrationDAO;
    @Mock
    private RapClient rapClient;
    @Mock
    private SessionData sessionData;
    @Mock
    private LoggingDAO loggingDAO;
    @Mock
    private HttpSession httpSession;

    @InjectMocks
    private InvitedRegistrationManager invitedRegistrationManager;

    @Before
    public void setUp() {
        UserAwareComponentTestUtil.setUser(invitedRegistrationManager, USER_ID);
    }

    @Test
    public void testAddInvitedRegistration() {

        Map<GroupEntity, Permission> groupsPermissions = new HashMap<>();
        GroupEntity groupEntity = new GroupEntity();
        groupEntity.setId("b");
        groupEntity.setPath("a.b");
        groupEntity.setName("B");
        groupsPermissions.put(groupEntity, Permission.MANAGE_MEMBERS);

        when(permissionsManager.getCurrentUserPermission(any())).thenReturn(Permission.ADMIN);

        invitedRegistrationManager.addInvitedRegistration("token_hash", EMAIL, groupsPermissions);

        verify(invitedRegistrationDAO, times(1)).addInvitedRegistration(any());
    }

    @Test
    public void testCompleteInvitedRegistrationIfNecessaryGetByEmail() {

        Map<String, Permission> map1 = new HashMap<>();
        map1.put("g1", Permission.MANAGE_MEMBERS);

        InvitedRegistration regFromToken = new InvitedRegistration()
                .setId("reg1")
                .setEmail(EMAIL)
                .setGroupsPermissions(map1);

        when(httpSession.getAttribute(eq("invited-registration"))).thenReturn(regFromToken);

        when(sessionData.getUserId()).thenReturn(USER_ID);

        RapUser user = new RapUser();
        user.setId(USER_ID);
        Identity identity = new Identity();
        identity.setType(IdentityType.EDU_GAIN);
        identity.setEmail(EMAIL);
        user.setIdentities(Collections.singletonList(identity));

        when(rapClient.getUser(eq(USER_ID))).thenReturn(user);

        Map<String, Permission> map2 = new HashMap<>();
        map2.put("g2", Permission.MANAGE_MEMBERS);

        InvitedRegistration reg2 = new InvitedRegistration()
                .setId("reg2")
                .setEmail(EMAIL)
                .setGroupsPermissions(map2);

        List<InvitedRegistration> registrations = new ArrayList<>();
        registrations.add(regFromToken);
        registrations.add(reg2);
        when(invitedRegistrationDAO.getInvitedRegistrationsFromEmailAddresses(any())).thenReturn(registrations);

        GroupEntity g1 = new GroupEntity();
        g1.setId("g1");
        GroupEntity g2 = new GroupEntity();
        g2.setId("g2");
        when(groupsDAO.findGroupById(eq("g1"))).thenReturn(Optional.of(g1));
        when(groupsDAO.findGroupById(eq("g2"))).thenReturn(Optional.of(g2));

        invitedRegistrationManager.completeInvitedRegistrationIfNecessary();

        verify(membershipsDAO, times(2)).addMember(any());
        verify(permissionsService, times(2)).addPermission(any(), any(), any());
    }

    @Test
    public void testCompleteInvitedRegistrationIfNecessaryGetByToken() {

        Map<String, Permission> map1 = new HashMap<>();
        map1.put("g1", Permission.MANAGE_MEMBERS);

        InvitedRegistration regFromToken = new InvitedRegistration()
                .setId("reg1")
                .setEmail(EMAIL)
                .setGroupsPermissions(map1);

        when(httpSession.getAttribute(eq("invited-registration"))).thenReturn(regFromToken);

        when(sessionData.getUserId()).thenReturn(USER_ID);

        RapUser user = new RapUser();
        user.setId(USER_ID);
        Identity identity = new Identity();
        identity.setType(IdentityType.EDU_GAIN);
        identity.setEmail("different-email");
        user.setIdentities(Collections.singletonList(identity));

        when(rapClient.getUser(eq(USER_ID))).thenReturn(user);

        GroupEntity g1 = new GroupEntity();
        g1.setId("g1");
        when(groupsDAO.findGroupById(eq("g1"))).thenReturn(Optional.of(g1));

        invitedRegistrationManager.completeInvitedRegistrationIfNecessary();

        verify(membershipsDAO, times(1)).addMember(any());
        verify(permissionsService, times(1)).addPermission(any(), any(), any());
    }
}