private void RouteImpl(InstructionExecutionContext instructionExecutionContext) { // 1. Prepare the corresponding OrderBasket (via solver) var solver = new MarketSweepSolver(this.marketSnapshotProvider); var orderBasket = solver.Solve(instructionExecutionContext, this.routeOrders); // 2. Route the OrderBasket this.routeOrders.Route(orderBasket); }
public void Should_Solve_with_2_markets_when_asked_quantity_is_1() { var marketA = new ApiMarketGateway("NYSE (New York)", sellQuantity: 50, sellPrice: 100M); var rejectingMarket = new ApiMarketGateway("CME (Chicago)", sellQuantity: 50, sellPrice: 100M, orderPredicate: _ => false); var marketsInvolved = new[] { marketA, rejectingMarket }; var marketGatewayAdapter = new MarketsAdapter(marketsInvolved); var investorInstruction = new InvestorInstruction(new InvestorInstructionIdentifierDto().Value, Way.Buy, quantity: 1, price: 100M, goodTill: DateTime.Now.AddMinutes(5)); var instructionExecutionContext = new InstructionExecutionContext(investorInstruction, args => { }, failure => { }); var marketSweepSolver = new MarketSweepSolver(new MarketSnapshotProvider(marketGatewayAdapter.GetAvailableMarketNames(), marketGatewayAdapter)); var orderBasket = marketSweepSolver.Solve(instructionExecutionContext, marketGatewayAdapter); Check.That(orderBasket.OrdersDescriptions.Extracting("Quantity")).ContainsExactly(1); }