public void testFillBuyOrder() throws Exception {
DomainEventPublisher.instance().subscribe(new DomainEventSubscriber<BuyOrderFilled>() {
@Override
public void handleEvent(BuyOrderFilled aDomainEvent) {
buyOrderFilled = aDomainEvent;
}
@Override
public Class<BuyOrderFilled> subscribedToEventType() {
return BuyOrderFilled.class;
}
});
BuyOrder buyOrder = this.buyOrderFixture();
buyOrder.sharesToPurchase(NUMBER_OF_SHARES);
assertNotNull(buyOrderFilled);
assertTrue(buyOrder.isFilled());
assertFalse(buyOrder.isOpen());
Holding holding = null;
try {
holding = buyOrder.holdingOfFilledOrder();
assertEquals(buyOrder.accountId(), holding.accountId());
assertEquals(buyOrder.holdingOfFilledOrder().acquiredOn(), holding.acquiredOn());
assertEquals(buyOrder.orderId(), holding.orderId());
assertEquals(buyOrder.quantityOfSharesOrdered(), holding.numberOfShares());
assertEquals(buyOrder.quote().tickerSymbol(), holding.tickerSymbol());
assertEquals(buyOrder.quote().price().multipliedBy(buyOrder.quantityOfSharesOrdered()), holding.totalValue());
} catch (Exception e) {
fail("Holding should be available with filled order.");
}
}