Newer
Older
package it.inaf.ia2.gms.persistence;
import it.inaf.ia2.gms.service.GroupsService;
import it.inaf.ia2.gms.model.PaginatedModelRequest;
import it.inaf.ia2.gms.persistence.model.GroupEntity;
import it.inaf.ia2.gms.persistence.model.PermissionEntity;
import it.inaf.ia2.gms.service.GroupsTreeBuilder;
import it.inaf.ia2.gms.service.PermissionsService;
import java.util.List;
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 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
@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);
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);
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);
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());