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
+
+
+
+
+
+