BAEL-2275: Init version

This commit is contained in:
Lukasz Rys
2019-11-17 15:19:28 +01:00
parent 0bf12a690c
commit 7010533b25
25 changed files with 626 additions and 0 deletions
@@ -0,0 +1,19 @@
package com.baeldung.ddd.layers.domain;
import org.bson.types.ObjectId;
import java.math.BigDecimal;
import java.util.Arrays;
public class OrderProvider {
public static Order getCreatedOrder() {
return new Order(ObjectId.get(), Arrays.asList(new Product(BigDecimal.TEN, "productName")));
}
public static Order getCompletedOrder() {
final Order order = getCreatedOrder();
order.complete();
return order;
}
}
@@ -0,0 +1,57 @@
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 static org.junit.jupiter.api.Assertions.assertEquals;
class OrderUnitTest {
@Test
void shouldCompleteOrder_thenChangeStatus() {
final Order order = OrderProvider.getCreatedOrder();
order.complete();
assertEquals(OrderStatus.COMPLETED, order.getStatus());
}
@Test
void shouldAddProduct_thenUpdatePrice() {
final Order order = OrderProvider.getCreatedOrder();
final int orderOriginalProductSize = order.getProducts().size();
final BigDecimal orderOriginalPrice = order.getPrice();
final Product productToAdd = new Product(new BigDecimal("20"), "secondProduct");
order.addProduct(productToAdd);
assertEquals(orderOriginalProductSize + 1, order.getProducts().size());
assertEquals(orderOriginalPrice.add(productToAdd.getPrice()), order.getPrice());
}
@Test
void shouldAddProduct_thenThrowException(){
final Order order = OrderProvider.getCompletedOrder();
final Product productToAdd = new Product(new BigDecimal("20"), "secondProduct");
final Executable executable = () -> order.addProduct(productToAdd);
Assertions.assertThrows(DomainException.class, executable);
}
@Test
void shouldRemoveProduct_thenUpdatePrice() {
final Order order = OrderProvider.getCreatedOrder();
order.removeProduct(order.getProducts().get(0).getName());
assertEquals(0, order.getProducts().size());
assertEquals(BigDecimal.ZERO, order.getPrice());
}
}
@@ -0,0 +1,91 @@
package com.baeldung.ddd.layers.domain.service;
import com.baeldung.ddd.layers.domain.Order;
import com.baeldung.ddd.layers.domain.OrderProvider;
import com.baeldung.ddd.layers.domain.Product;
import com.baeldung.ddd.layers.domain.repository.OrderRepository;
import org.bson.types.ObjectId;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Optional;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.*;
class DomainOrderServiceUnitTest {
private OrderRepository orderRepository;
private DomainOrderService tested;
@BeforeEach
void setUp() {
orderRepository = mock(OrderRepository.class);
tested = new DomainOrderService(orderRepository);
}
@Test
void shouldCreateOrder_thenSaveIt() {
final Product product = new Product(BigDecimal.TEN, "productName");
final ObjectId id = tested.createOrder(Arrays.asList(product));
verify(orderRepository).save(any(Order.class));
assertNotNull(id);
}
@Test
void shouldAddProduct_thenSaveOrder() {
final Order order = spy(OrderProvider.getCreatedOrder());
final Product product = new Product(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);
}
@Test
void shouldAddProduct_thenThrowException() {
final Product product = new Product(BigDecimal.TEN, "test");
final ObjectId id = ObjectId.get();
when(orderRepository.findById(id)).thenReturn(Optional.empty());
final Executable executable = () -> tested.addProduct(id, product);
verify(orderRepository, times(0)).save(any(Order.class));
assertThrows(RuntimeException.class, executable);
}
@Test
void shouldCompleteOrder_thenSaveIt() {
final Order order = spy(OrderProvider.getCreatedOrder());
when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order));
tested.completeOrder(order.getId());
verify(orderRepository).save(any(Order.class));
verify(order).complete();
}
@Test
void shouldDeleteProduct_thenSaveOrder() {
final Order order = spy(OrderProvider.getCreatedOrder());
final String productName = order
.getProducts()
.get(0)
.getName();
when(orderRepository.findById(order.getId())).thenReturn(Optional.of(order));
tested.deleteProduct(order.getId(), productName);
verify(orderRepository).save(order);
verify(order).removeProduct(productName);
}
}
@@ -0,0 +1,25 @@
package com.baeldung.ddd.layers.infrastracture.repository;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
class MongoDbOrderRepositoryUnitTest {
private SpringDataOrderRepository springDataOrderRepository;
private MongoDbOrderRepository tested;
@BeforeEach
void setUp(){
}
@Test
void findById() {
}
@Test
void save() {
}
}