package org.karmaexchange.dao; import static org.junit.Assert.assertEquals; import static org.karmaexchange.util.OfyService.ofy; import static org.karmaexchange.util.TestUtil.DEBUG; import org.junit.After; import org.junit.Before; import org.karmaexchange.util.AdminUtil; import org.karmaexchange.util.AdminUtil.AdminTaskType; import org.karmaexchange.util.DatastoreTestUtil; import org.karmaexchange.util.OfyService; import org.karmaexchange.util.UserService; import com.google.appengine.tools.development.testing.LocalDatastoreServiceTestConfig; import com.google.appengine.tools.development.testing.LocalServiceTestHelper; import com.googlecode.objectify.Key; import com.googlecode.objectify.Work; public class PersistenceTestHelper { private final LocalServiceTestHelper appEngineHelper = new LocalServiceTestHelper(new LocalDatastoreServiceTestConfig()); @Before public void setUp() throws Exception { appEngineHelper.setUp(); // Register the objectify classes. OfyService.ofy(); } @After public void tearDown() throws Exception { appEngineHelper.tearDown(); } protected <T extends BaseDao<T>> T validatePersistence(T entity) throws Exception { AdminUtil.setCurrentUser(AdminTaskType.TEST); try { if (DEBUG) { System.out.println("Before: " + entity); System.out.println("Before datastore entity: "); DatastoreTestUtil.dumpEntity(entity); } final Key<T> key = ofy().save().entity(entity).now(); // Bypass the Objectify session cache to see how the entity is actually persisted on disk. T persistedEntity = ofy().transact(new Work<T>() { public T run() { return ofy().load().key(key).now(); } }); if (DEBUG) { System.out.println("After: " + persistedEntity); System.out.println("After datastore entity: "); DatastoreTestUtil.dumpEntity(entity); } // Force a process load of the entity to pass the equality test. entity.processLoad(); assertEquals(entity, persistedEntity); return persistedEntity; } finally { UserService.clearCurrentUser(); } } }