Skip to content
NestedGroupsIntegrationTest.java 7.02 KiB
Newer Older
package it.inaf.ia2.gms.persistence;

import it.inaf.ia2.gms.DataSourceConfig;
import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.gms.model.GroupNode;
import it.inaf.ia2.gms.model.PaginatedModelRequest;
import it.inaf.ia2.gms.model.Permission;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.PermissionEntity;
import it.inaf.ia2.gms.rap.RapClient;
import it.inaf.ia2.gms.service.GroupsTreeBuilder;
import it.inaf.ia2.gms.service.PermissionsService;
import java.util.List;
import javax.sql.DataSource;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.mockito.Mockito.mock;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@ContextConfiguration(classes = DataSourceConfig.class)
public class NestedGroupsIntegrationTest {

    @Autowired
    private DataSource dataSource;
    @Test
    public void testNestedGroupRetrieval() {

        GroupsDAO groupsDAO = new GroupsDAO(dataSource);
        PermissionsDAO permissionsDAO = new PermissionsDAO(dataSource);
        PermissionsService permissionsService = new PermissionsService(permissionsDAO, mock(RapClient.class));
        GroupsService groupsService = new GroupsService(groupsDAO, permissionsService);
        GroupsTreeBuilder groupsTreeBuilder = new GroupsTreeBuilder(groupsDAO, permissionsDAO);

        String userId = "USER_ID";
        // Test super admin
        PermissionEntity superAdminPermission = new PermissionEntity();
        superAdminPermission.setUserId(userId);
        superAdminPermission.setGroupId(GroupsService.ROOT);
        superAdminPermission.setPermission(Permission.ADMIN);
        superAdminPermission.setGroupPath("");
        permissionsDAO.createPermission(superAdminPermission);
        GroupEntity root = groupsService.getRoot();
        GroupEntity lbt = groupsService.addGroup(root, "LBT");
        GroupEntity tng = groupsService.addGroup(root, "TNG");
        GroupEntity radio = groupsService.addGroup(root, "Radio");
        GroupEntity lbtInaf = groupsService.addGroup(lbt, "INAF");
        GroupEntity lbtInafProgram1 = groupsService.addGroup(lbtInaf, "P1");
        GroupEntity lbtInafProgram2 = groupsService.addGroup(lbtInaf, "P2");

        PaginatedModelRequest request = new PaginatedModelRequest();
        request.setPaginatorPage(1);
        request.setPaginatorPageSize(50);

        // Test super admin - level 0 (ROOT)
        List<GroupNode> groupNodes = groupNodes = groupsTreeBuilder.listSubGroups(root.getId(), userId, request).getItems();
        assertEquals(3, groupNodes.size());
        GroupNode lbtGN = groupNodes.get(0);
        assertEquals("LBT", lbtGN.getGroupName());
        assertEquals(Permission.ADMIN, lbtGN.getPermission());
        assertTrue(lbtGN.isHasChildren());
        GroupNode radioGN = groupNodes.get(1);
        assertEquals("Radio", radioGN.getGroupName());
        assertEquals(Permission.ADMIN, radioGN.getPermission());
        assertFalse(radioGN.isHasChildren());
        GroupNode tngGN = groupNodes.get(2);
        assertEquals("TNG", tngGN.getGroupName());
        assertEquals(Permission.ADMIN, tngGN.getPermission());
        assertFalse(tngGN.isHasChildren());

        // Test super admin - level 1
        groupNodes = groupsTreeBuilder.listSubGroups(lbt.getId(), userId, request).getItems();
        assertEquals(1, groupNodes.size());
        GroupNode INAFGN = groupNodes.get(0);
        assertEquals("INAF", INAFGN.getGroupName());
        assertEquals(Permission.ADMIN, INAFGN.getPermission());
        assertTrue(INAFGN.isHasChildren());

        // Test super admin - level 2
        groupNodes = groupsTreeBuilder.listSubGroups(lbtInaf.getId(), userId, request).getItems();
        assertEquals(2, groupNodes.size());
        GroupNode p1 = groupNodes.get(0);
        assertEquals("P1", p1.getGroupName());
        assertEquals(Permission.ADMIN, p1.getPermission());
        assertFalse(p1.isHasChildren());
        GroupNode p2 = groupNodes.get(1);
        assertEquals("P2", p2.getGroupName());
        assertEquals(Permission.ADMIN, p2.getPermission());
        assertFalse(p2.isHasChildren());

        // Setup lower permissions
        permissionsDAO.deletePermission(superAdminPermission.getGroupId(),
                superAdminPermission.getUserId(), superAdminPermission.getPermission());
        PermissionEntity p1Permission = new PermissionEntity();
        p1Permission.setUserId(userId);
        p1Permission.setGroupId(lbtInafProgram1.getId());
        p1Permission.setPermission(Permission.MANAGE_MEMBERS);
        p1Permission.setGroupPath(lbtInafProgram1.getPath());
        permissionsDAO.createPermission(p1Permission);
        PermissionEntity lbtPermission = new PermissionEntity();
        lbtPermission.setUserId(userId);
        lbtPermission.setGroupId(lbtInaf.getId());
        lbtPermission.setPermission(Permission.VIEW_MEMBERS);
        lbtPermission.setGroupPath(lbtInaf.getPath());
        permissionsDAO.createPermission(lbtPermission);
        PermissionEntity radioPermission = new PermissionEntity();
        radioPermission.setUserId(userId);
        radioPermission.setGroupId(radio.getId());
        radioPermission.setPermission(Permission.VIEW_MEMBERS);
        radioPermission.setGroupPath(radio.getPath());
        permissionsDAO.createPermission(radioPermission);

        // Check level 0 (ROOT)
        groupNodes = groupsTreeBuilder.listSubGroups(root.getId(), userId, request).getItems();
        assertEquals(2, groupNodes.size());
        lbtGN = groupNodes.get(0);
        assertEquals("LBT", lbtGN.getGroupName());
        assertEquals(Permission.TRAVERSE, lbtGN.getPermission());
        assertTrue(lbtGN.isHasChildren());
        radioGN = groupNodes.get(1);
        assertEquals("Radio", radioGN.getGroupName());
        assertEquals(Permission.VIEW_MEMBERS, radioGN.getPermission());
        assertFalse(radioGN.isHasChildren());

        // Check level 1
        groupNodes = groupsTreeBuilder.listSubGroups(lbt.getId(), userId, request).getItems();
        assertEquals(1, groupNodes.size());
        INAFGN = groupNodes.get(0);
        assertEquals("INAF", INAFGN.getGroupName());
        assertEquals(Permission.VIEW_MEMBERS, INAFGN.getPermission());
        assertTrue(INAFGN.isHasChildren());

        // Check level 2
        groupNodes = groupsTreeBuilder.listSubGroups(lbtInaf.getId(), userId, request).getItems();
        assertEquals(2, groupNodes.size());
        p1 = groupNodes.get(0);
        assertEquals("P1", p1.getGroupName());
        assertEquals(Permission.MANAGE_MEMBERS, p1.getPermission());
        assertFalse(p1.isHasChildren());
        p2 = groupNodes.get(1);
        assertEquals("P2", p2.getGroupName());
        assertEquals(Permission.VIEW_MEMBERS, p2.getPermission());
        assertFalse(p2.isHasChildren());
    }