package org.quaere.jpa;
import junit.framework.Assert;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.BasicConfigurator;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.ejb.EntityManagerFactoryImpl;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
import static org.quaere.DSL.*;
import org.quaere.jpa.model.Customer;
import javax.persistence.EntityManagerFactory;
import javax.persistence.spi.PersistenceUnitTransactionType;
public class ScenariosTest {
private final SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
protected final Log log = LogFactory.getLog(ScenariosTest.class);
@Before
public void setup() {
Session session = sessionFactory.openSession();
Customer[] customers = Customer.getAllCustomers();
for (Customer c : customers) {
session.save(c);
}
session.flush();
session.close();
BasicConfigurator.configure();
}
@Test
public void canQueryHibernate() {
EntityManagerFactory entityManagerFactory = new EntityManagerFactoryImpl(sessionFactory, PersistenceUnitTransactionType.RESOURCE_LOCAL, true);
QueryableEntityManager entityManager = new QueryableEntityManager(entityManagerFactory.createEntityManager());
Iterable<Customer> waCustomers =
from("c").in(entityManager.entity(Customer.class)).
where(eq("c.getRegion()", "WA")).
select("c");
for (Customer c : waCustomers) {
log.info(c);
Assert.assertEquals("WA", c.getRegion());
}
}
@Test
@Ignore("This test goes into an endless loop after a patch for Comparable was applied.")
public void canUseSkipOperatorToSkipRows() {
EntityManagerFactory entityManagerFactory = new EntityManagerFactoryImpl(sessionFactory, PersistenceUnitTransactionType.RESOURCE_LOCAL, true);
QueryableEntityManager entityManager = new QueryableEntityManager(entityManagerFactory.createEntityManager());
Iterable<Customer> allCustomersExcept10First =
skip(10).<Customer>in(
from("c").in(entityManager.entity(Customer.class)).
select("c")
);
int counter = 0;
for (Customer c : allCustomersExcept10First) {
log.info(c);
counter++;
}
Assert.assertEquals(Customer.getAllCustomers().length - 10, counter);
}
@Test
@Ignore("This test goes into an endless loop after a patch for Comparable was applied.")
public void canUseTakeToLimitSelection() {
EntityManagerFactory entityManagerFactory = new EntityManagerFactoryImpl(sessionFactory, PersistenceUnitTransactionType.RESOURCE_LOCAL, true);
QueryableEntityManager entityManager = new QueryableEntityManager(entityManagerFactory.createEntityManager());
Iterable<Customer> allCustomersExcept10First =
take(2).<Customer>from(
from("c").in(entityManager.entity(Customer.class)).
select("c")
);
int counter = 0;
for (Customer c : allCustomersExcept10First) {
log.info(c);
counter++;
}
Assert.assertEquals(2, counter);
}
@Test
@Ignore
public void canPageSelectionByCombiningTakeAndSkip() {
// EntityManagerFactory entityManagerFactory;
// QueryableEntityManager entityManager;
// entityManagerFactory = new EntityManagerFactoryImpl(sessionFactory, PersistenceUnitTransactionType.RESOURCE_LOCAL, true);
// entityManager = new QueryableEntityManager(entityManagerFactory.createEntityManager());
//
// Customer tenthCustomer =
// first(
// skip(10).<Customer>in(
// from("c").in(entityManager.entity(Customer.class)).
// select("c")
// )
// );
//
// entityManagerFactory = new EntityManagerFactoryImpl(sessionFactory, PersistenceUnitTransactionType.RESOURCE_LOCAL, true);
// entityManager = new QueryableEntityManager(entityManagerFactory.createEntityManager());
//
// Iterable<Customer> customers10To20 =
// take(10).from(
// skip(10).in( (QueryContinuationBuider<Customer>)
// from("c").in(entityManager.entity(Customer.class)).
// select("c")
// )
// );
//
// int counter = 0;
// Customer firstInResult = null;
// for (Object c : customers10To20) {
// log.info(c);
// if (counter == 0) firstInResult = (Customer) c;
// counter++;
// }
// Assert.assertEquals(10, counter);
// Assert.assertEquals(tenthCustomer, firstInResult);
}
@Test
public void duplicateQueryElementsRegessionTest() {
EntityManagerFactory entityManagerFactory = new EntityManagerFactoryImpl(sessionFactory, PersistenceUnitTransactionType.RESOURCE_LOCAL, true);
QueryableEntityManager entityManager = new QueryableEntityManager(entityManagerFactory.createEntityManager());
Iterable<Customer> waCustomers =
from("c").in(entityManager.entity(Customer.class)).
where(eq("c.getRegion()", "WA")).
select("c");
waCustomers.iterator();
waCustomers.iterator();
}
}