package com.buschmais.xo.neo4j.test.mapping;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.core.IsCollectionContaining.hasItem;
import static org.junit.Assert.assertThat;
import java.net.URISyntaxException;
import java.util.Collection;
import java.util.List;
import java.util.Set;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import com.buschmais.xo.api.XOManager;
import com.buschmais.xo.api.bootstrap.XOUnit;
import com.buschmais.xo.neo4j.test.AbstractNeo4jXOManagerTest;
import com.buschmais.xo.neo4j.test.mapping.composite.A;
import com.buschmais.xo.neo4j.test.mapping.composite.B;
@RunWith(Parameterized.class)
public class CollectionPropertyMappingTest extends AbstractNeo4jXOManagerTest {
public CollectionPropertyMappingTest(XOUnit xoUnit) {
super(xoUnit);
}
@Parameterized.Parameters
public static Collection<Object[]> getXOUnits() throws URISyntaxException {
return xoUnits(A.class, B.class);
}
@Test
public void setProperty() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
A a = xoManager.create(A.class);
B b = xoManager.create(B.class);
Set<B> setOfB = a.getSetOfB();
assertThat(setOfB.add(b), equalTo(true));
assertThat(setOfB.add(b), equalTo(false));
xoManager.currentTransaction().commit();
xoManager.currentTransaction().begin();
assertThat(setOfB.size(), equalTo(1));
assertThat(setOfB.remove(b), equalTo(true));
assertThat(setOfB.remove(b), equalTo(false));
xoManager.currentTransaction().commit();
}
@Test
public void mappedSetProperty() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
A a = xoManager.create(A.class);
B b = xoManager.create(B.class);
a.getMappedSetOfB().add(b);
xoManager.currentTransaction().commit();
xoManager.currentTransaction().begin();
TestResult result = executeQuery("match (a:A)-[:MAPPED_SET_OF_B]->(b) return b");
assertThat(result.getColumn("b").size(), equalTo(1));
assertThat(result.getColumn("b"), hasItem(b));
xoManager.currentTransaction().commit();
}
@Test
public void listProperty() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
A a = xoManager.create(A.class);
B b = xoManager.create(B.class);
List<B> listOfB = a.getListOfB();
assertThat(listOfB.add(b), equalTo(true));
assertThat(listOfB.add(b), equalTo(true));
xoManager.currentTransaction().commit();
xoManager.currentTransaction().begin();
assertThat(listOfB.size(), equalTo(2));
assertThat(listOfB.remove(b), equalTo(true));
assertThat(listOfB.remove(b), equalTo(true));
assertThat(listOfB.remove(b), equalTo(false));
xoManager.currentTransaction().commit();
}
@Test
public void listPropertyByIndex() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
A a = xoManager.create(A.class);
B b1 = xoManager.create(B.class);
B b2 = xoManager.create(B.class);
List<B> listOfB = a.getListOfB();
assertThat(listOfB.add(b1), equalTo(true));
assertThat(listOfB.add(b2), equalTo(true));
xoManager.currentTransaction().commit();
xoManager.currentTransaction().begin();
assertThat(listOfB.size(), equalTo(2));
assertThat(a.getListOfB(), hasItem(b1));
assertThat(a.getListOfB(), hasItem(b2));
xoManager.currentTransaction().commit();
}
@Test
public void mappedListProperty() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
A a = xoManager.create(A.class);
B b = xoManager.create(B.class);
a.getMappedListOfB().add(b);
a.getMappedListOfB().add(b);
xoManager.currentTransaction().commit();
xoManager.currentTransaction().begin();
TestResult result = executeQuery("match (a:A)-[:MAPPED_LIST_OF_B]->(b) return b");
assertThat(result.getColumn("b").size(), equalTo(2));
assertThat(result.getColumn("b"), hasItem(b));
xoManager.currentTransaction().commit();
}
}