BAEL-2275: Add OrderItem
This commit is contained in:
@@ -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
-9
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user