package com.manning.hsia.dvdstore.test;
import java.lang.reflect.Proxy;
import java.util.List;
import org.hibernate.Transaction;
import org.hibernate.search.FullTextSession;
import org.hibernate.search.Search;
import org.testng.annotations.Test;
import com.manning.hsia.dvdstore.action.ItemAction;
import com.manning.hsia.dvdstore.action.ItemActionImpl;
import com.manning.hsia.dvdstore.model.Item;
import com.manning.hsia.dvdstore.util.SessionInvocationHandler;
import com.manning.hsia.dvdstore.util.TestCase;
public class ItemActionTest extends TestCase {
@Test(groups="ch06")
public void testIdentity() {
ItemAction identity = getItemAction();
identity.loadItem(1);
}
private ItemAction getItemAction() {
ItemAction action = new ItemActionImpl();
return (ItemAction) Proxy.newProxyInstance(
this.getClass().getClassLoader(),
new Class[] { ItemAction.class },
new SessionInvocationHandler(action, factory) );
}
@Test(groups="ch06")
public void testSimpleQuery() {
ItemAction identity = getItemAction();
assert 2 == identity.findByTitle("batman").size() :
"Wrong numbr of matching results. Found " + identity.findByTitle("batman").size();
}
@Override
public void postSetUp() throws Exception {
FullTextSession session = Search.getFullTextSession( factory.openSession() );
Transaction tx = null;
try {
tx = session.beginTransaction();
//manual indexing solution OK for small amounts of data
List results = session.createCriteria( Item.class ).list();
for (Object entity : results) {
session.index( entity ); //index each element
}
//commit the index changes
tx.commit();
}
finally {
session.close();
}
}
}