package org.karmaexchange.dao; import static java.util.Arrays.asList; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.karmaexchange.util.JsonValidationTestUtil.validateJsonConversion; import static org.karmaexchange.util.OfyService.ofy; import static org.karmaexchange.util.TestUtil.DEBUG; import java.util.Date; import java.util.Set; import org.junit.Before; import org.junit.Test; import org.karmaexchange.dao.User.RegisteredEmail; import org.karmaexchange.util.DatastoreTestUtil; import com.google.appengine.api.datastore.GeoPt; import com.google.common.collect.Sets; import com.googlecode.objectify.Key; public class UserTest extends PersistenceTestHelper { private User user1; private User user2; @Override @Before public void setUp() throws Exception { super.setUp(); // Setup user1. user1 = new User(); user1.setId(Long.valueOf(1)); ModificationInfo modificationInfo = new ModificationInfo(); user1.setModificationInfo(modificationInfo); modificationInfo.setCreationUser(KeyWrapper.create(user1)); Date creationDate = new Date(); modificationInfo.setCreationDate(creationDate); modificationInfo.setLastModificationUser(KeyWrapper.create(user1)); modificationInfo.setLastModificationDate(creationDate); Image image = new Image(); image.setId((long) 1); image.setBlobKey("QsZLm_NXs4mCNc2idbG6gg"); image.setUrl("http://completely_fake"); image.setUrlProvider(ImageProviderType.BLOBSTORE); user1.setProfileImage(ImageRef.create(image)); user1.getRegisteredEmails().add(new RegisteredEmail("test@karmaexchange.org", true)); user1.getRegisteredEmails().add(new RegisteredEmail("test2@karmaexchange.org", false)); Address address = new Address(); user1.setAddress(address); address.setZip("94105"); address.setGeoPt(GeoPtWrapper.create(new GeoPt(1.9f, 1.0f))); EmergencyContact ec1 = new EmergencyContact(); ec1.setName("Joe"); ec1.setPhoneNumber("408-123-4567"); ec1.setRelationship("bff"); EmergencyContact ec2 = new EmergencyContact(); ec2.setName("Mary"); ec2.setPhoneNumber("408-123-4568"); user1.setEmergencyContacts(asList(ec1, ec2)); user1.setKarmaPoints(100); IndexedAggregateRating rating = new IndexedAggregateRating (); rating.addRating(Rating.create(4.5)); user1.setEventOrganizerRating(rating); // Setup user2. user2 = new User(); user2.setId(Long.valueOf(2)); } @Test public void testJsonConversion() throws Exception { validateJsonConversion(user1, User.class); } @Test public void testPersistence() throws Exception { validatePersistence(user1); validatePersistence(user2); // Make sure the unindexed fields are not queryable. Set<Key<User>> userKeys = Sets.newHashSet( ofy().load().type(User.class) .filter("contactInfo.address.zip", Integer.valueOf(94105)).keys()); assertEquals(0, userKeys.size()); userKeys = Sets.newHashSet( ofy().load().type(User.class) .filter("eventOrganizerRating.value >=", Double.valueOf(3.2)).keys()); assertEquals(1, userKeys.size()); assertTrue(userKeys.contains(Key.create(user1))); userKeys = Sets.newHashSet( ofy().load().type(User.class) .filter("eventOrganizerRating.value >", Double.valueOf(4.5)).keys()); assertEquals(0, userKeys.size()); if (DEBUG) { DatastoreTestUtil.dumpEntity(user1); } } }