BAEL-2275: Add OrderItem

This commit is contained in:
Lukasz Rys
2019-11-17 20:55:03 +01:00
parent fbd2c58844
commit 3cde05a6ed
15 changed files with 127 additions and 73 deletions
@@ -3,10 +3,11 @@ package com.baeldung.ddd.layers.domain;
import org.bson.types.ObjectId;
import java.math.BigDecimal;
import java.util.UUID;
public class OrderProvider {
public static Order getCreatedOrder() {
return new Order(ObjectId.get(), new Product(BigDecimal.TEN, "productName"));
return new Order(ObjectId.get(), new Product(UUID.randomUUID(), BigDecimal.TEN, "productName"));
}
public static Order getCompletedOrder() {
@@ -1,13 +1,11 @@
package com.baeldung.ddd.layers.domain;
import com.baeldung.ddd.layers.domain.exception.DomainException;
import org.bson.types.ObjectId;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.UUID;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -25,22 +23,26 @@ class OrderUnitTest {
@Test
void shouldAddProduct_thenUpdatePrice() {
final Order order = OrderProvider.getCreatedOrder();
final int orderOriginalProductSize = order.getProducts().size();
final int orderOriginalProductSize = order
.getOrderItems()
.size();
final BigDecimal orderOriginalPrice = order.getPrice();
final Product productToAdd = new Product(new BigDecimal("20"), "secondProduct");
final Product productToAdd = new Product(UUID.randomUUID(), new BigDecimal("20"), "secondProduct");
order.addProduct(productToAdd);
order.addOrder(productToAdd);
assertEquals(orderOriginalProductSize + 1, order.getProducts().size());
assertEquals(orderOriginalProductSize + 1, order
.getOrderItems()
.size());
assertEquals(orderOriginalPrice.add(productToAdd.getPrice()), order.getPrice());
}
@Test
void shouldAddProduct_thenThrowException(){
void shouldAddProduct_thenThrowException() {
final Order order = OrderProvider.getCompletedOrder();
final Product productToAdd = new Product(new BigDecimal("20"), "secondProduct");
final Product productToAdd = new Product(UUID.randomUUID(), new BigDecimal("20"), "secondProduct");
final Executable executable = () -> order.addProduct(productToAdd);
final Executable executable = () -> order.addOrder(productToAdd);
Assertions.assertThrows(DomainException.class, executable);
}
@@ -49,9 +51,15 @@ class OrderUnitTest {
void shouldRemoveProduct_thenUpdatePrice() {
final Order order = OrderProvider.getCreatedOrder();
order.removeProduct(order.getProducts().get(0).getName());
order.removeOrder(order
.getOrderItems()
.get(0)
.getProduct()
.getId());
assertEquals(0, order.getProducts().size());
assertEquals(0, order
.getOrderItems()
.size());
assertEquals(BigDecimal.ZERO, order.getPrice());
}
}
@@ -11,6 +11,7 @@ import org.junit.jupiter.api.function.Executable;
import java.math.BigDecimal;
import java.util.Optional;
import java.util.UUID;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
@@ -30,7 +31,7 @@ class DomainOrderServiceUnitTest {
@Test
void shouldCreateOrder_thenSaveIt() {
final Product product = new Product(BigDecimal.TEN, "productName");
final Product product = new Product(UUID.randomUUID(), BigDecimal.TEN, "productName");
final ObjectId id = tested.createOrder(product);
@@ -41,18 +42,18 @@ class DomainOrderServiceUnitTest {
@Test
void shouldAddProduct_thenSaveOrder() {
final Order order = spy(OrderProvider.getCreatedOrder());
final Product product = new Product(BigDecimal.TEN, "test");
final Product product = new Product(UUID.randomUUID(), BigDecimal.TEN, "test");
when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order));
tested.addProduct(order.getId(), product);
verify(orderRepository).save(order);
verify(order).addProduct(product);
verify(order).addOrder(product);
}
@Test
void shouldAddProduct_thenThrowException() {
final Product product = new Product(BigDecimal.TEN, "test");
final Product product = new Product(UUID.randomUUID(), BigDecimal.TEN, "test");
final ObjectId id = ObjectId.get();
when(orderRepository.findById(id)).thenReturn(Optional.empty());
@@ -76,15 +77,16 @@ class DomainOrderServiceUnitTest {
@Test
void shouldDeleteProduct_thenSaveOrder() {
final Order order = spy(OrderProvider.getCreatedOrder());
final String productName = order
.getProducts()
final UUID productId = order
.getOrderItems()
.get(0)
.getName();
.getProduct()
.getId();
when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order));
tested.deleteProduct(order.getId(), productName);
tested.deleteProduct(order.getId(), productId);
verify(orderRepository).save(order);
verify(order).removeProduct(productName);
verify(order).removeOrder(productId);
}
}