package org.fluttercode.datavalve.provider.hibernate;
import java.sql.Connection;
import java.sql.DriverManager;
import junit.framework.TestCase;
import org.fluttercode.datavalve.dataset.QueryDataset;
import org.fluttercode.datavalve.entity.hibernate.HibernateEntityHome;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
public class HibernateEntityHomeTest extends TestCase {
private SessionFactory sessionFactory;
private Session session;
private transient Connection connection;
private PersonHome home;
public class PersonHome extends HibernateEntityHome<Person> {
}
@Override
protected void setUp() throws Exception {
super.setUp();
// start up db
try {
Class.forName("org.hsqldb.jdbcDriver");
connection = DriverManager.getConnection(
"jdbc:hsqldb:mem:unit-testing-jpa", "sa", "");
} catch (Exception ex) {
ex.printStackTrace();
fail("Exception during HSQL database startup.");
}
AnnotationConfiguration cfg = new AnnotationConfiguration();
cfg.addAnnotatedClass(Order.class);
cfg.addAnnotatedClass(Person.class);
sessionFactory = cfg.configure().buildSessionFactory();
session = sessionFactory.openSession();
home = new PersonHome();
home.setSession(session);
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
if (session != null) {
session.close();
}
if (sessionFactory != null) {
sessionFactory.close();
}
// shutdown db
try {
connection.createStatement().execute("SHUTDOWN");
connection.close();
} catch (Exception ex) {
}
}
public Person doInsert() {
home.setEntity(null);
home.getEntity().setFirstName("Tim");
home.getEntity().setLastName("Smith");
session.beginTransaction();
home.insert();
session.getTransaction().commit();
return home.getEntity();
}
public Person doCleanLoad(Long id) {
session.clear();
home.setEntity(null);
home.setId(id);
return home.getEntity();
}
public void testInsert() {
//do the insert here so we can test the managed flag
assertFalse(home.isManaged());
Person person = home.getEntity();
assertFalse(home.isManaged());
home.getEntity().setFirstName("Tim");
home.getEntity().setLastName("Smith");
session.getTransaction().begin();
home.insert();
session.getTransaction().commit();
assertTrue(home.isManaged());
assertNotNull(home.getEntity());
Long id = home.getEntity().getId();
assertNotNull(id);
session.clear();
home.setEntity(null);
home.setId(id);
Person p = home.getEntity();
assertNotNull(p);
assertNotSame(person, p);
assertEquals("Tim", p.getFirstName());
assertEquals("Smith", p.getLastName());
}
public void testUpdateAfterInsert() {
Person p = doInsert();
session.clear();
PersonHome updateHome = new PersonHome();
updateHome.setSession(session);
assertFalse(updateHome.isManaged());
updateHome.setId(p.getId());
updateHome.getEntity().setLastName("Jones");
assertTrue(updateHome.isManaged());
session.getTransaction().begin();
updateHome.update();
session.getTransaction().commit();
Person modPerson = doCleanLoad(p.getId());
assertEquals("Jones", modPerson.getLastName());
}
}