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.security.MembershipContext;
import edu.ualberta.med.biobank.common.action.security.MembershipContextGetAction;
import edu.ualberta.med.biobank.common.action.security.MembershipContextGetInput;
import edu.ualberta.med.biobank.common.action.security.UserSaveAction;
import edu.ualberta.med.biobank.common.action.security.UserSaveInput;
import edu.ualberta.med.biobank.common.action.security.UserSaveOutput;
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.model.User;
import edu.ualberta.med.biobank.test.action.TestAction;
public class TestUserSaveAction extends TestAction {
@Test
public void insert() {
Transaction tx = session.beginTransaction();
Role role = factory.createRole();
Center center = factory.createSite();
Study study = factory.createStudy();
Group group = factory.createGroup();
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);
String name = factory.getName(User.class);
User user = new User();
user.setLogin(name);
user.setEmail(name);
user.setFullName(name);
user.getMemberships().add(membership);
membership.setPrincipal(user);
user.getGroups().add(group);
MembershipContext context = exec(new MembershipContextGetAction(
new MembershipContextGetInput())).getContext();
UserSaveOutput result =
exec(new UserSaveAction(new UserSaveInput(user, context)));
Object o = session.createCriteria(User.class)
.add(Restrictions.idEq(result.getUserId()))
.uniqueResult();
Assert.assertTrue(o instanceof User);
User saved = (User) o;
Assert.assertEquals("login not inserted properly",
user.getLogin(), saved.getLogin());
Assert.assertEquals("email not inserted properly",
user.getEmail(), saved.getEmail());
Assert.assertEquals("full name not inserted properly",
user.getFullName(), saved.getFullName());
Set<Membership> savedMemberships = saved.getMemberships();
Assert.assertEquals("memberships not inserted properly",
user.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.assertEquals("membership domain not inserted properly",
domain.isEquivalent(savedMembership.getDomain()));
Set<Group> savedGroups = user.getGroups();
Assert.assertEquals("groups not inserted properly",
user.getGroups(), savedGroups);
}
}