package edu.ualberta.med.biobank.test.action.security;
import java.util.Set;
import junit.framework.Assert;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.junit.Test;
import edu.ualberta.med.biobank.common.action.IdResult;
import edu.ualberta.med.biobank.common.action.security.GroupSaveAction;
import edu.ualberta.med.biobank.common.action.security.GroupSaveInput;
import edu.ualberta.med.biobank.model.Center;
import edu.ualberta.med.biobank.model.Domain;
import edu.ualberta.med.biobank.model.Group;
import edu.ualberta.med.biobank.model.Membership;
import edu.ualberta.med.biobank.model.PermissionEnum;
import edu.ualberta.med.biobank.model.Role;
import edu.ualberta.med.biobank.model.Study;
import edu.ualberta.med.biobank.test.action.TestAction;
public class TestGroupSaveAction extends TestAction {
@Test
public void insert() {
Transaction tx = session.beginTransaction();
Role role = factory.createRole();
Center center = factory.createSite();
Study study = factory.createStudy();
tx.commit();
Membership membership = new Membership();
Domain domain = membership.getDomain();
domain.getCenters().add(center);
domain.getStudies().add(study);
membership.getRoles().add(role);
membership.getPermissions().add(PermissionEnum.CLINIC_CREATE);
Group group = new Group();
group.setName(factory.getName(Group.class));
group.setDescription("nothing to see here");
group.getMemberships().add(membership);
membership.setPrincipal(group);
IdResult result = exec(new GroupSaveAction(new GroupSaveInput(group)));
Object o = session.createCriteria(Group.class)
.add(Restrictions.idEq(result.getId()))
.uniqueResult();
Assert.assertTrue(o instanceof Group);
Group saved = (Group) o;
Assert.assertEquals("name not inserted properly",
group.getName(), saved.getName());
Assert.assertEquals("description not inserted properly",
group.getDescription(), saved.getDescription());
Set<Membership> savedMemberships = saved.getMemberships();
Assert.assertEquals("memberships not inserted properly",
group.getMemberships().size(), savedMemberships.size());
Membership savedMembership = savedMemberships.iterator().next();
Assert.assertEquals("membership permissions not inserted properly",
membership.getPermissions(), savedMembership.getPermissions());
Assert.assertEquals("membership permissions",
membership.getPermissions(), savedMembership.getPermissions());
Assert.assertEquals("membership roles",
membership.getRoles(), savedMembership.getRoles());
Assert.assertTrue("membership domain",
domain.isEquivalent(savedMembership.getDomain()));
}
}