From 3549329b02c1b0c5b0d4bd710500dc393b55516c Mon Sep 17 00:00:00 2001 From: Fabien Arrault Date: Tue, 23 Jul 2013 23:26:56 +0200 Subject: [PATCH] adding possibilities to test repositories in an embedded h2 database outside of the application server (without arquillian) --- pom.xml | 15 +++ .../repository/PersonRepository.java | 2 +- .../repository/PersonRepositoryIT.java | 2 +- .../PersonRepositoryStandaloneIT.java | 117 ++++++++++++++++++ .../META-INF/arquillian-persistence.xml | 18 +++ src/test/resources/META-INF/persistence.xml | 23 +++- 6 files changed, 172 insertions(+), 5 deletions(-) create mode 100644 src/test/java/fr/ippon/companyfight/repository/PersonRepositoryStandaloneIT.java create mode 100644 src/test/resources/META-INF/arquillian-persistence.xml diff --git a/pom.xml b/pom.xml index 4833591..7c0bded 100755 --- a/pom.xml +++ b/pom.xml @@ -145,6 +145,13 @@ 4.0.1.Final provided + + + org.hibernate + hibernate-entitymanager + 4.0.1.Final + test + @@ -192,6 +199,14 @@ ${version.junit} test + + + com.h2database + h2 + 1.3.170 + test + + org.jboss.arquillian.junit arquillian-junit-container diff --git a/src/main/java/fr/ippon/companyfight/repository/PersonRepository.java b/src/main/java/fr/ippon/companyfight/repository/PersonRepository.java index dfa7b05..c24adfd 100644 --- a/src/main/java/fr/ippon/companyfight/repository/PersonRepository.java +++ b/src/main/java/fr/ippon/companyfight/repository/PersonRepository.java @@ -11,7 +11,7 @@ public class PersonRepository { @PersistenceContext - private EntityManager em; + EntityManager em; public Person createOrUpdatePerson(Person person) { return em.merge(person); diff --git a/src/test/java/fr/ippon/companyfight/repository/PersonRepositoryIT.java b/src/test/java/fr/ippon/companyfight/repository/PersonRepositoryIT.java index 1a35fa5..ec832fa 100644 --- a/src/test/java/fr/ippon/companyfight/repository/PersonRepositoryIT.java +++ b/src/test/java/fr/ippon/companyfight/repository/PersonRepositoryIT.java @@ -39,7 +39,7 @@ public static Archive jar() { return ShrinkWrap.create(WebArchive.class) .addPackage(Person.class.getPackage()) .addPackage(PersonRepository.class.getPackage()) - .addAsResource("META-INF/persistence.xml", "META-INF/persistence.xml") + .addAsResource("META-INF/arquillian-persistence.xml","META-INF/persistence.xml") .addAsWebInfResource("jbossas-ds.xml") .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml"); } diff --git a/src/test/java/fr/ippon/companyfight/repository/PersonRepositoryStandaloneIT.java b/src/test/java/fr/ippon/companyfight/repository/PersonRepositoryStandaloneIT.java new file mode 100644 index 0000000..da8ca0f --- /dev/null +++ b/src/test/java/fr/ippon/companyfight/repository/PersonRepositoryStandaloneIT.java @@ -0,0 +1,117 @@ +package fr.ippon.companyfight.repository; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.List; + +import javax.persistence.EntityManager; +import javax.persistence.EntityManagerFactory; +import javax.persistence.Persistence; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import fr.ippon.companyfight.model.Person; + +public class PersonRepositoryStandaloneIT { + + private PersonRepository personRepository; + + private EntityManager em; + private static EntityManagerFactory entityManagerFactory; + + + @BeforeClass + public static void createEMF() throws Exception { + entityManagerFactory = Persistence.createEntityManagerFactory("primary"); + } + @AfterClass + public static void destroyEMF() throws Exception { + entityManagerFactory.close(); + } + + @Before + public void preparePersistenceTest() throws Exception { + em = entityManagerFactory.createEntityManager(); + em.getTransaction().begin(); + + personRepository = new PersonRepository(); + personRepository.em = em; + } + + @After + public void rollbackTransaction() throws Exception { + em.getTransaction().rollback(); + em = null; + } + + @Test + public void shouldCreateAPerson() { + Person person = new Person(); + person.setLogin("test-login"); + person.setFollowersCount(10); + person.setAvatarUrl("http://avatar.url"); + + personRepository.createOrUpdatePerson(person); + + Person testPerson = personRepository.findPerson("test-login"); + assertNotNull(testPerson); + assertEquals(10, testPerson.getFollowersCount()); + assertEquals("http://avatar.url", testPerson.getAvatarUrl()); + assertEquals(0, testPerson.getRepositories().size()); + } + + @Test + public void shouldGetAllPersons() { + List persons = personRepository.findAll(); + assertEquals(0, persons.size()); + + create10Persons(); + + persons = personRepository.findAll(); + assertEquals(10, persons.size()); + } + + @Test + public void shouldGetPersonsOrderedByFollowersCount() { + List persons = personRepository.findPersonsOrderedByFollowersCount(); + assertEquals(0, persons.size()); + + create10Persons(); + + Person person = new Person(); + person.setLogin("test-login-11"); + person.setFollowersCount(10); + person.setAvatarUrl("http://avatar.url"); + personRepository.createOrUpdatePerson(person); + + person = new Person(); + person.setLogin("test-login-12"); + person.setFollowersCount(0); + person.setAvatarUrl("http://avatar.url"); + personRepository.createOrUpdatePerson(person); + + persons = personRepository.findPersonsOrderedByFollowersCount(); + assertEquals(12, persons.size()); + // test-login-11 should be the first user + assertEquals("test-login-11", persons.iterator().next().getLogin()); + + // test-login-12 should be the last user + assertEquals("test-login-12", persons.get(persons.size() - 1).getLogin()); + } + + private void create10Persons() { + // Create 10 persons + for (int i = 0; i < 10; i++) { + Person person = new Person(); + person.setLogin("test-login-"+i); + person.setFollowersCount(5); + person.setAvatarUrl("http://avatar.url"); + personRepository.createOrUpdatePerson(person); + } + } +} diff --git a/src/test/resources/META-INF/arquillian-persistence.xml b/src/test/resources/META-INF/arquillian-persistence.xml new file mode 100644 index 0000000..1077145 --- /dev/null +++ b/src/test/resources/META-INF/arquillian-persistence.xml @@ -0,0 +1,18 @@ + + + + + java:jboss/datasources/test/CompanyFight + + + + + + + + diff --git a/src/test/resources/META-INF/persistence.xml b/src/test/resources/META-INF/persistence.xml index 1077145..cb705d4 100644 --- a/src/test/resources/META-INF/persistence.xml +++ b/src/test/resources/META-INF/persistence.xml @@ -4,12 +4,29 @@ xsi:schemaLocation=" http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> + + + - - java:jboss/datasources/test/CompanyFight + org.hibernate.ejb.HibernatePersistence + + + + fr.ippon.companyfight.model.Person + fr.ippon.companyfight.model.Organization + fr.ippon.companyfight.model.Fight + fr.ippon.companyfight.model.Repository + fr.ippon.companyfight.model.Score + + + + + +