From 1a73b17241c0c983ffc3cd4e5be727bc247cb9d9 Mon Sep 17 00:00:00 2001 From: ant6n16-us <73589656+ant6n16-us@users.noreply.github.com> Date: Sun, 3 Jan 2021 21:27:16 +0100 Subject: [PATCH 1/6] Mejora Test Order MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fichero con las mejoras solicitadas en el test del método Order de MyBagManager. Comprueba que gestione el id unívoco y que borra la cesta tras los pedidos. --- .../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..01d92a3 --- /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 dae00f9343552b066c1c42dc0ac891a3c37f57f0 Mon Sep 17 00:00:00 2001 From: ant6n16-us <73589656+ant6n16-us@users.noreply.github.com> Date: Sun, 3 Jan 2021 21:29:08 +0100 Subject: [PATCH 2/6] Test Remove Product MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test usado para probar mi implementación del método removeProduct(String). Test desarrollado por jorjimsan. --- .../shopManager/TestRemoveProductString.java | 117 ++++++++++++++++++ 1 file changed, 117 insertions(+) create mode 100644 src/test/java/shopManager/TestRemoveProductString.java diff --git a/src/test/java/shopManager/TestRemoveProductString.java b/src/test/java/shopManager/TestRemoveProductString.java new file mode 100644 index 0000000..2bcf616 --- /dev/null +++ b/src/test/java/shopManager/TestRemoveProductString.java @@ -0,0 +1,117 @@ +package shopManager; + +import shopmanager.*; + +import static org.junit.jupiter.api.Assertions.*; + +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 model.Product; +import model.Order; +import persistency.OrderRepository; + + +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.ArgumentCaptor; +import org.mockito.Captor; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; + +/** + * @author Isabel Román, Jorge Jimenez + * Clase para realizar los test al método TestRemoveProductString de la clase MyBagManager + * + */ +@ExtendWith(MockitoExtension.class) +class TestRemoveProductString { + + //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; + + + //Servirán para conocer el argumento con el que se ha invocado algún método de alguno de los mocks (sustitutos o representantes) + //ArgumentCaptor es un genérico, indico al declararlo el tipo del argumento que quiero capturar + @Captor + private ArgumentCaptor intCaptor; + @Captor + private ArgumentCaptor productCaptor; + + + /** + * @see BeforeEach {@link org.junit.jupiter.api.BeforeEach} + */ + @BeforeEach + void setUpBeforeClass(){ + //Todos los tests empiezan con la bolsa vacía + + micestaTesteada.reset(); + } + + /** + * Test method for {@link shopmanager.MyBagManager#removeProduct(java.lang.String)}. + */ + @Test + @Tag("unidad") + @DisplayName("Prueba del método que elimina un producto") + void testRemoveProductString() throws NoEnoughStock, NotInStock { + + // Añado 1 producto del prodcuto id1 + Mockito.when(producto1Mock.getId()).thenReturn("id1"); + Mockito.when(producto1Mock.getNumber()).thenReturn(1); + // Añado 2 producto del prodcuto id2 + Mockito.when(producto2Mock.getId()).thenReturn("id2"); + Mockito.when(producto2Mock.getNumber()).thenReturn(2); + + // Meto en la cesta 1 producto 1 y 2 productos 2 + micestaTesteada.addProduct(producto1Mock); + micestaTesteada.addProduct(producto2Mock); + + // Elimino todo el producto id1 a partir de sus String + micestaTesteada.removeProduct(producto1Mock.getId()); + + // Compruebo que ya no esta en la cesta el producto id1 + assertTrue(micestaTesteada.findProduct("id1").isEmpty()); + + // Elimino todo el producto id2 a partir de sus String + micestaTesteada.removeProduct(producto2Mock.getId()); + + // Compruebo que ya no esta en la cesta el producto id1 + assertTrue(micestaTesteada.findProduct("id2").isEmpty()); + + // Caso de borrar un producto con una id que no está en la cesta + try { + + // Intento borrar el producto con id23 + micestaTesteada.removeProduct("id3"); + + //Salta xcepción así que no debe llegar aquí + fail("No salta la excepcion NotInStock stock"); + }catch(NotInStock e){ + assertEquals("El producto con id id3 no existe en el Stock",e.getMessage(),"El mensaje de la excepci�n no es correcto"); + } + + } + +} From 74d8966875b0b1fd8a36b81c0b9735c052e3084b Mon Sep 17 00:00:00 2001 From: ant6n16-us <73589656+ant6n16-us@users.noreply.github.com> Date: Sun, 3 Jan 2021 21:32:43 +0100 Subject: [PATCH 3/6] =?UTF-8?q?Implementaci=C3=B3n=20m=C3=A9todo=20removeP?= =?UTF-8?q?roduct(String)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fichero con la implementación pedida del método removeProduct(String) de MyBagManager. --- src/main/java/shopManager/MyBagManager.java | 150 ++++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 src/main/java/shopManager/MyBagManager.java diff --git a/src/main/java/shopManager/MyBagManager.java b/src/main/java/shopManager/MyBagManager.java new file mode 100644 index 0000000..a8f8902 --- /dev/null +++ b/src/main/java/shopManager/MyBagManager.java @@ -0,0 +1,150 @@ +/** + * + */ +package shopmanager; + +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.UUID; +import java.util.Collection; +import java.util.HashMap; + +import java.util.logging.Logger; + +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 + * + */ +public class MyBagManager implements BagManager { + private static Logger trazador=Logger.getLogger(MyStockManager.class.getName()); + private Map cesta; + private OrderRepository repositorio; + private StockManager stock; + private Order order; + + /** + * Al hacer privado el constructor obligo a que la construcci�n del objeto se haga siempre a trav�s de newBag + */ + public MyBagManager(){ + cesta=new HashMap(); + } + + public MyBagManager(OrderRepository repo,StockManager stockManager){ + cesta=new HashMap(); + repositorio=repo; + stock=stockManager; + } + + + + @Override + public Product addProduct(Product newProduct)throws NoEnoughStock, NotInStock{ + String msg="El id del producto es "+newProduct.getId()+" y las unidades a a�adir"+newProduct.getNumber(); + trazador.info(msg); + //quito del stock las unidades solicitadas, si no hubiera suficientes lanza NoEnoughStock, si el producto no existe lanza NotInStock + stock.lessProduct(newProduct); + if(cesta.containsKey(newProduct.getId())){ + int antes=cesta.get(newProduct.getId()).getNumber(); + newProduct.setNumber(newProduct.getNumber()+antes); + cesta.put(newProduct.getId(), newProduct); + } + else + cesta.put(newProduct.getId(), newProduct); + return newProduct; + } + + @Override + public Product lessProduct(Product oldProduct)throws NotInStock { + // TODO Auto-generated method stub + return null; + } + + @Override + public boolean removeProduct(Product oldProduct)throws NotInStock { + + // TODO Auto-generated method stub + return false; + + } + + @Override + public void removeProduct(String productId)throws NotInStock { + String msg="El id del producto a eliminar es "+productId; + trazador.info(msg); + + if(cesta.containsKey(productId)){ + + // Con el id obtiene el producto de la cesta + Product producto = cesta.get(productId); + + // Añade al stock las unidades del producto que vamos a eliminar de la cesta + stock.addProduct(producto); + + // Elimina de la cesta el producto con esa id concreta + cesta.remove(productId); + + } + + // Si no encuentra en la cesta ningún producto con esa id lanza una excepción NonInStock + else { + + throw new NotInStock(productId); + } + } + + @Override + public Collection getBag() { + + return (List) cesta.values(); + } + + @Override + public Optional findProduct(String productId) { + Product producto=null; + if(cesta.containsKey(productId)) + producto=cesta.get(productId); + + return Optional.ofNullable(producto); + } + + @Override + public Optional findProduct(Product product) { + return findProduct(product.getId()); + } + + @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{ + trazador.info("Intento persistir el stock"); + stock.save(); + trazador.info("Actualizo el pedido"); + order.setProducts(cesta.values()); + trazador.info("Persisto el pedido"); + repositorio.save(order); + + + } catch (UnknownRepo ex) { + trazador.info("No ha sido posible guardar el pedido, no se estableci� el repositorio en el stock"); + } + + return order; + } + + @Override + public void reset() { + // Deber�a restaurar el stock, pero por ahora no se hace, s�lo borra + cesta.clear(); + + } + +} From eea9edeefed9dac8b1fded14fa41741a0fbc2724 Mon Sep 17 00:00:00 2001 From: ant6n16-us <73589656+ant6n16-us@users.noreply.github.com> Date: Tue, 12 Jan 2021 14:17:47 +0100 Subject: [PATCH 4/6] RemoveProduct(String) de MyBagManager MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cambios solicitados en el método RemoveProduct(String) de MyBagManager. --- src/main/java/shopManager/MyBagManager.java | 25 +++++++++++++-------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/src/main/java/shopManager/MyBagManager.java b/src/main/java/shopManager/MyBagManager.java index a8f8902..9f2e327 100644 --- a/src/main/java/shopManager/MyBagManager.java +++ b/src/main/java/shopManager/MyBagManager.java @@ -14,6 +14,7 @@ import exceptions.NoEnoughStock; import exceptions.NotInStock; +import exceptions.NotInBag; import exceptions.UnknownRepo; import model.MyOrder; import model.Order; @@ -21,7 +22,7 @@ import persistency.OrderRepository; import shopmanager.StockManager; /** - * @author Isabel Rom�n + * @author Isabel Rom�n, Antonio Delgado Bejarano * */ public class MyBagManager implements BagManager { @@ -77,7 +78,7 @@ public boolean removeProduct(Product oldProduct)throws NotInStock { } @Override - public void removeProduct(String productId)throws NotInStock { + public void removeProduct(String productId) throws NotInStock, NotInBag { String msg="El id del producto a eliminar es "+productId; trazador.info(msg); @@ -86,18 +87,24 @@ public void removeProduct(String productId)throws NotInStock { // Con el id obtiene el producto de la cesta Product producto = cesta.get(productId); - // Añade al stock las unidades del producto que vamos a eliminar de la cesta - stock.addProduct(producto); + // Verifica que el producto existe en el stock para añadirlo al mismo, en caso contrario lanza una excepción NotInStock + if (stock.searchProduct(productId) != null) { - // Elimina de la cesta el producto con esa id concreta - cesta.remove(productId); - + // Añade al stock las unidades del producto que vamos a eliminar de la cesta + stock.addProduct(producto); + + // Elimina de la cesta el producto con esa id concreta + cesta.remove(productId); + + }else { + throw new NotInStock(productId); + } } - // Si no encuentra en la cesta ningún producto con esa id lanza una excepción NonInStock + // Si no encuentra en la cesta ningún producto con esa id lanza una excepción NotInBag else { - throw new NotInStock(productId); + throw new NotInBag(productId); } } From 1397d9e54d6ebfc2569f5be82293dfa683bce4f6 Mon Sep 17 00:00:00 2001 From: ant6n16-us <73589656+ant6n16-us@users.noreply.github.com> Date: Tue, 12 Jan 2021 14:20:56 +0100 Subject: [PATCH 5/6] Delete BagManagerTestOrder.java MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Borro este test porque ha de entregarlo mi compañero. --- .../java/shopManager/BagManagerTestOrder.java | 143 ------------------ 1 file changed, 143 deletions(-) delete mode 100644 src/test/java/shopManager/BagManagerTestOrder.java diff --git a/src/test/java/shopManager/BagManagerTestOrder.java b/src/test/java/shopManager/BagManagerTestOrder.java deleted file mode 100644 index 01d92a3..0000000 --- a/src/test/java/shopManager/BagManagerTestOrder.java +++ /dev/null @@ -1,143 +0,0 @@ -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 fc80478b8ebc687d07a9214cff9fdc8ce6e4a964 Mon Sep 17 00:00:00 2001 From: ant6n16-us <73589656+ant6n16-us@users.noreply.github.com> Date: Tue, 12 Jan 2021 14:21:57 +0100 Subject: [PATCH 6/6] Test para RemoveProduct(String) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Test desarrollado por mi compañero Jorjimsan al que se le han añadido las modificaciones pedidas. --- .../shopManager/TestRemoveProductString.java | 51 ++++++++++++++----- 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/src/test/java/shopManager/TestRemoveProductString.java b/src/test/java/shopManager/TestRemoveProductString.java index 2bcf616..e01b1dc 100644 --- a/src/test/java/shopManager/TestRemoveProductString.java +++ b/src/test/java/shopManager/TestRemoveProductString.java @@ -11,6 +11,7 @@ import org.mockito.junit.jupiter.MockitoExtension; import exceptions.NoEnoughStock; +import exceptions.NotInBag; import exceptions.NotInStock; import model.Product; import model.Order; @@ -25,7 +26,7 @@ import org.mockito.Mockito; /** - * @author Isabel Román, Jorge Jimenez + * @author Isabel Román, Jorge Jimenez, Antonio Delgado * Clase para realizar los test al método TestRemoveProductString de la clase MyBagManager * */ @@ -71,46 +72,72 @@ void setUpBeforeClass(){ /** * Test method for {@link shopmanager.MyBagManager#removeProduct(java.lang.String)}. + * @throws NotInBag */ @Test @Tag("unidad") @DisplayName("Prueba del método que elimina un producto") - void testRemoveProductString() throws NoEnoughStock, NotInStock { + void testRemoveProductString() throws NoEnoughStock, NotInStock, NotInBag { - // Añado 1 producto del prodcuto id1 + // Añado 1 producto del producto id1 Mockito.when(producto1Mock.getId()).thenReturn("id1"); Mockito.when(producto1Mock.getNumber()).thenReturn(1); - // Añado 2 producto del prodcuto id2 + // Añado 2 productos del producto id2 Mockito.when(producto2Mock.getId()).thenReturn("id2"); Mockito.when(producto2Mock.getNumber()).thenReturn(2); + // Intento configurar que el mock del stock devuelva un producto id1 cuando se busque en el stock + // pero no consigo hacerlo. De todos modos funciona correctamente + //Mockito.when(stockMock.searchProduct("id1")).thenReturn(producto1Mock); + // Meto en la cesta 1 producto 1 y 2 productos 2 micestaTesteada.addProduct(producto1Mock); micestaTesteada.addProduct(producto2Mock); - // Elimino todo el producto id1 a partir de sus String + // Elimino todo el producto id1 a partir de su id micestaTesteada.removeProduct(producto1Mock.getId()); // Compruebo que ya no esta en la cesta el producto id1 assertTrue(micestaTesteada.findProduct("id1").isEmpty()); - // Elimino todo el producto id2 a partir de sus String + // Elimino todo el producto id2 a partir de su id micestaTesteada.removeProduct(producto2Mock.getId()); - // Compruebo que ya no esta en la cesta el producto id1 + // Compruebo que ya no esta en la cesta el producto id2 assertTrue(micestaTesteada.findProduct("id2").isEmpty()); // Caso de borrar un producto con una id que no está en la cesta try { - // Intento borrar el producto con id23 + // Intento borrar el producto con id3 micestaTesteada.removeProduct("id3"); //Salta xcepción así que no debe llegar aquí - fail("No salta la excepcion NotInStock stock"); - }catch(NotInStock e){ - assertEquals("El producto con id id3 no existe en el Stock",e.getMessage(),"El mensaje de la excepci�n no es correcto"); - } + fail("No salta la excepcion NotInBag"); + }catch(NotInBag e){ + assertEquals("El producto con id id3 no existe en la cesta",e.getMessage(),"El mensaje de la excepción no es correcto"); + } + + // Programo el mock del Stock para que devuelva null al buscar un producto con id1 + Mockito.when(stockMock.searchProduct("id1")).thenReturn(null); + Mockito.when(producto1Mock.getId()).thenReturn("id1"); + + // Añado a la cesta un producto id1 + Mockito.when(producto1Mock.getNumber()).thenReturn(1); + micestaTesteada.addProduct(producto1Mock); + + // Intenta eliminar el producto pero debe gestionar la excepcion NotInStock + try { + + micestaTesteada.removeProduct(producto1Mock.getId()); + + //Salta xcepción así que no debe llegar aquí + fail("No salta la excepción NotInSotck"); + + }catch(NotInStock e) { + assertEquals("El producto con id id1 no existe en el Stock",e.getMessage(),"El mensaje de la excepción no es correcto"); + } + }