public IResponse MarketBuy(User user, Stock stock, int quantity) { var fills = GetOrderFills(OrderType.Market, OrderDirection.Buy, stock, quantity); if (fills.Any()) { var account = _bankingProvider.GetAccount(user); var cost = fills.Sum(x => x.Price * x.Quantity); if (account.Balance < cost) { return new BuyOrderFailedResponse { Reason = BuyOrderFailedResponse.FailureReason.InsufficientFunds } } ; ExecuteBuy(user, fills); } var unfilled = quantity - fills.Sum(x => x.Quantity); if (unfilled > 0) { _ordersProvider.AddBuyOrder(user, stock, unfilled); } return(new BuyOrderResponse { Filled = fills, Unfilled = unfilled }); }
public void GetSellOrdersTest_CorrectDirection() { _provider.AddSellOrder(_user, _stock, 1); _provider.AddBuyOrder(_user, _stock, 1); var actual = _provider.GetSellOrders(_stock); Assert.IsTrue(actual.All(x => x.Direction == OrderDirection.Sell)); }