/*
* Copyright (c) 2002-2017 "Neo Technology,"
* Network Engine for Objects in Lund AB [http://neotechnology.com]
*
* This product is licensed to you under the Apache License, Version 2.0 (the "License").
* You may not use this product except in compliance with the License.
*
* This product may include a number of subcomponents with
* separate copyright notices and license terms. Your use of the source
* code for these subcomponents is subject to the terms and
* conditions of the subcomponent's license, as noted in the LICENSE file.
*/
package org.neo4j.ogm.persistence.examples.friendships;
import static org.junit.Assert.*;
import java.io.IOException;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.neo4j.ogm.domain.friendships.Friendship;
import org.neo4j.ogm.domain.friendships.Person;
import org.neo4j.ogm.session.Session;
import org.neo4j.ogm.session.SessionFactory;
import org.neo4j.ogm.testutil.MultiDriverTestClass;
/**
* @author Vince Bickers
* @author Luanne Misquitta
*/
public class FriendshipsRelationshipEntityTest extends MultiDriverTestClass {
private static SessionFactory sessionFactory;
private Session session;
@BeforeClass
public static void oneTimeSetUp() throws IOException {
sessionFactory = new SessionFactory(getBaseConfiguration().build(), "org.neo4j.ogm.domain.friendships");
}
@Before
public void init() throws IOException {
session = sessionFactory.openSession();
session.purgeDatabase();
}
@Test
public void shouldSaveFromStartObjectSetsAllObjectIds() {
Person mike = new Person("Mike");
Person dave = new Person("Dave");
// could use addFriend(...) but hey
dave.getFriends().add(new Friendship(dave, mike, 5));
session.save(dave);
assertNotNull(dave.getId());
assertNotNull(mike.getId());
assertNotNull(dave.getFriends().get(0).getId());
}
@Test
public void shouldSaveAndReloadAllSetsAllObjectIdsAndReferencesCorrectly() {
Person mike = new Person("Mike");
Person dave = new Person("Dave");
dave.getFriends().add(new Friendship(dave, mike, 5));
session.save(dave);
Collection<Person> personList = session.loadAll(Person.class);
int expected = 2;
assertEquals(expected, personList.size());
for (Person person : personList) {
if (person.getName().equals("Dave")) {
expected--;
assertEquals("Mike", person.getFriends().get(0).getFriend().getName());
} else if (person.getName().equals("Mike")) {
expected--;
assertEquals(0, person.getFriends().size());
}
}
assertEquals(0, expected);
}
@Test
public void shouldSaveFromRelationshipEntitySetsAllObjectIds() {
Person mike = new Person("Mike");
Person dave = new Person("Dave");
Friendship friendship = new Friendship(dave, mike, 5);
dave.getFriends().add(friendship);
session.save(friendship);
assertNotNull(dave.getId());
assertNotNull(mike.getId());
assertNotNull(dave.getFriends().get(0).getId());
}
@Test
public void shouldLoadStartObjectHydratesProperly() {
Person mike = new Person("Mike");
Person dave = new Person("Dave");
Friendship friendship = new Friendship(dave, mike, 5);
dave.getFriends().add(friendship);
session.save(dave);
Person daveCopy = session.load(Person.class, dave.getId());
Friendship friendshipCopy = daveCopy.getFriends().get(0);
Person mikeCopy = friendshipCopy.getFriend();
assertNotNull(daveCopy.getId());
assertNotNull(mikeCopy.getId());
assertNotNull(friendshipCopy.getId());
assertEquals("Dave", daveCopy.getName());
assertEquals("Mike", mikeCopy.getName());
assertEquals(5, friendshipCopy.getStrength());
}
@Test
public void shouldLoadRelationshipEntityObjectHydratesProperly() {
Person mike = new Person("Mike");
Person dave = new Person("Dave");
Friendship friendship = new Friendship(dave, mike, 5);
dave.getFriends().add(friendship);
session.save(dave);
Friendship friendshipCopy = session.load(Friendship.class, friendship.getId());
Person daveCopy = friendshipCopy.getPerson();
Person mikeCopy = friendshipCopy.getFriend();
assertNotNull(daveCopy.getId());
assertNotNull(mikeCopy.getId());
assertNotNull(friendshipCopy.getId());
assertEquals("Dave", daveCopy.getName());
assertEquals("Mike", mikeCopy.getName());
assertEquals(5, friendshipCopy.getStrength());
}
/**
* @see DATAGRAPH-644
*/
@Test
public void shouldRetrieveRelationshipEntitySetPropertyCorrectly() {
Person mike = new Person("Mike");
Person dave = new Person("Dave");
Set<String> hobbies = new HashSet<>();
hobbies.add("Swimming");
hobbies.add("Cooking");
dave.getFriends().add(new Friendship(dave, mike, 5, hobbies));
session.save(dave);
assertNotNull(dave.getId());
assertNotNull(mike.getId());
assertNotNull(dave.getFriends().get(0).getId());
session.clear();
dave = session.load(Person.class, dave.getId());
assertEquals(2, dave.getFriends().get(0).getSharedHobbies().size());
}
}