package org.hibernate.ogm.hiking;
import java.util.List;
import static org.fest.assertions.Assertions.assertThat;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
import org.hibernate.ogm.hiking.model.Hike;
import org.hibernate.ogm.hiking.model.Person;
import org.hibernate.ogm.hiking.model.Section;
import org.hibernate.ogm.hiking.model.Trip;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
public class HikeTest {
private EntityManager entityManager;
@Rule
public ExpectedException exception = ExpectedException.none();
@Before
public void setupEntityManager() {
EntityManagerFactory emf =
Persistence.createEntityManagerFactory( "hike-PU" );
entityManager = emf.createEntityManager();
}
@Test
public void simpleEntityTest() {
entityManager.getTransaction().begin();
Hike hike = new Hike( "Land's End", "Bristol" );
entityManager.persist( hike );
entityManager.getTransaction().commit();
entityManager.getTransaction().begin();
hike = entityManager.find( Hike.class, hike.id );
assertThat( hike ).isNotNull();
assertThat( hike.destination ).isEqualTo( "Bristol" );
entityManager.getTransaction().commit();
}
@Test
public void embeddedCollectionTest() {
entityManager.getTransaction().begin();
Hike hike = new Hike( "Land's End", "Bristol" );
hike.sections.add( new Section( "Land's End", "Pendeen" ) );
hike.sections.add( new Section( "Pendeen", "Perranporth" ) );
entityManager.persist( hike );
entityManager.flush();
entityManager.clear();
hike = entityManager.find( Hike.class, hike.id );
assertThat( hike.sections ).hasSize( 2 );
assertThat( hike.sections.get( 0 ).from ).isEqualTo( "Land's End" );
assertThat( hike.sections.get( 1 ).from ).isEqualTo( "Pendeen" );
entityManager.getTransaction().commit();
}
@Test
public void associationTest() {
entityManager.getTransaction().begin();
Hike hike = new Hike( "San Francisco", "Oakland" );
Trip trip = new Trip();
trip.name = "Nappa Valley Unit Test";
hike.recommendedTrip = trip;
trip.availableHikes.add( hike );
entityManager.persist( trip );
entityManager.persist( hike );
entityManager.flush();
entityManager.clear();
hike = entityManager.find( Hike.class, hike.id );
assertThat( hike.recommendedTrip ).isNotNull();
assertThat( hike.recommendedTrip.name ).isEqualTo( "Nappa Valley Unit Test" );
entityManager.getTransaction().commit();
}
@Test
public void validationTest() {
exception.expect( Exception.class );
entityManager.getTransaction().begin();
Hike hike = new Hike( null, null );
entityManager.persist( hike );
entityManager.getTransaction().commit();
}
@Test
public void testClearDatabase() {
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
Hike hike = new Hike( "San Francisco", "Oakland" );
Trip trip = new Trip();
trip.name = "Nappa Valley Unit Test";
hike.recommendedTrip = trip;
trip.availableHikes.add( hike );
entityManager.persist( trip );
entityManager.persist( hike );
transaction.commit();
entityManager.clear();
transaction = entityManager.getTransaction();
transaction.begin();
List<?> all = entityManager.createQuery( "from Hike" ).getResultList();
for ( Hike object : (List<Hike>) all ) {
object.recommendedTrip = null;
entityManager.remove( object );
}
all = entityManager.createQuery( "from Trip" ).getResultList();
for ( Object object : all ) {
entityManager.remove( object );
}
transaction.commit();
}
}