package com.yummynoodlebar.core.services; import com.yummynoodlebar.core.domain.Order; import com.yummynoodlebar.core.repository.OrdersMemoryRepository; import com.yummynoodlebar.core.events.orders.*; import org.junit.Before; import org.junit.Test; import java.util.Date; import java.util.UUID; import static junit.framework.TestCase.*; import static junit.framework.TestCase.assertEquals; import static org.mockito.Mockito.*; public class OrderEventHandlerUnitTest { OrderEventHandler uut; OrdersMemoryRepository mockOrdersMemoryRepository; @Before public void setupUnitUnderTest() { mockOrdersMemoryRepository = mock(OrdersMemoryRepository.class); uut = new OrderEventHandler(mockOrdersMemoryRepository); } @Test public void addANewOrderToTheSystem() { when(mockOrdersMemoryRepository.save(any(Order.class))).thenReturn(new Order(new Date())); CreateOrderEvent ev = new CreateOrderEvent(new OrderDetails()); uut.createOrder(ev); verify(mockOrdersMemoryRepository).save(any(Order.class)); verifyNoMoreInteractions(mockOrdersMemoryRepository); } @Test public void addTwoNewOrdersToTheSystem() { when(mockOrdersMemoryRepository.save(any(Order.class))).thenReturn(new Order(new Date())); CreateOrderEvent ev = new CreateOrderEvent(new OrderDetails()); uut.createOrder(ev); uut.createOrder(ev); verify(mockOrdersMemoryRepository, times(2)).save(any(Order.class)); verifyNoMoreInteractions(mockOrdersMemoryRepository); } @Test public void removeAnOrderFromTheSystemFailsIfNotPresent() { UUID key = UUID.randomUUID(); when(mockOrdersMemoryRepository.findById(key)).thenReturn(null); } @Test public void removeAnOrderFromTheSystemFailsIfNotPermitted() { UUID key = UUID.randomUUID(); Order order = new Order(new Date()) { @Override public boolean canBeDeleted() { return false; } }; when(mockOrdersMemoryRepository.findById(key)).thenReturn(order); DeleteOrderEvent ev = new DeleteOrderEvent(key); OrderDeletedEvent orderDeletedEvent = uut.deleteOrder(ev); verify(mockOrdersMemoryRepository, never()).delete(ev.getKey()); assertTrue(orderDeletedEvent.isEntityFound()); assertFalse(orderDeletedEvent.isDeletionCompleted()); assertEquals(order.getDateTimeOfSubmission(), orderDeletedEvent.getDetails().getDateTimeOfSubmission()); } @Test public void removeAnOrderFromTheSystemWorksIfExists() { UUID key = UUID.randomUUID(); Order order = new Order(new Date()); when(mockOrdersMemoryRepository.findById(key)).thenReturn(order); DeleteOrderEvent ev = new DeleteOrderEvent(key); OrderDeletedEvent orderDeletedEvent = uut.deleteOrder(ev); verify(mockOrdersMemoryRepository).delete(ev.getKey()); assertTrue(orderDeletedEvent.isEntityFound()); assertTrue(orderDeletedEvent.isDeletionCompleted()); assertEquals(order.getDateTimeOfSubmission(), orderDeletedEvent.getDetails().getDateTimeOfSubmission()); } }