Skip to content

Commit

Permalink
javaee-projets - mise en place Arquillian
Browse files Browse the repository at this point in the history
  • Loading branch information
ltearno committed Nov 14, 2017
1 parent 4af5397 commit 6149df2
Show file tree
Hide file tree
Showing 8 changed files with 206 additions and 14 deletions.
58 changes: 58 additions & 0 deletions formation-programmation-java/projets/javaee/jpa-101/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,13 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.jboss.arquillian</groupId>
<artifactId>arquillian-bom</artifactId>
<version>${version.arquillian}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>

Expand All @@ -53,6 +60,18 @@
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.jboss.arquillian.junit</groupId>
<artifactId>arquillian-junit-container</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.wildfly.arquillian</groupId>
<artifactId>wildfly-arquillian-container-embedded</artifactId>
<version>2.1.0.Final</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
Expand All @@ -65,6 +84,45 @@
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack</id>
<phase>process-test-classes</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>org.wildfly</groupId>
<artifactId>wildfly-dist</artifactId>
<version>${version.wildfly}</version>
<type>zip</type>
<overWrite>false</overWrite>
<outputDirectory>target</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<!-- Fork every test because it will launch a separate AS instance -->
<forkMode>always</forkMode>
<systemPropertyVariables>
<jboss.home>${project.basedir}/target/wildfly-${version.wildfly}</jboss.home>
<java.util.logging.manager>org.jboss.logmanager.LogManager</java.util.logging.manager>
</systemPropertyVariables>
<redirectTestOutputToFile>false</redirectTestOutputToFile>
</configuration>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,11 @@

@Stateless
public class GestionCategories extends GestionGenerique<Categorie> {
public GestionCategories() {
public GestionCategories() throws NoSuchFieldException {
super(Categorie.class);
}

public Long getNbProduitParCategorieId(Integer id) {
public long getNbProduitParCategorieId(Integer id) {
TypedQuery<Long> query = em.createQuery("select count(p) from Produit p where p.categorie.id=:id", Long.class);
query.setParameter("id", id);
return query.getSingleResult();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

@Stateless
public class GestionFabricants extends GestionGenerique<Fabricant> {
public GestionFabricants() {
public GestionFabricants() throws NoSuchFieldException {
super(Fabricant.class);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import java.lang.reflect.Field;
import java.util.List;

/**
* Ceci est une implémentation générique d'un EJB d'accès aux données (souvent appelé DAO).
*
* <p>
* Il apporte les opérations de base communes à toutes nos entités (Categorie, Fabricant et Produit).
*
* <p>
* Il stocke la classe sur laquelle il travaille dans son attribut 'managedClass'.
*
* <p>
* Les sous-classes concrètes pourront ajouter des méthodes selon les besoins spécifiques.
*
* @param <T> Le type que l'EJB gère
Expand All @@ -22,16 +23,29 @@ public abstract class GestionGenerique<T> {
protected EntityManager em;

private final Class<T> managedClass;
private final Field idField;

public GestionGenerique(Class<T> managedClass) {
public GestionGenerique(Class<T> managedClass) throws NoSuchFieldException {
this.managedClass = managedClass;

idField = managedClass.getDeclaredField("id");
idField.setAccessible(true);
}

public List<T> findAll() {
return em.createQuery("select e from " + managedClass.getSimpleName() + " e", managedClass).getResultList();
}

public T add(T entity) {
try {
if (idField != null && idField.get(entity) == null) {
em.persist(entity);
return entity;
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}

return em.merge(entity);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

@Stateless
public class GestionProduits extends GestionGenerique<Produit> {
public GestionProduits() {
public GestionProduits() throws NoSuchFieldException {
super(Produit.class);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,63 @@
package fr.lteconsulting.training.moviedb;

import fr.lteconsulting.training.moviedb.ejb.GestionCategories;
import fr.lteconsulting.training.moviedb.ejb.GestionProduits;
import fr.lteconsulting.training.moviedb.model.Categorie;
import org.junit.Assert;
import fr.lteconsulting.training.moviedb.model.Produit;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;

import static org.junit.Assert.assertTrue;
import javax.ejb.EJB;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;

@RunWith(Arquillian.class)
public class GestionCategoriesTest {
@Deployment
public static Archive<?> createDeployment() {
return ShrinkWrap.create(WebArchive.class, "test.war")
.addPackage(Categorie.class.getPackage())
.addPackage(GestionCategories.class.getPackage())
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
}

@EJB
private GestionCategories gestionCategories;

@EJB
private GestionProduits gestionProduits;

@Test
public void testAjoutCategorie() {
Categorie categorie = new Categorie();
categorie.setNom("test");
gestionCategories.add(categorie);

assertNotNull("l'ID ne devrait pas être null", categorie.getId());
assertEquals("le nom devrait être 'test'", "test", categorie.getNom());
}

@Test
public void testGestionCategorie() {
GestionCategories gestionCategories = new GestionCategories();
public void testGetNbProduitParCategorieId() {
Categorie categorie = new Categorie();
gestionCategories.add(categorie);

gestionCategories.add(new Categorie());
int nb = 10;
for (int i = 0; i < nb; i++) {
Produit produit = new Produit();
produit.setCategorie(categorie);
gestionProduits.add(produit);
}

assertTrue(true);
assertNotNull("l'ID ne devrait pas être null", categorie.getId());
assertEquals("il devrait y avoir " + nb + " produits pour cette catégorie", nb, gestionCategories.getNbProduitParCategorieId(categorie.getId()));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
package fr.lteconsulting.training.moviedb;

import fr.lteconsulting.training.moviedb.ejb.GestionCategories;
import fr.lteconsulting.training.moviedb.ejb.GestionFabricants;
import fr.lteconsulting.training.moviedb.ejb.GestionProduits;
import fr.lteconsulting.training.moviedb.model.Categorie;
import fr.lteconsulting.training.moviedb.model.Produit;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import javax.ejb.EJB;
import java.util.List;

@RunWith(Arquillian.class)
public class GestionProduitsTest {
@Deployment
public static Archive<?> createDeployment() {
return ShrinkWrap.create(WebArchive.class, "test.war")
.addPackage(Categorie.class.getPackage())
.addPackage(GestionCategories.class.getPackage())
.addAsResource("test-persistence.xml", "META-INF/persistence.xml")
.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
}

@EJB
private GestionCategories gestionCategories;

@EJB
private GestionFabricants gestionFabricants;

@EJB
private GestionProduits gestionProduits;

@Before
public void beforeTest() {
for (Produit produit : gestionProduits.findAll())
gestionProduits.deleteById(produit.getId());
}

@Test
public void testRechercheProduits() {
Produit produit = new Produit();
produit.setNom("toto");
gestionProduits.add(produit);

List<Produit> produits = gestionProduits.findByName("toto");
Assert.assertNotNull("liste devrait etre non nulle", produits);
Assert.assertEquals("on devrait en trouver un", 1, produits.size());

produits = gestionProduits.findByName("tot");
Assert.assertNotNull("liste devrait etre non nulle", produits);
Assert.assertEquals("on devrait en trouver un", 1, produits.size());
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="Catalogue">
<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show_sql" value="true"/>
</properties>
</persistence-unit>
</persistence>

0 comments on commit 6149df2

Please sign in to comment.