Newer
Older
package it.inaf.ia2.gms.persistence;
import io.zonky.test.db.AutoConfigureEmbeddedDatabase;
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 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.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@AutoConfigureEmbeddedDatabase(beanName = "dataSource")
public class NestedGroupsIntegrationTest {
@Autowired
private PermissionsDAO permissionsDAO;
private GroupsService groupsService;
private GroupsTreeBuilder groupsTreeBuilder;
@Test
public void testNestedGroupRetrieval() {
PermissionEntity superAdminPermission = new PermissionEntity();
superAdminPermission.setUserId(userId);
superAdminPermission.setGroupId(GroupsService.ROOT);
superAdminPermission.setPermission(Permission.ADMIN);
superAdminPermission.setGroupPath("");
permissionsDAO.createPermission(superAdminPermission);
GroupEntity root = groupsService.getGroupById(GroupsService.ROOT);
GroupEntity lbt = groupsService.addGroup(GroupsService.ROOT, "LBT", userId);
GroupEntity tng = groupsService.addGroup(GroupsService.ROOT, "TNG", userId);
GroupEntity radio = groupsService.addGroup(GroupsService.ROOT, "Radio", userId);
GroupEntity lbtInaf = groupsService.addGroup(lbt.getId(), "INAF", userId);
GroupEntity lbtInafProgram1 = groupsService.addGroup(lbtInaf.getId(), "P1", userId);
GroupEntity lbtInafProgram2 = groupsService.addGroup(lbtInaf.getId(), "P2", userId);
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);
permissionsDAO.createPermission(p1Permission);
PermissionEntity lbtPermission = new PermissionEntity();
lbtPermission.setUserId(userId);
lbtPermission.setGroupId(lbtInaf.getId());
lbtPermission.setPermission(Permission.VIEW_MEMBERS);
permissionsDAO.createPermission(lbtPermission);
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.TRAVERSE, 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());