package org.hibernate.ogm.hiking;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.File;
import java.util.List;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.hibernate.ogm.hiking.model.Hike;
import org.hibernate.ogm.hiking.model.Person;
import org.hibernate.ogm.hiking.model.Trip;
import org.hibernate.ogm.hiking.repository.HikeRepository;
import org.hibernate.ogm.hiking.repository.TripRepository;
import org.hibernate.validator.internal.util.Version;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.arquillian.transaction.api.annotation.Transactional;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
@RunWith(Arquillian.class)
@Transactional
public class HikeRepositoryIT {
private static final String WEBAPP_SRC = "src/main/webapp/";
@Inject
private HikeRepository hikeRepository;
@Inject
private TripRepository tripRepository;
@PersistenceContext(unitName="hike-PU-JTA")
private EntityManager entityManager;
@Deployment
public static Archive<?> createTestArchive() {
return ShrinkWrap
.create( WebArchive.class, HikeRepositoryIT.class.getSimpleName() + ".war" )
.addPackage( Hike.class.getPackage() )
.addPackage( HikeRepository.class.getPackage() )
.addAsResource( "META-INF/persistence.xml" )
.addAsWebInfResource( new File( WEBAPP_SRC + "WEB-INF/beans.xml" ) )
.addAsResource( new StringAsset(
"Dependencies: org.hibernate.ogm:main services, org.hibernate.ogm.mongodb:main services" ),
"META-INF/MANIFEST.MF"
);
}
@Test
public void shouldPersistHikeWithRecommendedTrip() {
Trip trip = new Trip();
trip.name = "test";
trip = tripRepository.createTrip( trip );
Hike hike = hikeRepository.createHike( new Hike( "Land's End", "Bristol" ), trip );
assertEquals( "test", hike.recommendedTrip.name );
entityManager.flush();
hike = entityManager.find( Hike.class, hike.id );
assertNotNull( hike );
}
@Test
public void testNativeQueries() {
Trip trip = new Trip();
trip.name = "End of the world";
trip = tripRepository.createTrip( trip );
Hike hike = hikeRepository.createHike( new Hike( "North pole", "South pole" ), trip );
entityManager.flush();
entityManager.clear();
List<Hike> hikes = hikeRepository.getHikesByTripId( trip.id );
assertEquals( 1, hikes.size() );
}
@Test
public void testValidation() {
assertEquals( "6.0.0.Alpha1", Version.getVersionString() );
}
}