public async Task Order_Ask_Trades_Creation_Is_Based_On_Best_Price() { //arrange var bid = NewBid(units: 5, price: 109.01m); var bid2 = NewBid(units: 10, price: 109.00m); var ask = NewAsk(units: 10, price: 109.00m); //act _matcher.Tell(bid2); _matcher.Tell(bid); _matcher.Tell(ask); var message = new GetTrades() { StockId = StockId }; var result = await _matcher.Ask <GetTradesResult>(message); //assert Assert.NotEmpty(result.Orders); Assert.Equal(4, result.Orders.Count); Assert.Equal(ask.Order, result.Orders.First()); Assert.Equal(bid.Order, result.Orders[1]); Assert.Equal(ask.Order, result.Orders[2]); Assert.Equal(bid2.Order, result.Orders.Last()); }
public async Task Orders_History_Should_Be_Available_After_Matching() { //arrange var ask = NewAsk(units: 10, price: 99.99m); var bid = NewBid(units: 4, price: 99.99m); var bid2 = NewBid(units: 3, price: 99.99m); //act _matcher.Tell(ask); _matcher.Tell(bid); _matcher.Tell(bid2); var message = new GetTrades() { StockId = StockId }; var result = await _matcher.Ask <GetTradesResult>(message); //assert Assert.Equal(4, result.Orders.Count); Assert.Equal(10, ask.Order.Units); Assert.Equal(4, bid.Order.Units); Assert.Equal(3, bid2.Order.Units); Assert.Equal(10, result.Orders.First().Units); Assert.Equal(4, result.Orders[1].Units); Assert.Equal(10, result.Orders[2].Units); Assert.Equal(3, result.Orders.Last().Units); }
public async Task Set_Of_Settled_Orders_Does_NOT_Return_ExpectedData() { //arrange var bid = NewBid(units: 10, price: 110.00m); var ask = NewAsk(units: 10, price: 110.00m); //act _matcher.Tell(bid); _matcher.Tell(ask); var message = new GetTrades() { StockId = "WrongOne" }; var result = await _matcher.Ask <GetTradesResult>(message); //assert Assert.Null(result.Orders); Assert.Equal("StockId doesn't match", result.Reason); }
public async Task Set_Of_Settled_Orders_Returns_ExpectedData() { //arrange var bid = NewBid(units: 10, price: 110.00m); var ask = NewAsk(units: 10, price: 110.00m); //act _matcher.Tell(bid); _matcher.Tell(ask); var message = new GetTrades() { StockId = StockId }; var result = await _matcher.Ask <GetTradesResult>(message); //assert Assert.NotEmpty(result.Orders); Assert.Equal(ask.Order, result.Orders.First()); Assert.Equal(bid.Order, result.Orders.Last()); }
private void HandleGetTrades(GetTrades query) { if (query.StockId != _stockId) { Sender.Tell(new GetTradesResult { Reason = "StockId doesn't match" }); return; } Sender.Tell(new GetTradesResult() { Success = true, Orders = _tradeSettled.SelectMany(ts => new List <Order>() { _orderStore.Single(_ => _.OrderId == ts.AskOrderId).Order, _orderStore.Single(_ => _.OrderId == ts.BidOrderId).Order, }).ToList() }); }
public async Task Settle_Bid_Order_Should_NOT_Add_Trade() { //arrange var ask = NewAsk(units: 10, price: 99.99m); var ask2 = NewAsk(units: 10, price: 99.99m); var bid = NewBid(units: 10, price: 99.99m); //act _matcher.Tell(ask); _matcher.Tell(ask2); _matcher.Tell(bid); var message = new GetTrades() { StockId = StockId }; var result = await _matcher.Ask <GetTradesResult>(message); //assert Assert.Equal(2, result.Orders.Count); Assert.Equal(ask.Order, result.Orders.First()); Assert.Equal(bid.Order, result.Orders.Last()); }