/*
* Copyright (C) 2010-2014 Glencoe Software, Inc. All rights reserved.
* Use is subject to license terms supplied in LICENSE.txt
*/
package ome.services.db;
import java.sql.Timestamp;
import java.util.UUID;
import junit.framework.TestCase;
import ome.model.IObject;
import ome.model.annotations.CommentAnnotation;
import ome.model.enums.EventType;
import ome.model.internal.Details;
import ome.model.meta.Event;
import ome.model.meta.Experimenter;
import ome.model.meta.ExperimenterGroup;
import ome.model.meta.GroupExperimenterMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@Test(groups = "integration" )
public class HibernateTest extends TestCase {
private static Logger log = LoggerFactory.getLogger(HibernateTest.class);
boolean ok;
Session s;
Transaction tx;
Event ev;
Experimenter root;
ExperimenterGroup sys;
@BeforeMethod
public void setupSession() {
ok = false;
s = HibernateUtil.getSession();
tx = s.beginTransaction();
}
@AfterMethod
public void closeSession() {
tx.commit();
s.close();
}
@Test
public void createEvent() throws Exception {
root = (Experimenter) s.load(Experimenter.class, 0L);
sys = (ExperimenterGroup) s.load(ExperimenterGroup.class, 0L);
EventType t = (EventType) s.load(EventType.class, 1L);
ev = new Event();
ev.setExperimenter(root);
ev.setExperimenterGroup(sys);
ev.setTime(new Timestamp(System.currentTimeMillis()));
ev.setType(t);
ev.setStatus("manual");
ev = (Event) s.merge(ev);
s.flush();
}
@Test
public void testDefaultExperimenter() throws Exception {
createEvent();
Experimenter e = new Experimenter();
e.setOmeName(UUID.randomUUID().toString());
e.setFirstName("Model");
e.setLastName("Test");
e.setLdap(false);
e = (Experimenter) s.merge(e);
ExperimenterGroup g = (ExperimenterGroup) s.get(
ExperimenterGroup.class, 0L);
GroupExperimenterMap m = e.linkExperimenterGroup(g);
setDetails(m);
s.save(m);
s.flush();
}
@Test
public void testMakeLotsOfStuff() throws Exception {
createEvent();
EventType newType = new EventType(UUID.randomUUID().toString());
setDetails(newType);
newType = (EventType) s.merge(newType);
s.flush();
}
@Test
public void testFirstAnnotationTests() throws Exception {
CommentAnnotation ann = new CommentAnnotation();
ann.setNs("ENVPROP");
ann.setTextValue("value");
createEvent();
setDetails(ann);
ann = (CommentAnnotation) s.merge(ann);
s.flush();
setDetails(root.linkAnnotation(ann));
s.flush();
Query q = s
.createQuery("select e from Experimenter e join fetch e.annotationLinks");
q.setMaxResults(1);
Experimenter test = (Experimenter) q.uniqueResult();
assertTrue(test.sizeOfAnnotationLinks() >= 1);
}
@Test
public void testAnnotatingAnnotations() throws Exception {
CommentAnnotation tag = new CommentAnnotation();
tag.setNs("tag");
tag.setTextValue("value");
CommentAnnotation group = new CommentAnnotation();
group.setNs("taggroup");
tag.setTextValue("value");
createEvent();
setDetails(tag);
setDetails(group);
setDetails(tag.linkAnnotation(group));
tag = (CommentAnnotation) s.merge(tag);
}
@Test
public void testExperimenterIndexQuery() throws Exception {
Query q = s
.createQuery("select g from ExperimenterGroup g, Experimenter e join e.groupExperimenterMap m "
+ "where e.id = 0 and g.name != user and m.parent = g.id "
+ "and m.child = e.id and index(m) = 0");
ExperimenterGroup test = (ExperimenterGroup) q.uniqueResult();
assertNotNull(test);
}
// ==============================================================
private void setDetails(IObject o) throws Exception {
Details details = o.getDetails();
details.setCreationEvent(ev);
details.setOwner(root);
details.setGroup(sys);
details.setUpdateEvent(ev);
}
}