public async Task CanRequest_Market_AllFields() { // arrange this._dbContext.DbMarkets.Add(new Market { Id = 1, MarketId = "M-1", MarketName = "Market 1" }); this._dbContext.DbMarkets.Add(new Market { Id = 2, MarketId = "M-2", MarketName = "Market 2" }); await this._dbContext.SaveChangesAsync(); var query = new MarketQuery(); query.Filter.Node.FieldId().FieldMarketId().FieldMarketName(); // act var markets = await this._apiClient.QueryAsync(query, CancellationToken.None); // assert var dbMarkets = this._dbContext.DbMarkets.ToList(); Assert.That(markets, Has.Count.EqualTo(dbMarkets.Count)); for (var i = 0; i < this._dbContext.DbMarkets.Count(); i++) { var expected = dbMarkets[i]; var actual = markets[i]; Assert.That(actual.Id, Is.EqualTo(expected.Id)); Assert.That(actual.MarketId, Is.EqualTo(expected.MarketId)); Assert.That(actual.MarketName, Is.EqualTo(expected.MarketName)); } }
public void TipIsReplaced() { var quantity = 1; var price = 10000; var side = Side.Bid; var market = new Market(Currency.BTC, Currency.USD); var firstLimitOrder = new LimitOrder(new OrderInfo(Guid.NewGuid(), side, quantity), price); var exchange = CreateExchangeAndSendFirstLimitOrder(firstLimitOrder); var secondLimitOrder = new LimitOrder(new OrderInfo(Guid.NewGuid(), side, quantity), price + 1); var orderReq = new LimitOrderRequest(secondLimitOrder, LimitOrderRequestType.Normal); exchange.SendLimitOrder(orderReq, market); var nonTipQuery = new MarketQuery(market, side, false); //e.g. {"Market":{"BuyCurrency":{"Case":"BTC"},"SellCurrency":{"Case":"USD"}},"Side":{"Case":"Buy"},"Tip":true}" string nontipQueryStr = JsonConvert.SerializeObject(nonTipQuery); using (var redis = ConnectionMultiplexer.Connect("localhost")) { var db = redis.GetDatabase(); var values = db.StringGet(nontipQueryStr); Assert.That(String.IsNullOrEmpty(values), Is.False, "should have nontip tail(not null) in this market"); var orders = JsonConvert.DeserializeObject <List <string> >(values); Assert.That(orders.Count, Is.EqualTo(1), "should have nontip tail of 2 elements in this market now"); Assert.That(orders[0], Is.EqualTo(firstLimitOrder.OrderInfo.Id.ToString()), "first order in tail should now be first order"); var theOrder = db.StringGet(orders[0]); Assert.That(theOrder.HasValue, Is.EqualTo(true), "should have the second order content"); Assert.That(theOrder.IsNull, Is.EqualTo(false), "should have the second order content(not null)"); var firstLimitOrderSerialized = JsonConvert.SerializeObject(firstLimitOrder); Assert.That(theOrder.ToString(), Is.EqualTo(firstLimitOrderSerialized), "received second order should have same content"); } }
private Exchange CreateExchangeAndSendFirstLimitOrder (LimitOrder limitOrder) { var exchange = new Exchange(Persistence.Redis); var market = new Market(Currency.BTC, Currency.USD); // TODO: assert orderbook is empty first var orderBook = exchange[market]; var tipQuery = new MarketQuery(market, limitOrder.OrderInfo.Side, true); //e.g. {"Market":{"BuyCurrency":{"Case":"BTC"},"SellCurrency":{"Case":"USD"}},"Side":{"Case":"Buy"},"Tip":true}" string tipQueryStr = JsonConvert.SerializeObject(tipQuery); using (var redis = ConnectionMultiplexer.Connect("localhost")) { var db = redis.GetDatabase(); var value = db.StringGet(tipQueryStr); Assert.That(value.HasValue, Is.EqualTo(false), "should be empty market"); Assert.That(value.IsNull, Is.EqualTo(true), "should be empty(null) market"); } var orderReq = new LimitOrderRequest(limitOrder, LimitOrderRequestType.Normal); exchange.SendLimitOrder(orderReq, market); // TODO: assert orderbook is non-empty now var afterOrderBook = exchange[market]; using (var redis = ConnectionMultiplexer.Connect("localhost")) { var db = redis.GetDatabase(); var value = db.StringGet(tipQueryStr); Assert.That(value.HasValue, Is.EqualTo(true), "should have a tip in this market"); Assert.That(value.IsNull, Is.EqualTo(false), "should have a tip(not null) in this market"); var orderId = value.ToString(); Assert.That(orderId, Is.EqualTo(limitOrder.OrderInfo.Id.ToString()), "received order should have same ID"); var order = db.StringGet(orderId); Assert.That(order.HasValue, Is.EqualTo(true), "should have the order content"); Assert.That(order.IsNull, Is.EqualTo(false), "should have the order content(not null)"); var limitOrderSerialized = JsonConvert.SerializeObject(limitOrder); Assert.That(order.ToString(), Is.EqualTo(limitOrderSerialized), "received order should have same content"); } return(exchange); }