/*
* 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.hibernate.ogm.datastore.neo4j.dialect.impl.NodeLabel.ENTITY;
import static org.hibernate.ogm.datastore.neo4j.test.dsl.GraphAssertions.node;
import javax.persistence.EntityManager;
import org.hibernate.ogm.backendtck.associations.compositeid.Director;
import org.hibernate.ogm.backendtck.associations.compositeid.Tournament;
import org.hibernate.ogm.backendtck.associations.compositeid.TournamentId;
import org.hibernate.ogm.datastore.neo4j.test.dsl.NodeForGraphAssertions;
import org.hibernate.ogm.datastore.neo4j.test.dsl.RelationshipsChainForGraphAssertions;
import org.junit.Before;
import org.junit.Test;
/**
* Tests for the mapping of associations with composite ids.
*
* @author Gunnar Morling
*/
public class ReferencedCompositeIdTest extends Neo4jJpaTestCase {
private Director director;
private Tournament britishOpen;
private Tournament playersChampionship;
@Before
public void prepareDb() throws Exception {
EntityManager em = getFactory().createEntityManager();
em.getTransaction().begin();
britishOpen = new Tournament( new TournamentId( "US", "123" ), "British Open" );
playersChampionship = new Tournament( new TournamentId( "US", "456" ), "Player's Championship" );
em.persist( britishOpen );
em.persist( playersChampionship );
director = new Director( "bob", "Bob", playersChampionship );
em.persist( director );
em.getTransaction().commit();
em.close();
}
@Test
public void testMapping() throws Exception {
NodeForGraphAssertions directorNode = node( "director", Director.class.getSimpleName(), ENTITY.name() )
.property( "id", director.getId() )
.property( "name", director.getName() );
NodeForGraphAssertions britishOpenNode = node( "british", Tournament.class.getSimpleName(), ENTITY.name() )
.property( "id.countryCode", britishOpen.getId().getCountryCode() )
.property( "id.sequenceNo", britishOpen.getId().getSequenceNo() )
.property( "name", britishOpen.getName() );
NodeForGraphAssertions playersChampionshipNode = node( "playerChamp", Tournament.class.getSimpleName(), ENTITY.name() )
.property( "id.countryCode", playersChampionship.getId().getCountryCode() )
.property( "id.sequenceNo", playersChampionship.getId().getSequenceNo() )
.property( "name", playersChampionship.getName() );
RelationshipsChainForGraphAssertions relationship1 = directorNode.relationshipTo( playersChampionshipNode, "directedTournament" );
assertThatOnlyTheseNodesExist( directorNode, britishOpenNode, playersChampionshipNode );
assertThatOnlyTheseRelationshipsExist( relationship1 );
}
@Override
public Class<?>[] getAnnotatedClasses() {
return new Class<?>[] { Director.class, Tournament.class, TournamentId.class };
}
}