From b6887c11f496ce14a5c2b4272f76f98ea9aa34d2 Mon Sep 17 00:00:00 2001 From: Lohan Calot <lohan.calot.etu@univ-lille.fr> Date: Mon, 15 Mar 2021 09:13:39 +0100 Subject: [PATCH] added tests --- .../iut/pizzaland/PizzaResourceTest.java | 194 ++++++++++++++++++ 1 file changed, 194 insertions(+) create mode 100644 src/test/java/fr/ulille/iut/pizzaland/PizzaResourceTest.java diff --git a/src/test/java/fr/ulille/iut/pizzaland/PizzaResourceTest.java b/src/test/java/fr/ulille/iut/pizzaland/PizzaResourceTest.java new file mode 100644 index 0000000..e4f289d --- /dev/null +++ b/src/test/java/fr/ulille/iut/pizzaland/PizzaResourceTest.java @@ -0,0 +1,194 @@ +package fr.ulille.iut.pizzaland; + +import fr.ulille.iut.pizzaland.ApiV1; +import fr.ulille.iut.pizzaland.beans.Pizza; +import fr.ulille.iut.pizzaland.dao.PizzaDao; +import fr.ulille.iut.pizzaland.dto.PizzaCreateDto; +import fr.ulille.iut.pizzaland.dto.PizzaDto; + +import org.glassfish.jersey.test.JerseyTest; +import org.glassfish.jersey.test.TestProperties; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.GenericType; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Application; +import jakarta.ws.rs.core.Form; +import jakarta.ws.rs.core.Response; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.List; +import java.util.UUID; +import java.util.logging.Logger; + +/* + * JerseyTest facilite l'écriture des tests en donnant accès aux + * méthodes de l'interface jakarta.ws.rs.client.Client. + * la méthode configure() permet de démarrer la ressource à tester + */ +public class PizzaResourceTest extends JerseyTest { + private static final Logger LOGGER = Logger.getLogger(PizzaResourceTest.class.getName()); + private PizzaDao dao; + + @Override + protected Application configure() { + return new ApiV1(); + } + + // Les méthodes setEnvUp() et tearEnvDown() serviront à terme à initialiser la + // base de données + // et les DAO + + // https://stackoverflow.com/questions/25906976/jerseytest-and-junit-throws-nullpointerexception + @Before + public void setEnvUp() { + dao = BDDFactory.buildDao(PizzaDao.class); + dao.createTable(); + dao.createAssocTable(); + } + + @After + public void tearEnvDown() throws Exception { + dao.dropTable(); + } + + + @Test + public void testGetEmptyList() { + // La méthode target() permet de préparer une requête sur une URI. + // La classe Response permet de traiter la réponse HTTP reçue. + Response response = target("/pizzas").request().get(); + + // On vérifie le code de la réponse (200 = OK) + assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + + // On vérifie la valeur retournée (liste vide) + // L'entité (readEntity() correspond au corps de la réponse HTTP. + // La classe jakarta.ws.rs.core.GenericType<T> permet de définir le type + // de la réponse lue quand on a un type paramétré (typiquement une liste). + List<PizzaDto> pizzas; + pizzas = response.readEntity(new GenericType<List<PizzaDto>>() { + }); + + assertEquals(0, pizzas.size()); + + } + + @Test + public void testGetNotExistingIngredient() { + Response response = target("/pizzas").path(UUID.randomUUID().toString()).request().get(); + assertEquals(Response.Status.NOT_FOUND.getStatusCode(),response.getStatus()); + } + + @Test + public void testGetExistingPizza() { + + Pizza pizza = new Pizza(); + pizza.setName("4 fromages"); + dao.insert(pizza); + + Response response = target("/pizzas").path(pizza.getId().toString()).request(MediaType.APPLICATION_JSON).get(); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + + Pizza result = Pizza.fromDto(response.readEntity(PizzaDto.class)); + assertEquals(pizza, result); + } + + @Test + public void testCreatePizza() { + PizzaCreateDto ingredientCreateDto = new PizzaCreateDto(); + ingredientCreateDto.setName("Paysanne"); + + Response response = target("/pizzas").request().post(Entity.json(ingredientCreateDto)); + + assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatus()); + + PizzaDto returnedEntity = response.readEntity(PizzaDto.class); + + assertEquals(target("/pizzas/" + returnedEntity.getId()).getUri(), response.getLocation()); + assertEquals(returnedEntity.getName(), ingredientCreateDto.getName()); + } + + @Test + public void testCreateSamePizza() { + Pizza pizza = new Pizza(); + pizza.setName("4 fromages"); + dao.insert(pizza); + + PizzaCreateDto ingredientCreateDto = Pizza.toCreateDto(pizza); + Response response = target("/pizzas").request().post(Entity.json(ingredientCreateDto)); + + assertEquals(Response.Status.CONFLICT.getStatusCode(), response.getStatus()); + } + + @Test + public void testCreatePizzaWithoutName() { + PizzaCreateDto ingredientCreateDto = new PizzaCreateDto(); + + Response response = target("/pizzas").request().post(Entity.json(ingredientCreateDto)); + + assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), response.getStatus()); + } + + @Test + public void testDeleteExistingPizza() { + Pizza pizza = new Pizza(); + pizza.setName("4 fromages"); + dao.insert(pizza); + + Response response = target("/pizzas/").path(pizza.getId().toString()).request().delete(); + + assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus()); + + Pizza result = dao.findById(pizza.getId()); + assertEquals(result, null); + } + + @Test + public void testDeleteNotExistingPizza() { + Response response = target("/pizzas").path(UUID.randomUUID().toString()).request().delete(); + assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus()); + } + + @Test + public void testGetPizzaName() { + Pizza pizza = new Pizza(); + pizza.setName("Chorizo"); + dao.insert(pizza); + + Response response = target("pizzas").path(pizza.getId().toString()).path("name").request().get(); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + + assertEquals("Chorizo", response.readEntity(String.class)); + } + + @Test + public void testGetNotExistingPizzaName() { + Response response = target("pizzas").path(UUID.randomUUID().toString()).path("name").request().get(); + + assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus()); + } + + @Test + public void testCreateWithForm() { + Form form = new Form(); + form.param("name", "4 fromages"); + + Entity<Form> formEntity = Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE); + Response response = target("pizzas").request().post(formEntity); + + assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatus()); + String location = response.getHeaderString("Location"); + String id = location.substring(location.lastIndexOf('/') + 1); + Pizza result = dao.findById(UUID.fromString(id)); + + assertNotNull(result); + } +} -- GitLab