blob: 25a1b365a422290030d65c08ca70932dd0a1e59b [file] [log] [blame]
package de.ids_mannheim.korap.dao;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertThrows;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
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.SpringJUnit4ClassRunner;
import de.ids_mannheim.korap.config.FullConfiguration;
import de.ids_mannheim.korap.constant.GroupMemberStatus;
import de.ids_mannheim.korap.constant.PredefinedRole;
import de.ids_mannheim.korap.constant.QueryAccessStatus;
import de.ids_mannheim.korap.constant.QueryType;
import de.ids_mannheim.korap.constant.ResourceType;
import de.ids_mannheim.korap.constant.UserGroupStatus;
import de.ids_mannheim.korap.entity.QueryDO;
import de.ids_mannheim.korap.entity.Role;
import de.ids_mannheim.korap.entity.UserGroup;
import de.ids_mannheim.korap.entity.UserGroupMember;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.user.User.CorpusAccess;
import edu.emory.mathcs.backport.java.util.Collections;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:test-config.xml")
public class UserGroupDaoTest {
@Autowired
private UserGroupDao userGroupDao;
@Autowired
private QueryDao virtualCorpusDao;
@Autowired
private RoleDao roleDao;
@Autowired
private FullConfiguration config;
@Test
public void createDeleteNewUserGroup () throws KustvaktException {
String groupName = "test group";
String createdBy = "test class";
// create group
int groupId = userGroupDao.createGroup(groupName, null, createdBy,
UserGroupStatus.ACTIVE);
// retrieve group
UserGroup group = userGroupDao.retrieveGroupById(groupId, true);
assertEquals(groupName, group.getName());
assertEquals(createdBy, group.getCreatedBy());
assertEquals(UserGroupStatus.ACTIVE, group.getStatus());
assertNull(group.getDeletedBy());
// group member
List<UserGroupMember> members = group.getMembers();
assertEquals(1, members.size());
UserGroupMember m = members.get(0);
assertEquals(GroupMemberStatus.ACTIVE, m.getStatus());
assertEquals(createdBy, m.getCreatedBy());
assertEquals(createdBy, m.getUserId());
// member roles
Set<Role> roles = roleDao.retrieveRoleByGroupMemberId(m.getId());
assertEquals(2, roles.size());
ArrayList<Role> roleList = new ArrayList<>(2);
roleList.addAll(roles);
Collections.sort(roleList);
assertEquals(PredefinedRole.USER_GROUP_ADMIN.getId(),
roleList.get(0).getId());
assertEquals(PredefinedRole.VC_ACCESS_ADMIN.getId(),
roleList.get(1).getId());
//retrieve VC by group
List<QueryDO> vc = virtualCorpusDao.retrieveQueryByGroup(groupId);
assertEquals(0, vc.size());
// soft delete group
userGroupDao.deleteGroup(groupId, createdBy,
config.isSoftDeleteGroup());
group = userGroupDao.retrieveGroupById(groupId);
assertEquals(UserGroupStatus.DELETED, group.getStatus());
// hard delete
userGroupDao.deleteGroup(groupId, createdBy, false);
KustvaktException exception = assertThrows(KustvaktException.class, () -> {
userGroupDao.retrieveGroupById(groupId);
});
assertEquals(StatusCodes.NO_RESOURCE_FOUND,
exception.getStatusCode().intValue());
}
@Test
public void retrieveGroupWithMembers () throws KustvaktException {
// dory group
List<UserGroupMember> members =
userGroupDao.retrieveGroupById(2, true).getMembers();
assertEquals(4, members.size());
UserGroupMember m = members.get(1);
Set<Role> roles = m.getRoles();
assertEquals(2, roles.size());
List<Role> sortedRoles = new ArrayList<>(roles);
Collections.sort(sortedRoles);
assertEquals(PredefinedRole.USER_GROUP_MEMBER.name(),
sortedRoles.get(0).getName());
assertEquals(PredefinedRole.VC_ACCESS_MEMBER.name(),
sortedRoles.get(1).getName());
}
@Test
public void retrieveGroupByUserId () throws KustvaktException {
List<UserGroup> group = userGroupDao.retrieveGroupByUserId("dory");
assertEquals(2, group.size());
group = userGroupDao.retrieveGroupByUserId("pearl");
assertEquals(0, group.size());
}
@Test
public void addVCToGroup () throws KustvaktException {
// dory group
int groupId = 2;
UserGroup group = userGroupDao.retrieveGroupById(groupId);
String createdBy = "dory";
String name = "dory new vc";
int id = virtualCorpusDao.createQuery(name,
ResourceType.PROJECT, QueryType.VIRTUAL_CORPUS,
CorpusAccess.PUB, "corpusSigle=WPD15", "", "", "", false,
createdBy, null, null);
QueryDO virtualCorpus = virtualCorpusDao.retrieveQueryById(id);
userGroupDao.addQueryToGroup(virtualCorpus, createdBy,
QueryAccessStatus.ACTIVE, group);
List<QueryDO> vc = virtualCorpusDao.retrieveQueryByGroup(groupId);
assertEquals(2, vc.size());
assertEquals(name, vc.get(1).getName());
// delete vc from group
userGroupDao.deleteQueryFromGroup(virtualCorpus.getId(), groupId);
vc = virtualCorpusDao.retrieveQueryByGroup(groupId);
assertEquals(1, vc.size());
// delete vc
virtualCorpusDao.deleteQuery(virtualCorpus);
}
}