package com.buschmais.xo.neo4j.test.batchable;
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.assertThat;
import static org.junit.Assume.assumeThat;
import java.util.Collection;
import java.util.concurrent.ExecutionException;
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.Neo4jDatabase;
import com.buschmais.xo.neo4j.test.batchable.composite.A;
import com.buschmais.xo.neo4j.test.batchable.composite.A2B;
import com.buschmais.xo.neo4j.test.batchable.composite.B;
@RunWith(Parameterized.class)
public class BatchableTest extends AbstractNeo4jXOManagerTest {
public BatchableTest(XOUnit xoUnit) {
super(xoUnit);
}
@Parameterized.Parameters
public static Collection<Object[]> getXOUnits() {
return xoUnits(A.class, A2B.class, B.class);
}
@Test
public void batchable() throws ExecutionException, InterruptedException {
assumeThat(getXoManagerFactory().getXOUnit().getProvider(), equalTo(Neo4jDatabase.BOLT.getProvider()));
XOManager xoManager = getXoManager();
xoManager.currentTransaction().begin();
A a = xoManager.create(A.class);
a.setName("A1");
assertThat(xoManager.getId(a), lessThan(0l));
B b = xoManager.create(B.class);
b.setName("B");
assertThat(xoManager.getId(b), lessThan(0l));
A2B a2b = xoManager.create(a, A2B.class, b);
a2b.setValue(1);
assertThat(xoManager.getId(a2b), lessThan(0l));
xoManager.currentTransaction().commit();
xoManager.currentTransaction().begin();
assertThat(xoManager.getId(a), greaterThanOrEqualTo(0l));
assertThat(xoManager.getId(a2b), greaterThanOrEqualTo(0l));
assertThat(xoManager.getId(b), greaterThanOrEqualTo(0l));
assertThat(a.getName(),equalTo("A1"));
assertThat(b.getName(), equalTo("B"));
assertThat(a2b.getValue(), equalTo(1));
a.setName("A2");
a2b.setValue(2);
xoManager.currentTransaction().commit();
xoManager.currentTransaction().begin();
a = xoManager.find(A.class, "A2").getSingleResult();
a2b = a.getA2B();
assertThat(a2b.getValue(), equalTo(2));
b = xoManager.find(B.class, "B").getSingleResult();
assertThat(b.getA2B(), is(a2b));
xoManager.currentTransaction().commit();
}
}