ドメイン駆動開発道

ドメイン駆動開発を実践できず、悶々とする毎日を送るおやじSEのブログです。

ドメインモデルの実装(4) ~PlaceOrderServiceTest~

前回モック用に作ったインターフェースを利用して、PlaceOrderServiceのテストコードを書きます。

@RunWith(JMock.class)
public class PlaceOrderServiceTests  extends TestCase  {

	private PendingOrderRepository pendingOrderRepository;
	private PendingOrder pendingOrder;
	
	private String pendingOredrId;
	private Date goodDeliveryTime;
	private Address goodDeliveryAddress;
	private PlaceOrderService service;
	
	private Mockery context = new JUnit4Mockery();
	
	
	public void setUp() throws Exception {
		pendingOrderRepository = context.mock(PendingOrderRepository.class);
		service = new PlaceOrderServiceImpl(pendingOrderRepository);
		
		pendingOrder = context.mock(PendingOrder.class);
		
		goodDeliveryAddress = new Address();
		goodDeliveryTime = new Date();
		
		pendingOredrId = "pendingOrderId";
		
	}
	
	@Test
	public void testUpdateDeliveryInfo_Good() {
		
		context.checking(new Expectations() {{
		     allowing(pendingOrderRepository).findOrCreatePendingOrder(pendingOredrId);
		     will(returnValue(pendingOrder));
		}});
		
		
		context.checking(new Expectations() {{
		      allowing(pendingOrder).updateDeliveryInfo(goodDeliveryAddress,goodDeliveryTime);
		      will(returnValue(true));
		}});
		
		PlaceOrderServiceResult result = service.updateDeliveryInfo(pendingOredrId, goodDeliveryAddress, goodDeliveryTime);
		
		PendingOrder pendingOrder = result.getPendingOrder();
		
		assertTrue(result.isSuccess());
		
		PendingOrder returnPendingOrder = result.getPendingOrder();
		assertSame(pendingOrder, returnPendingOrder);
		
		assertEquals(goodDeliveryAddress, pendingOrder.getDeliveryAddress());
		assertEquals(goodDeliveryTime, pendingOrder.getDeliveryTime());
		
	}
	

}