package com.buschmais.xo.neo4j.test.mapping;
import static com.buschmais.xo.api.Query.Result;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasItems;
import static org.junit.Assert.assertThat;
import java.net.URISyntaxException;
import java.util.Collection;
import org.junit.Before;
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.E;
import com.buschmais.xo.neo4j.test.mapping.composite.E2F;
import com.buschmais.xo.neo4j.test.mapping.composite.F;
@RunWith(Parameterized.class)
public class RelationResultOfTest extends AbstractNeo4jXOManagerTest {
private E e;
private F f1;
private F f2;
private E2F e2f1;
private E2F e2f2;
public RelationResultOfTest(XOUnit xoUnit) {
super(xoUnit);
}
@Parameterized.Parameters
public static Collection<Object[]> getXOUnits() throws URISyntaxException {
return xoUnits(E.class, F.class, E2F.class);
}
@Before
public void createData() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
e = xoManager.create(E.class);
f1 = xoManager.create(F.class);
e2f1 = xoManager.create(e, E2F.class, f1);
e2f1.setValue("E2F1");
f2 = xoManager.create(F.class);
e2f2 = xoManager.create(e, E2F.class, f2);
e2f2.setValue("E2F2");
xoManager.currentTransaction().commit();
}
@Test
public void resultUsingExplicitQuery() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
Result<E2F.ByValue> byValue = e2f1.getResultByValueUsingExplicitQuery("E2F1");
assertThat(byValue.getSingleResult().getF(), equalTo(f1));
xoManager.currentTransaction().commit();
}
@Test
public void resultUsingReturnType() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
Result<E2F.ByValue> byValue = e2f1.getResultByValueUsingReturnType("E2F1");
assertThat(byValue.getSingleResult().getF(), equalTo(f1));
xoManager.currentTransaction().commit();
}
@Test
public void byValueUsingExplicitQuery() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
E2F.ByValue byValue = e2f1.getByValueUsingExplicitQuery("E2F1");
assertThat(byValue.getF(), equalTo(f1));
xoManager.currentTransaction().commit();
}
@Test
public void byValueUsingReturnType() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
E2F.ByValue byValue = e2f1.getByValueUsingReturnType("E2F1");
assertThat(byValue.getF(), equalTo(f1));
byValue = e2f1.getByValueUsingReturnType("unknownE2F");
assertThat(byValue, equalTo(null));
xoManager.currentTransaction().commit();
}
@Test
public void byValueUsingImplicitThis() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
E2F.ByValueUsingImplicitThis byValue = e2f1.getByValueUsingImplicitThis("E2F1");
assertThat(byValue.getF(), equalTo(f1));
xoManager.currentTransaction().commit();
}
@Test
public void resultUsingCypher() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
Result<F> result = e2f1.getResultUsingCypher("E2F1");
assertThat(result, hasItems(equalTo(f1)));
result = e2f1.getResultUsingCypher("unknownF");
assertThat(result.iterator().hasNext(), equalTo(false));
xoManager.currentTransaction().commit();
}
@Test
public void singleResultUsingCypher() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
F result = e2f1.getSingleResultUsingCypher("E2F1");
assertThat(result, equalTo(f1));
result = e2f1.getSingleResultUsingCypher("unknownF");
assertThat(result, equalTo(null));
xoManager.currentTransaction().commit();
}
@Test
public void voidResultUsingCypher() {
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
e2f1.voidResultUsingCypher("E2F1");
assertThat(xoManager.createQuery("match ()-[e2f:E2F]->() where e2f.result='true' return e2f", E2F.class).execute().getSingleResult(), equalTo(e2f1));
xoManager.currentTransaction().commit();
}
}