/* * Hibernate OGM, Domain model persistence for NoSQL datastores * * License: GNU Lesser General Public License (LGPL), version 2.1 or later * See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>. */ package org.hibernate.ogm.datastore.neo4j.test.mapping; import static org.fest.assertions.Assertions.assertThat; import static org.hibernate.ogm.datastore.neo4j.test.dsl.GraphAssertions.assertThatExists; import java.util.Map; import javax.persistence.EntityManager; import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.ogm.datastore.neo4j.test.dsl.NodeForGraphAssertions; import org.hibernate.ogm.datastore.neo4j.test.dsl.RelationshipsChainForGraphAssertions; import org.hibernate.ogm.datastore.neo4j.utils.Neo4jTestHelper; import org.hibernate.ogm.datastore.neo4j.utils.Neo4jTestHelperDelegate; import org.hibernate.ogm.datastore.spi.DatastoreProvider; import org.hibernate.ogm.jpa.impl.OgmEntityManagerFactory; import org.hibernate.ogm.utils.jpa.OgmJpaTestCase; import org.junit.After; import org.junit.Before; /** * Common methods to check the mapping of entities in Neo4j. * * @author Davide D'Alto */ public abstract class Neo4jJpaTestCase extends OgmJpaTestCase { private static final String NUMBER_OF_NODES_QUERY = "MATCH (n) RETURN COUNT(*) as count"; private static final String NUMBER_OF_RELATIONSHIPS_QUERY = "MATCH (n) - [r] -> () RETURN COUNT(r) as count"; private Neo4jTestHelperDelegate delegate; @Before public void initDelegate() { delegate = Neo4jTestHelper.delegate(); } @After public void deleteAll() throws Exception { DatastoreProvider datastoreProvider = datastoreProvider(); delegate.deleteAllElements( datastoreProvider ); } protected void assertNumberOfRelationships(int rel) throws Exception { assertThat( numberOfRelationships() ).as( "Unexpected number of relationships" ).isEqualTo( rel ); } protected void assertNumberOfNodes(int nodes) throws Exception { assertThat( numberOfNodes() ).as( "Unexpected number of nodes" ).isEqualTo( nodes ); } protected Long numberOfNodes() throws Exception { DatastoreProvider datastoreProvider = datastoreProvider(); return delegate.executeCountQuery( datastoreProvider, NUMBER_OF_NODES_QUERY ); } protected Long numberOfRelationships() throws Exception { DatastoreProvider datastoreProvider = datastoreProvider(); return delegate.executeCountQuery( datastoreProvider, NUMBER_OF_RELATIONSHIPS_QUERY ); } protected void executeCypherQuery(String query, Map<String, Object> parameters) throws Exception { DatastoreProvider datastoreProvider = datastoreProvider(); delegate.executeCypherQuery( datastoreProvider, query, parameters ); } private DatastoreProvider datastoreProvider() { OgmEntityManagerFactory emFactory = ( (OgmEntityManagerFactory) getFactory() ); if ( emFactory != null ) { SessionFactoryImplementor sessionFactory = emFactory.getSessionFactory(); DatastoreProvider datastoreProvider = sessionFactory.getServiceRegistry().getService( DatastoreProvider.class ); return datastoreProvider; } return null; } protected void assertThatOnlyTheseNodesExist(NodeForGraphAssertions... nodes) throws Exception { DatastoreProvider datastoreProvider = datastoreProvider(); for ( NodeForGraphAssertions node : nodes ) { assertThatExists( delegate, datastoreProvider, node ); } assertNumberOfNodes( nodes.length ); } protected void assertThatOnlyTheseRelationshipsExist(RelationshipsChainForGraphAssertions... relationships) throws Exception { DatastoreProvider datastoreProvider = datastoreProvider(); int expectedNumberOfRelationships = 0; for ( RelationshipsChainForGraphAssertions relationship : relationships ) { assertThatExists( delegate, datastoreProvider, relationship ); expectedNumberOfRelationships += relationship.getSize(); } assertNumberOfRelationships( expectedNumberOfRelationships ); } protected void persist(EntityManager em, Object... entities) { for ( Object entity : entities ) { em.persist( entity ); } } }