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));
            }
        }
Ejemplo n.º 2
0
        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");
            }
        }
Ejemplo n.º 3
0
        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);
        }