package com.buschmais.xo.neo4j.test.flush; import static java.util.Arrays.asList; import static java.util.Collections.singletonList; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; import java.util.Collection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; 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.flush.composite.A; import com.buschmais.xo.neo4j.test.flush.composite.FindByNameQuery; import com.buschmais.xo.neo4j.test.flush.composite.FlushRepository; @RunWith(Parameterized.class) public class QueryFlushTest extends AbstractNeo4jXOManagerTest { @Parameters public static Collection<Object[]> getXOUnits() { return xoUnits(singletonList(Neo4jDatabase.BOLT), asList(A.class, FlushRepository.class)); } public QueryFlushTest(XOUnit xoUnit) { super(xoUnit); } @Test public void flush() { XOManager xoManager = getXOManager(); xoManager.currentTransaction().begin(); FlushRepository repository = xoManager.getRepository(FlushRepository.class); A a = xoManager.create(A.class); a.setName("1"); assertThat(xoManager.createQuery("MATCH (a:A) WHERE a.name='1' RETURN a").execute().getSingleResult().get("a", A.class), equalTo(a)); a.setName("2"); assertThat(xoManager.createQuery(FindByNameQuery.class).withParameter("name", "1").execute().hasResult(), equalTo(true)); assertThat(repository.findByName("1"), equalTo(a)); assertThat(a.findByName("1"), equalTo(a)); assertThat(xoManager.createQuery("MATCH (a:A) WHERE a.name='1' RETURN a").flush(false).execute().hasResult(), equalTo(true)); xoManager.flush(); assertThat(xoManager.createQuery(FindByNameQuery.class).withParameter("name", "1").execute().hasResult(), equalTo(false)); assertThat(repository.findByName("1"), nullValue()); assertThat(a.findByName("1"), nullValue()); assertThat(xoManager.createQuery("MATCH (a:A) WHERE a.name='1' RETURN a").flush(false).execute().hasResult(), equalTo(false)); xoManager.currentTransaction().commit(); } @Test public void overwriteFlush() { XOManager xoManager = getXOManager(); xoManager.currentTransaction().begin(); A a = xoManager.create(A.class); a.setName("1"); assertThat(xoManager.createQuery("MATCH (a:A) WHERE a.name='1' RETURN a").execute().getSingleResult().get("a", A.class), equalTo(a)); a.setName("2"); assertThat(xoManager.createQuery(FindByNameQuery.class).flush(true).withParameter("name", "2").execute().hasResult(), equalTo(true)); xoManager.currentTransaction().commit(); } }