From 58b7dc285388c3fd74ce7d7a52205994c33fb880 Mon Sep 17 00:00:00 2001 From: Yvan Peter <yvan.peter@univ-lille.fr> Date: Sun, 9 Feb 2020 22:51:53 +0100 Subject: [PATCH] DELETE et name --- README.md | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 224bbb2..ed8c376 100644 --- a/README.md +++ b/README.md @@ -562,13 +562,14 @@ L'implémentation de la classe devrait fonctionner avec le test suivant assertEquals(Response.Status.NOT_FOUND.getStatusCode(),response.getStatus()); } + $ mvn test Results : Tests run: 3, Failures: 0, Errors: 0, Skipped: 0 -### Test de création d'ingrédient +### Implementation de la méthode POST Il va falloir implémenter la méthode POST pour la création des ingrédients. Commençons par les différents tests : création, création de deux ingrédients identiques et création d'ingrédient sans nom. @@ -728,3 +729,90 @@ Vous aurez peut-être un affichage d'exception liée au test de création de doublon, toutefois le test est réussi puisqu'il a levé une exception qui a été traduite par un code d'erreur HTTP 406. +### Implémentation de la méthode DELETE +Les tests liés à la méthode DELETE sont les suivants : + + @Test + public void testDeleteExistingIngredient() { + Ingredient ingredient = new Ingredient(); + ingredient.setName("Chorizo"); + long id = dao.insert(ingredient.getName()); + ingredient.setId(id); + + Response response = target("/ingredients/" + id).request().delete(); + + assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus()); + + Ingredient result = dao.findById(id); + assertEquals(result, null); + } + + @Test + public void testDeleteNotExistingIngredient() { + Response response = target("/ingredients/125").request().delete(); + assertEquals(Response.Status.NOT_FOUND.getStatusCode(), + response.getStatus()); + } + +Après avoir constaté que ces tests échouent, nous pouvons fournir une +implémentation pour la méthode DELETE : + + import javax.ws.rs.DELETE; + + @DELETE + @Path("{id}") + public Response deleteIngredient(@PathParam("id") long id) { + if ( ingredients.findById(id) == null ) { + throw new WebApplicationException(Response.Status.NOT_FOUND); + } + + ingredients.remove(id); + + return Response.status(Response.Status.ACCEPTED).build(); + } + +Nous devons également implémenter la méthode remove dans +`IngredientDao` : + + @SqlUpdate("DELETE FROM ingredients WHERE id = :id") + void remove(long id); + +Avec cette implémentation, nos tests réussissent. + +### Implémentation de la méthode GET pour récupérer le nom de l'ingrédient +Commençons par les tests correspondant à cette URI (GET +/ingredients/{id}/name) + + @Test + public void testGetIngredientName() { + Ingredient ingredient = new Ingredient(); + ingredient.setName("Chorizo"); + long id = dao.insert(ingredient.getName()); + + Response response = target("ingredients/" + id + "/name").request().get(); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + + assertEquals("Chorizo", response.readEntity(String.class)); + } + + @Test + public void testGetNotExistingIngredientName() { + Response response = target("ingredients/125/name").request().get(); + + assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus()); + } + +L'implémentation correspondant à ce test est simple : + + @GET + @Path("{id}/name") + public String getIngredientName(@PathParam("id") long id) { + Ingredient ingredient = ingredients.findById(id); + if ( ingredient == null ) { + throw new WebApplicationException(Response.Status.NOT_FOUND); + } + + return ingredient.getName(); + } + -- GitLab