@Test
  public void testRegistrations() throws Exception {
    DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
    Date startDate = dateFormat.parse("03/25/2014");
    Date endDate = dateFormat.parse("03/26/2014");
    List<String> topics = new ArrayList<>();
    topics.add("Google");
    topics.add("Cloud");
    topics.add("Platform");
    ConferenceForm conferenceForm =
        new ConferenceForm(NAME, DESCRIPTION, topics, CITY, startDate, endDate, CAP);
    Conference conference = conferenceApi.createConference(user, conferenceForm);
    Long conferenceId = conference.getId();

    // Registration
    Boolean result =
        conferenceApi.registerForConference(user, conference.getWebsafeKey()).getResult();
    conference = conferenceApi.getConference(conference.getWebsafeKey());
    Profile profile = ofy().load().key(Key.create(Profile.class, user.getUserId())).now();
    assertTrue("registerForConference should succeed.", result);
    assertEquals(CAP - 1, conference.getSeatsAvailable());
    assertTrue(
        "Profile should have the conferenceId in conferenceIdsToAttend.",
        profile.getConferenceKeysToAttend().contains(conference.getWebsafeKey()));

    // Unregister
    result = conferenceApi.unregisterFromConference(user, conference.getWebsafeKey()).getResult();
    conference = conferenceApi.getConference(conference.getWebsafeKey());
    profile = ofy().load().key(Key.create(Profile.class, user.getUserId())).now();
    assertTrue("unregisterFromConference should succeed.", result);
    assertEquals(CAP, conference.getSeatsAvailable());
    assertFalse(
        "Profile shouldn't have the conferenceId in conferenceIdsToAttend.",
        profile.getConferenceKeysToAttend().contains(conference.getWebsafeKey()));
  }
 @Test
 public void testCreateConference() throws Exception {
   DateFormat dateFormat = new SimpleDateFormat("MM/dd/yyyy");
   Date startDate = dateFormat.parse("03/25/2014");
   Date endDate = dateFormat.parse("03/26/2014");
   List<String> topics = new ArrayList<>();
   topics.add("Google");
   topics.add("Cloud");
   topics.add("Platform");
   ConferenceForm conferenceForm =
       new ConferenceForm(NAME, DESCRIPTION, topics, CITY, startDate, endDate, CAP);
   Conference conference = conferenceApi.createConference(user, conferenceForm);
   // Check the return value.
   assertEquals(NAME, conference.getName());
   assertEquals(DESCRIPTION, conference.getDescription());
   assertEquals(topics, conference.getTopics());
   //        assertEquals(USER_ID, conference.getOrganizerGplusId());
   assertEquals(CITY, conference.getCity());
   assertEquals(startDate, conference.getStartDate());
   assertEquals(endDate, conference.getEndDate());
   assertEquals(CAP, conference.getMaxAttendees());
   assertEquals(CAP, conference.getSeatsAvailable());
   assertEquals(MONTH, conference.getMonth());
   // Check if a new Profile is created
   Profile profile = ofy().load().key(Key.create(Profile.class, user.getUserId())).now();
   assertEquals(USER_ID, profile.getUserId());
   assertEquals(EMAIL, profile.getMainEmail());
   assertEquals(TEE_SHIRT_SIZE, profile.getTeeShirtSize());
   String displayName = EMAIL.substring(0, EMAIL.indexOf("@"));
   assertEquals(displayName, profile.getDisplayName());
 }
 @Test
 public void testGetProfile() throws Exception {
   conferenceApi.saveProfile(user, new ProfileForm(DISPLAY_NAME, TEE_SHIRT_SIZE));
   // Fetch the Profile via the API.
   Profile profile = conferenceApi.getProfile(user);
   assertEquals(USER_ID, profile.getUserId());
   assertEquals(EMAIL, profile.getMainEmail());
   assertEquals(TEE_SHIRT_SIZE, profile.getTeeShirtSize());
   assertEquals(DISPLAY_NAME, profile.getDisplayName());
 }
 @Test
 public void testSaveProfile() throws Exception {
   // Save the profile for the first time.
   Profile profile =
       conferenceApi.saveProfile(user, new ProfileForm(DISPLAY_NAME, TEE_SHIRT_SIZE));
   // Check the return value first.
   assertEquals(USER_ID, profile.getUserId());
   assertEquals(EMAIL, profile.getMainEmail());
   assertEquals(TEE_SHIRT_SIZE, profile.getTeeShirtSize());
   assertEquals(DISPLAY_NAME, profile.getDisplayName());
   // Fetch the Profile via Objectify.
   profile = ofy().load().key(Key.create(Profile.class, user.getUserId())).now();
   assertEquals(USER_ID, profile.getUserId());
   assertEquals(EMAIL, profile.getMainEmail());
   assertEquals(TEE_SHIRT_SIZE, profile.getTeeShirtSize());
   assertEquals(DISPLAY_NAME, profile.getDisplayName());
 }
 @Test
 public void testSaveProfileWithNull() throws Exception {
   // Save the profile for the first time with null values.
   Profile profile = conferenceApi.saveProfile(user, new ProfileForm(null, null));
   String displayName = EMAIL.substring(0, EMAIL.indexOf("@"));
   // Check the return value first.
   assertEquals(USER_ID, profile.getUserId());
   assertEquals(EMAIL, profile.getMainEmail());
   assertEquals(TEE_SHIRT_SIZE, profile.getTeeShirtSize());
   assertEquals(displayName, profile.getDisplayName());
   // Fetch the Profile via Objectify.
   profile = ofy().load().key(Key.create(Profile.class, user.getUserId())).now();
   assertEquals(USER_ID, profile.getUserId());
   assertEquals(EMAIL, profile.getMainEmail());
   assertEquals(TEE_SHIRT_SIZE, profile.getTeeShirtSize());
   assertEquals(displayName, profile.getDisplayName());
 }
  @Test
  public void testUpdateProfileWithNulls() throws Exception {
    conferenceApi.saveProfile(user, new ProfileForm(DISPLAY_NAME, TEE_SHIRT_SIZE));
    // Update the Profile with null values.
    Profile profile = conferenceApi.saveProfile(user, new ProfileForm(null, null));
    // Expected behavior is that the existing properties do not get overwritten

    // Check the return value first.
    assertEquals(USER_ID, profile.getUserId());
    assertEquals(EMAIL, profile.getMainEmail());
    assertEquals(TEE_SHIRT_SIZE, profile.getTeeShirtSize());
    assertEquals(DISPLAY_NAME, profile.getDisplayName());
    // Fetch the Profile via Objectify.
    profile = ofy().load().key(Key.create(Profile.class, user.getUserId())).now();
    assertEquals(USER_ID, profile.getUserId());
    assertEquals(EMAIL, profile.getMainEmail());
    assertEquals(TEE_SHIRT_SIZE, profile.getTeeShirtSize());
    assertEquals(DISPLAY_NAME, profile.getDisplayName());
  }
 @Test
 public void testUpdateProfile() throws Exception {
   // Save for the first time.
   conferenceApi.saveProfile(user, new ProfileForm(DISPLAY_NAME, TEE_SHIRT_SIZE));
   Profile profile = ofy().load().key(Key.create(Profile.class, user.getUserId())).now();
   assertEquals(USER_ID, profile.getUserId());
   assertEquals(EMAIL, profile.getMainEmail());
   assertEquals(TEE_SHIRT_SIZE, profile.getTeeShirtSize());
   assertEquals(DISPLAY_NAME, profile.getDisplayName());
   // Then try to update it.
   String newDisplayName = "New Name";
   TeeShirtSize newTeeShirtSize = TeeShirtSize.L;
   conferenceApi.saveProfile(user, new ProfileForm(newDisplayName, newTeeShirtSize));
   profile = ofy().load().key(Key.create(Profile.class, user.getUserId())).now();
   assertEquals(USER_ID, profile.getUserId());
   assertEquals(EMAIL, profile.getMainEmail());
   assertEquals(newTeeShirtSize, profile.getTeeShirtSize());
   assertEquals(newDisplayName, profile.getDisplayName());
 }