diff --git a/src/main/java/fr/ulille/iut/pizzaland/beans/Ingredient.java b/src/main/java/fr/ulille/iut/pizzaland/beans/Ingredient.java new file mode 100644 index 0000000000000000000000000000000000000000..15a6b3991f0efd7bb07932e9d8023e5db722df98 --- /dev/null +++ b/src/main/java/fr/ulille/iut/pizzaland/beans/Ingredient.java @@ -0,0 +1,72 @@ +package fr.ulille.iut.pizzaland.beans; + +import fr.ulille.iut.pizzaland.dto.IngredientDto; + +public class Ingredient { + private long id; + private String name; + + public Ingredient() { + } + + public Ingredient(long id, String name) { + this.id = id; + this.name = name; + } + + public void setId(long id) { + this.id = id; + } + + public long getId() { + return id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public static IngredientDto toDto(Ingredient i) { + IngredientDto dto = new IngredientDto(); + dto.setId(i.getId()); + dto.setName(i.getName()); + + return dto; + } + + public static Ingredient fromDto(IngredientDto dto) { + Ingredient ingredient = new Ingredient(); + ingredient.setId(dto.getId()); + ingredient.setName(dto.getName()); + + return ingredient; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) + return false; + Ingredient other = (Ingredient) obj; + if (id != other.id) + return false; + if (name == null) { + if (other.name != null) + return false; + } else if (!name.equals(other.name)) + return false; + return true; + } + + @Override + public String toString() { + return "Ingredient [id=" + id + ", name=" + name + "]"; + } +} diff --git a/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java b/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java new file mode 100644 index 0000000000000000000000000000000000000000..0fda1f32b55e8631594446fd6039bcd8bdf5f89f --- /dev/null +++ b/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java @@ -0,0 +1,31 @@ +package fr.ulille.iut.pizzaland.dao; + +import java.util.List; + +import org.jdbi.v3.sqlobject.config.RegisterBeanMapper; +import org.jdbi.v3.sqlobject.statement.GetGeneratedKeys; +import org.jdbi.v3.sqlobject.statement.SqlQuery; +import org.jdbi.v3.sqlobject.statement.SqlUpdate; + +import fr.ulille.iut.pizzaland.beans.Ingredient; + +public interface IngredientDao { + + @SqlUpdate("CREATE TABLE IF NOT EXISTS ingredients (id INTEGER PRIMARY KEY, name VARCHAR UNIQUE NOT NULL)") + void createTable(); + + @SqlUpdate("DROP TABLE IF EXISTS ingredients") + void dropTable(); + + @SqlUpdate("INSERT INTO ingredients (name) VALUES (:name)") + @GetGeneratedKeys + long insert(String name); + + @SqlQuery("SELECT * FROM ingredients") + @RegisterBeanMapper(Ingredient.class) + List<Ingredient> getAll(); + + @SqlQuery("SELECT * FROM ingredients WHERE id = :id") + @RegisterBeanMapper(Ingredient.class) + Ingredient findById(long id); +} diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java index 1a9360bf01fa2544b241a017cfa0c056dada02e2..75f914d9a6f1f83084d399635fcacceddafac5ec 100644 --- a/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java +++ b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java @@ -1,8 +1,26 @@ package fr.ulille.iut.pizzaland.dto; public class IngredientDto { - - public IngredientDto() { - - } + private long id; + private String name; + + public IngredientDto() { + + } + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name=name; + } } diff --git a/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java b/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java index bc19082daf4dd4cd778b956d9607e2f259a94cd1..6439bc11966154f65c662943830a4667580ba6c5 100644 --- a/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java +++ b/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java @@ -11,22 +11,35 @@ import javax.ws.rs.core.Context; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; +import javax.ws.rs.PathParam; +import fr.ulille.iut.pizzaland.beans.Ingredient; + import fr.ulille.iut.pizzaland.dto.IngredientDto; @Path("/ingredients") public class IngredientResource { - private static final Logger LOGGER = Logger.getLogger(IngredientResource.class.getName()); - @Context - public UriInfo uriInfo; +@Context +public UriInfo uriInfo; + +public IngredientResource() { +} + +@GET +public List<IngredientDto> getAll() { - public IngredientResource() { - } + return new ArrayList<IngredientDto>(); +} - @GET - public List<IngredientDto> getAll() { - LOGGER.info("IngredientResource:getAll"); +@GET +@Path("{id}") +public IngredientDto getOneIngredient(@PathParam("id") long id) { + Ingredient ingredient = new Ingredient(); + ingredient.setId(1); + ingredient.setName("mozzarella"); + + return Ingredient.toDto(ingredient); - return null; - } } + +} \ No newline at end of file diff --git a/src/test/java/fr/ulille/iut/pizzaland/IngredientResourceTest.java b/src/test/java/fr/ulille/iut/pizzaland/IngredientResourceTest.java index 2c8b1be3f265046d4d3557185aac26b7704ec1ac..75cf2d1776545f6797d2d6d3c4706ff6f8e89e10 100644 --- a/src/test/java/fr/ulille/iut/pizzaland/IngredientResourceTest.java +++ b/src/test/java/fr/ulille/iut/pizzaland/IngredientResourceTest.java @@ -2,6 +2,8 @@ package fr.ulille.iut.pizzaland; import fr.ulille.iut.pizzaland.ApiV1; import fr.ulille.iut.pizzaland.dto.IngredientDto; +import fr.ulille.iut.pizzaland.beans.Ingredient; +import fr.ulille.iut.pizzaland.dao.IngredientDao; import org.glassfish.jersey.test.JerseyTest; import org.glassfish.jersey.test.TestProperties; @@ -9,6 +11,7 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; + import javax.ws.rs.client.Entity; import javax.ws.rs.core.GenericType; import javax.ws.rs.core.Application; @@ -25,10 +28,11 @@ import java.util.logging.Logger; * la méthode configure() permet de démarrer la ressource à tester */ public class IngredientResourceTest extends JerseyTest { - private static final Logger LOGGER = Logger.getLogger(IngredientResourceTest.class.getName()); + private IngredientDao dao; @Override protected Application configure() { + BDDFactory.setJdbiForTests(); return new ApiV1(); } @@ -38,12 +42,14 @@ public class IngredientResourceTest extends JerseyTest { // https://stackoverflow.com/questions/25906976/jerseytest-and-junit-throws-nullpointerexception @Before public void setEnvUp() { - + dao = BDDFactory.buildDao(IngredientDao.class); + dao.createTable(); + } @After public void tearEnvDown() throws Exception { - + dao.dropTable(); } @Test @@ -66,4 +72,24 @@ public class IngredientResourceTest extends JerseyTest { assertEquals(0, ingredients.size()); } + + + + @Test + public void testGetExistingIngredient() { + Ingredient ingredient = new Ingredient(); + ingredient.setName("mozzarella"); + + long id = dao.insert(ingredient.getName()); + ingredient.setId(id); + + Response response = target("/ingredients/" + id).request().get(); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatus()); + + Ingredient result = Ingredient.fromDto(response.readEntity(IngredientDto.class)); + assertEquals(ingredient, result); + + } + }