From 30585f152b048cf229b3b6865fd789b6e3e9f30d Mon Sep 17 00:00:00 2001 From: Jorge Jimenez Sanchez Date: Sun, 3 Jan 2021 21:17:29 +0100 Subject: [PATCH 1/6] =?UTF-8?q?[ADD]=20A=C3=B1adido=20la=20implementacion?= =?UTF-8?q?=20de=20los=20m=C3=A9todos=20setId=20y=20getId=20a=20la=20clase?= =?UTF-8?q?=20Order?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/model/MyOrder.java | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/src/main/java/model/MyOrder.java b/src/main/java/model/MyOrder.java index fb0e44c..475d5b5 100644 --- a/src/main/java/model/MyOrder.java +++ b/src/main/java/model/MyOrder.java @@ -4,30 +4,44 @@ package model; import java.util.Collection; +import java.util.HashMap; import java.util.Iterator; +import java.util.logging.Logger; /** * @author Isabel Román */ public class MyOrder implements Order { + + /** + * Objeto tipo logger para gestionar los mensajes durante la ejecución + */ + private static Logger trazador=Logger.getLogger(MyProduct.class.getName()); + /** + * Identificador del producto + */ + private String id; + + /** * */ public MyOrder() { - // TODO Auto-generated constructor stub } @Override public void setId(String id) { - // TODO Auto-generated method stub - + String msg="Estableciendo id a "+id; + trazador.info(msg); + this.id=id; } @Override public String getId() { - // TODO Auto-generated method stub - return null; + String msg="Devolviendo el id como "+id; + trazador.info(msg); + return this.id; } @Override From 1c212f06d0b4b0eed65192778dafa5a8d387aca6 Mon Sep 17 00:00:00 2001 From: Jorge Jimenez Sanchez Date: Sun, 3 Jan 2021 21:18:19 +0100 Subject: [PATCH 2/6] =?UTF-8?q?[ADD]=20A=C3=B1adida=20Mejora=20en=20el=20m?= =?UTF-8?q?=C3=A9todo=20Order=20de=20MyBagManager=20para=20la=20gesti?= =?UTF-8?q?=C3=B3n=20del=20ID=20Un=C3=ADvoco?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/shopmanager/MyBagManager.java | 24 ++++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/shopmanager/MyBagManager.java b/src/main/java/shopmanager/MyBagManager.java index 8deb338..b8b7f0f 100644 --- a/src/main/java/shopmanager/MyBagManager.java +++ b/src/main/java/shopmanager/MyBagManager.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.UUID; import java.util.Collection; import java.util.HashMap; @@ -14,11 +15,9 @@ import exceptions.NoEnoughStock; import exceptions.NotInStock; import exceptions.UnknownRepo; -import model.MyOrder; import model.Order; import model.Product; import persistency.OrderRepository; -import shopmanager.StockManager; /** * @author Isabel Román * @@ -37,10 +36,11 @@ public MyBagManager(){ cesta=new HashMap(); } - public MyBagManager(OrderRepository repo,StockManager stockManager){ + public MyBagManager(OrderRepository repo,StockManager stockManager,Order orderManager){ cesta=new HashMap(); repositorio=repo; stock=stockManager; + order=orderManager; } @@ -104,12 +104,30 @@ public Optional findProduct(Product product) { public Order order() { // No crea el objeto order, aún no está resuelto quién será el responsable de elegir el tipo concreto try{ + + // Persisto el stock trazador.info("Intento persistir el stock"); stock.save(); + + // Actualizo pedido trazador.info("Actualizo el pedido"); order.setProducts(cesta.values()); + + // Crep ID Univoco + trazador.info("Creo ID Univoco"); + // Creo UUID unico + UUID id = UUID.randomUUID(); + // Asigno el UUID al objeto order + order.setId(String.valueOf(id)); + + // Persisto el pedido trazador.info("Persisto el pedido"); repositorio.save(order); + + // Borro la cesta + trazador.info("Borro la cesta"); + cesta.clear(); + } catch (UnknownRepo ex) { trazador.info("No ha sido posible guardar el pedido, no se estableció el repositorio en el stock"); From 59f66d899f8d6b9a9db93a46a5ed698c06cd9cda Mon Sep 17 00:00:00 2001 From: Jorge Jimenez Sanchez Date: Sun, 3 Jan 2021 21:19:31 +0100 Subject: [PATCH 3/6] =?UTF-8?q?[ADD]=20A=C3=B1adido=20test=20para=20el=20m?= =?UTF-8?q?=C3=A9todo=20Order=20de=20MyBagManager=20implementado=20por=20a?= =?UTF-8?q?ntdelbej=20(Antonio=20Delgado=20Bejarano)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/shopManager/BagManagerTestOrder.java | 143 ++++++++++++++++++ 1 file changed, 143 insertions(+) create mode 100644 src/test/java/shopManager/BagManagerTestOrder.java diff --git a/src/test/java/shopManager/BagManagerTestOrder.java b/src/test/java/shopManager/BagManagerTestOrder.java new file mode 100644 index 0000000..9835f9d --- /dev/null +++ b/src/test/java/shopManager/BagManagerTestOrder.java @@ -0,0 +1,143 @@ +package shopManager; + +import shopmanager.*; + +import static org.junit.jupiter.api.Assertions.*; + + +import java.util.logging.Logger; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; +import org.mockito.junit.jupiter.MockitoExtension; + +import exceptions.NoEnoughStock; +import exceptions.NotInStock; +import exceptions.UnknownRepo; +import model.Product; +import model.Order; +import persistency.OrderRepository; + + +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; + +@ExtendWith(MockitoExtension.class) +class BagManagerTestOrder { + + // Mensanjes + private static Logger trazador=Logger.getLogger(ProductTest.class.getName()); + + //Creo los objetos sustitutos (representantes o mocks) + //Son objetos contenidos en MyBagManager de los que a�n no disponemos el c�digo + @Mock(serializable = true) + private static Product producto1Mock= Mockito.mock(Product.class); + @Mock(serializable = true) + private static Product producto2Mock= Mockito.mock(Product.class); + @Mock + private static StockManager stockMock= Mockito.mock(StockManager.class); + @Mock + private static OrderRepository repositoryMock= Mockito.mock(OrderRepository.class); + @Mock + private static Order orderMock=Mockito.mock(Order.class); + + //Inyecci�n de dependencias + //Los objetos contenidos en micestaTesteada son reemplazados autom�ticamente por los sustitutos (mocks) + @InjectMocks + private static MyBagManager micestaTesteada; + + /** + * @see BeforeEach {@link org.junit.jupiter.api.BeforeEach} + */ + + @BeforeEach + void setUpBeforeClass(){ + //Todos los tests empiezan con la bolsa vac�a + + micestaTesteada.reset(); + + } + + @Test + @Tag("unidad") + @DisplayName("Prueba del metodo que asienta el pedido") + void testOrder() throws NoEnoughStock, NotInStock, UnknownRepo { + + // Comienzo del Test + trazador.info("Comienza el test de order"); + + //Hago un pedido que no debe tener problemas + trazador.info("Primero sin problemas"); + + //El procedimiento rellenaCesta mete dos productos (mocks) en la cesta + rellenaCesta(); + + // Comportamiento Mocks + Mockito.when(micestaTesteada.order().getId()).thenReturn("UUID1"); + + //Si no hay problema se guarda + micestaTesteada.order(); + + // Obtiene el id univoco del primer pedido + String idPedido1 = micestaTesteada.order().getId(); + + // VERIFICA QUE SE BORRA LA CESTA AL EFECTUAR EL PEDIDO CON ORDER: + + //Tras ejecutar order() la cesta no debe contener ninguno de los productos "id1" e "id2" que + //se añadieron en rellenaCesta() para efectuar el pedido + assertTrue(micestaTesteada.findProduct("id1").isEmpty()); + assertTrue(micestaTesteada.findProduct("id2").isEmpty()); + + + // NUEVO PEDIDO PARA PROBAR QUE SE GESTIONA UN ID UN�VOCO PARA CADA PEDIDO, LLENAMOS LA CESTA + + // Vaciamos la cesta antes del nuevo pedido + micestaTesteada.reset(); + + //Hago otro pedido que no debe tener problemas + trazador.info("Primero sin problemas"); + + //El procedimiento rellenaCesta mete dos productos (mocks) en la cesta + rellenaCesta(); + + // Comportamiento Mocks + Mockito.when(micestaTesteada.order().getId()).thenReturn("UUID2"); + + //Si no hay problema se guarda + micestaTesteada.order(); + + // Obtiene el id unívoco del primer pedido + String idPedido2 = micestaTesteada.order().getId(); + + // VERIFICA QUE SE BORRA LA CESTA AL EFECTUAR EL PEDIDO CON ORDER: + + //Tras ejecutar order() la cesta no debe contener ninguno de los productos "id1" e "id2" que + //se añadieron en rellenaCesta() para efectuar el pedido + assertTrue(micestaTesteada.findProduct("id1").isEmpty()); + assertTrue(micestaTesteada.findProduct("id2").isEmpty()); + + + // COMPARAMOS QUE LOS ID DE LOS DIFERENTES PEDIDOS NO SON IGUALES + assertNotEquals(idPedido1, idPedido2, "No asigna id univoco a cada pedido"); + + } + + /** + * Rellena una cesta con los dos mocks declarados al inicio + * @throws NoEnoughStock Si no hay suficiente stock del producto a a�adir + * @throws NotInStock Si no existe el producto en el stock + */ + void rellenaCesta() throws NoEnoughStock, NotInStock { + Mockito.when(producto1Mock.getId()).thenReturn("id1"); + Mockito.when(producto1Mock.getNumber()).thenReturn(1); + Mockito.when(producto2Mock.getId()).thenReturn("id2"); + Mockito.when(producto2Mock.getNumber()).thenReturn(2); + micestaTesteada.addProduct(producto1Mock); + micestaTesteada.addProduct(producto2Mock); + } + +} From e78e2ea4fa814fb3c3e57e619ff511e471c0591b Mon Sep 17 00:00:00 2001 From: Jorge Jimenez Sanchez Date: Wed, 20 Jan 2021 18:18:55 +0100 Subject: [PATCH 4/6] [FIX] Eliminado imports no utilizados en la clase MyOrder.java --- src/main/java/model/MyOrder.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/model/MyOrder.java b/src/main/java/model/MyOrder.java index 475d5b5..da5c4b2 100644 --- a/src/main/java/model/MyOrder.java +++ b/src/main/java/model/MyOrder.java @@ -4,12 +4,11 @@ package model; import java.util.Collection; -import java.util.HashMap; import java.util.Iterator; import java.util.logging.Logger; /** - * @author Isabel Román + * @author Isabel Román, Jorge Jiménez-Sánchez */ public class MyOrder implements Order { From 5c29a67d133a562d0faae35979a7428e45aafc89 Mon Sep 17 00:00:00 2001 From: Jorge Jimenez Sanchez Date: Wed, 20 Jan 2021 18:19:46 +0100 Subject: [PATCH 5/6] =?UTF-8?q?[FIX]=20Corregido=20error=20al=20crear=20el?= =?UTF-8?q?=20objeto=20de=20la=20clase=20MyOrder=20para=20la=20asignaci?= =?UTF-8?q?=C3=B3n=20de=20ID=20un=C3=ADvoco=20en=20el=20m=C3=A9todo=20orde?= =?UTF-8?q?r()=20de=20MyBagManager.java?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/shopmanager/MyBagManager.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/shopmanager/MyBagManager.java b/src/main/java/shopmanager/MyBagManager.java index b8b7f0f..b73a8fd 100644 --- a/src/main/java/shopmanager/MyBagManager.java +++ b/src/main/java/shopmanager/MyBagManager.java @@ -15,11 +15,12 @@ import exceptions.NoEnoughStock; import exceptions.NotInStock; import exceptions.UnknownRepo; +import model.MyOrder; import model.Order; import model.Product; import persistency.OrderRepository; /** - * @author Isabel Román + * @author Isabel Román, Jorge Jiménez-Sánchez * */ public class MyBagManager implements BagManager { @@ -36,11 +37,10 @@ public MyBagManager(){ cesta=new HashMap(); } - public MyBagManager(OrderRepository repo,StockManager stockManager,Order orderManager){ + public MyBagManager(OrderRepository repo,StockManager stockManager){ cesta=new HashMap(); repositorio=repo; stock=stockManager; - order=orderManager; } @@ -102,9 +102,13 @@ public Optional findProduct(Product product) { @Override public Order order() { - // No crea el objeto order, aún no está resuelto quién será el responsable de elegir el tipo concreto + try{ + // Creamos el objeto + trazador.info("Creo Objeto de la clase MyOrder"); + order=new MyOrder(); + // Persisto el stock trazador.info("Intento persistir el stock"); stock.save(); @@ -113,11 +117,12 @@ public Order order() { trazador.info("Actualizo el pedido"); order.setProducts(cesta.values()); - // Crep ID Univoco + // Creo ID Univoco trazador.info("Creo ID Univoco"); - // Creo UUID unico UUID id = UUID.randomUUID(); - // Asigno el UUID al objeto order + + // Asigno el UUID al objeto creado + trazador.info("Asigno ID Univoco"); order.setId(String.valueOf(id)); // Persisto el pedido From df0991cbc494d303e9d080c020f349bbd4819bee Mon Sep 17 00:00:00 2001 From: Jorge Jimenez Sanchez Date: Wed, 20 Jan 2021 18:21:12 +0100 Subject: [PATCH 6/6] =?UTF-8?q?[FIX]=20Corregido=20test=20BagManagerTestOr?= =?UTF-8?q?der=20para=20ejecuci=C3=B3n=20de=20la=20prueba=20unitaria=20del?= =?UTF-8?q?=20m=C3=A9todo=20order()=20de=20MyBagManager?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/shopManager/BagManagerTestOrder.java | 59 +++++++++---------- 1 file changed, 27 insertions(+), 32 deletions(-) diff --git a/src/test/java/shopManager/BagManagerTestOrder.java b/src/test/java/shopManager/BagManagerTestOrder.java index 9835f9d..226a0f1 100644 --- a/src/test/java/shopManager/BagManagerTestOrder.java +++ b/src/test/java/shopManager/BagManagerTestOrder.java @@ -33,7 +33,7 @@ class BagManagerTestOrder { private static Logger trazador=Logger.getLogger(ProductTest.class.getName()); //Creo los objetos sustitutos (representantes o mocks) - //Son objetos contenidos en MyBagManager de los que a�n no disponemos el c�digo + //Son objetos contenidos en MyBagManager de los que aún no disponemos el código @Mock(serializable = true) private static Product producto1Mock= Mockito.mock(Product.class); @Mock(serializable = true) @@ -45,8 +45,8 @@ class BagManagerTestOrder { @Mock private static Order orderMock=Mockito.mock(Order.class); - //Inyecci�n de dependencias - //Los objetos contenidos en micestaTesteada son reemplazados autom�ticamente por los sustitutos (mocks) + //Inyección de dependencias + //Los objetos contenidos en micestaTesteada son reemplazados automáticamente por los sustitutos (mocks) @InjectMocks private static MyBagManager micestaTesteada; @@ -70,56 +70,51 @@ void testOrder() throws NoEnoughStock, NotInStock, UnknownRepo { // Comienzo del Test trazador.info("Comienza el test de order"); - //Hago un pedido que no debe tener problemas - trazador.info("Primero sin problemas"); - - //El procedimiento rellenaCesta mete dos productos (mocks) en la cesta + // El procedimiento rellenaCesta mete dos productos (mocks) en la cesta rellenaCesta(); - // Comportamiento Mocks - Mockito.when(micestaTesteada.order().getId()).thenReturn("UUID1"); - - //Si no hay problema se guarda + // Invoco al método order (esto creará un objeto de tipo order, por tanto no es puramente un test unitario) micestaTesteada.order(); - // Obtiene el id univoco del primer pedido + // Obtiene el id unívoco del primer pedido String idPedido1 = micestaTesteada.order().getId(); + // VERIFICAMOS QUE EL ID DEVUELTO DEL PRIMER PEDIDO NO ES NULL + + // Comprobamos que el string devuelto no es null + assertNotNull(idPedido1,"El ID devuelto es Null"); + // VERIFICA QUE SE BORRA LA CESTA AL EFECTUAR EL PEDIDO CON ORDER: - //Tras ejecutar order() la cesta no debe contener ninguno de los productos "id1" e "id2" que - //se añadieron en rellenaCesta() para efectuar el pedido - assertTrue(micestaTesteada.findProduct("id1").isEmpty()); - assertTrue(micestaTesteada.findProduct("id2").isEmpty()); + // Tras ejecutar order() la cesta no debe contener ninguno de los productos "id1" e "id2" que + // se añadieron en rellenaCesta() para efectuar el pedido + assertTrue(micestaTesteada.findProduct("id1").isEmpty(),"La cesta contiene un producto con id1 que se ha eliminado"); + assertTrue(micestaTesteada.findProduct("id2").isEmpty(),"La cesta contiene un producto con id2 que se ha eliminado"); - - // NUEVO PEDIDO PARA PROBAR QUE SE GESTIONA UN ID UN�VOCO PARA CADA PEDIDO, LLENAMOS LA CESTA + // NUEVO PEDIDO PARA PROBAR QUE SE GESTIONA UN ID UNIVOCO PARA CADA PEDIDO, LLENAMOS LA CESTA // Vaciamos la cesta antes del nuevo pedido micestaTesteada.reset(); - //Hago otro pedido que no debe tener problemas - trazador.info("Primero sin problemas"); - - //El procedimiento rellenaCesta mete dos productos (mocks) en la cesta + // El procedimiento rellenaCesta mete dos productos (mocks) en la cesta rellenaCesta(); - // Comportamiento Mocks - Mockito.when(micestaTesteada.order().getId()).thenReturn("UUID2"); - - //Si no hay problema se guarda + // Invoco al método order (esto creará un objeto de tipo order, por tanto no es puramente un test unitario) micestaTesteada.order(); - // Obtiene el id unívoco del primer pedido + // Obtiene el id univoco del segundo pedido String idPedido2 = micestaTesteada.order().getId(); + // VERIFICAMOS QUE EL ID DEVUELTO DEL PRIMER PEDIDO NO ES NULL + // Comprobamos que el string devuelto no es null + assertNotNull(idPedido2,"El ID devuelto es Null"); + // VERIFICA QUE SE BORRA LA CESTA AL EFECTUAR EL PEDIDO CON ORDER: - //Tras ejecutar order() la cesta no debe contener ninguno de los productos "id1" e "id2" que - //se añadieron en rellenaCesta() para efectuar el pedido - assertTrue(micestaTesteada.findProduct("id1").isEmpty()); - assertTrue(micestaTesteada.findProduct("id2").isEmpty()); - + // Tras ejecutar order() la cesta no debe contener ninguno de los productos "id1" e "id2" que + // se añadieron en rellenaCesta() para efectuar el pedido + assertTrue(micestaTesteada.findProduct("id1").isEmpty(),"La cesta contiene un producto con id1 que se ha eliminado"); + assertTrue(micestaTesteada.findProduct("id2").isEmpty(),"La cesta contiene un producto con id2 que se ha eliminado"); // COMPARAMOS QUE LOS ID DE LOS DIFERENTES PEDIDOS NO SON IGUALES assertNotEquals(idPedido1, idPedido2, "No asigna id univoco a cada pedido");