package edu.ualberta.med.biobank.test;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.junit.After;
import org.junit.Before;
import edu.ualberta.med.biobank.model.ActivityStatus;
import edu.ualberta.med.biobank.model.Membership;
import edu.ualberta.med.biobank.model.User;
import edu.ualberta.med.biobank.test.SessionProvider.Mode;
public class TestDb extends TestBase {
private static final String GLOBAL_ADMIN_LOGIN = "globaladmin";
private static final User GLOBAL_ADMIN;
private static final SessionProvider SESSION_PROVIDER;
static {
SESSION_PROVIDER = new SessionProvider(Mode.RUN);
GLOBAL_ADMIN = getOrCreateSuperUser();
}
protected Session session;
protected Factory factory;
@Before
public void setUp() throws Exception {
session = getSessionProvider().openSession();
factory = new Factory(session, getMethodNameR());
}
@After
public void tearDown() throws Exception {
factory = null;
session.close();
}
protected static SessionProvider getSessionProvider() {
return SESSION_PROVIDER;
}
protected static Session openSession() {
return SESSION_PROVIDER.openSession();
}
protected static User getGlobalAdmin() {
return GLOBAL_ADMIN;
}
private static User getOrCreateSuperUser() {
Session session = getSessionProvider().openSession();
// check if user already exists
@SuppressWarnings("unchecked")
List<User> users = session.createCriteria(User.class)
.add(Restrictions.eq("login", GLOBAL_ADMIN_LOGIN))
.list();
if (users.size() >= 1) return users.get(0);
Transaction tx = session.beginTransaction();
User globalAdmin = new User();
globalAdmin.setLogin(GLOBAL_ADMIN_LOGIN);
globalAdmin.setCsmUserId(-1L);
globalAdmin.setRecvBulkEmails(false);
globalAdmin.setFullName(GLOBAL_ADMIN_LOGIN);
globalAdmin.setEmail(GLOBAL_ADMIN_LOGIN);
globalAdmin.setNeedPwdChange(false);
globalAdmin.setNeedPwdChange(false);
globalAdmin.setActivityStatus(ActivityStatus.ACTIVE);
session.save(globalAdmin);
Membership membership = new Membership();
membership.getDomain().setAllCenters(true);
membership.getDomain().setAllStudies(true);
membership.setUserManager(true);
membership.setEveryPermission(true);
membership.setPrincipal(globalAdmin);
globalAdmin.getMemberships().add(membership);
session.save(membership);
tx.commit();
session.close();
return globalAdmin;
}
}