public void GetLatestData()
        {
            // create fakes
            var logger = A.Fake<ILog>();
            var marketDataProvider = A.Fake<IMarketDataProvider>();
            var stockListProvider = A.Fake<IStockListProvider>();
            var marketDataRepositoryFactory = A.Fake<IMarketDataRepositoryFactory>();
            var marketDataRepository = A.Fake<IMarketDataRepository>();

            A.CallTo(() => marketDataRepositoryFactory.CreateRepository()).Returns(marketDataRepository);

            var stockQuoteSet = A.Fake<IDbSet<StockQuote>>();
            marketDataRepository.StockQuotes = stockQuoteSet;

            // create subscriptionData
            var stocks = new List<Stock>();
            var updateIntervalTime = TimeSpan.FromMilliseconds(int.MaxValue);
            var subscription = new Subscription
                {
                    UpdateInterval = new DateTime(1900, 1, 1, updateIntervalTime.Hours, updateIntervalTime.Minutes, updateIntervalTime.Seconds),
                    TimeOfDayStart = new DateTime(1900, 1, 1, 0, 0, 0),
                    TimeOfDayEnd = new DateTime(1900, 1, 1, 23, 59, 59, 999)
                };

            // create fake return value
            var stockQuotes = new List<StockQuote>
                {
                    new StockQuote { AskPrice = 1.0m, BidPrice = 1.2m, Change = 0.01m, OpenPrice = 0.9m, QuoteDateTime = DateTime.Now, Symbol = "TST1" },
                    new StockQuote { AskPrice = 2.0m, BidPrice = 2.2m, Change = 0.02m, OpenPrice = 1.0m, QuoteDateTime = DateTime.Now, Symbol = "TST2" },
                    new StockQuote { AskPrice = 3.0m, BidPrice = 3.2m, Change = 0.03m, OpenPrice = 1.1m, QuoteDateTime = DateTime.Now, Symbol = "TST3" }
                };

            // hold onto list of quotes added to repository
            var repositoryQuotes = new List<StockQuote>();

            // handle calls to fakes
            A.CallTo(() => stockListProvider.GetStocks(subscription)).Returns(stocks);
            A.CallTo(() => marketDataProvider.GetQuotes(stocks)).Returns(stockQuotes);
            A.CallTo(() => stockQuoteSet.Add(A<StockQuote>.Ignored))
             .Invokes((StockQuote quote) => repositoryQuotes.Add(quote));

            // create subscriptionData
            var marketDataSubscription =
                new MarketDataSubscription(logger, marketDataRepositoryFactory, marketDataProvider, stockListProvider, null, subscription);

            // call get latest data
            marketDataSubscription.InvokeMethod("GetLatestQuotes");

            // ensure call to get data was made
            A.CallTo(() => marketDataProvider.GetQuotes(stocks)).MustHaveHappened();
            
            // ensure call to store data was made
            A.CallTo(() => stockQuoteSet.Add(A<StockQuote>.Ignored)).MustHaveHappened(Repeated.Exactly.Times(3));

            // check that quotes were added to the repository
            repositoryQuotes.Should().HaveCount(3);
            repositoryQuotes.Should().OnlyContain(q => stockQuotes.Contains(q));
        }
示例#2
0
        private void RequestMarketDataSubscription(InstrumentSubscription subscription, MarketDataSubscription.Level level)
        {
            var marketDataSubscription = new MarketDataSubscription
            {
                contract_id = subscription.ContractId,
                level       = (uint)level
            };

            subscription.StartWaitForData(level);
            using (requestBatchLock.Lock())
            {
                requestBatch.Add(marketDataSubscription);
            }
        }
示例#3
0
        public void GetLatestData()
        {
            // create fakes
            var logger                      = A.Fake <ILog>();
            var marketDataProvider          = A.Fake <IMarketDataProvider>();
            var stockListProvider           = A.Fake <IStockListProvider>();
            var marketDataRepositoryFactory = A.Fake <IMarketDataRepositoryFactory>();
            var marketDataRepository        = A.Fake <IMarketDataRepository>();

            A.CallTo(() => marketDataRepositoryFactory.CreateRepository()).Returns(marketDataRepository);

            var stockQuoteSet = A.Fake <IDbSet <StockQuote> >();

            marketDataRepository.StockQuotes = stockQuoteSet;

            // create subscriptionData
            var stocks             = new List <Stock>();
            var updateIntervalTime = TimeSpan.FromMilliseconds(int.MaxValue);
            var subscription       = new Subscription
            {
                UpdateInterval = new DateTime(1900, 1, 1, updateIntervalTime.Hours, updateIntervalTime.Minutes, updateIntervalTime.Seconds),
                TimeOfDayStart = new DateTime(1900, 1, 1, 0, 0, 0),
                TimeOfDayEnd   = new DateTime(1900, 1, 1, 23, 59, 59, 999)
            };

            // create fake return value
            var stockQuotes = new List <StockQuote>
            {
                new StockQuote {
                    AskPrice = 1.0m, BidPrice = 1.2m, Change = 0.01m, OpenPrice = 0.9m, QuoteDateTime = DateTime.Now, Symbol = "TST1"
                },
                new StockQuote {
                    AskPrice = 2.0m, BidPrice = 2.2m, Change = 0.02m, OpenPrice = 1.0m, QuoteDateTime = DateTime.Now, Symbol = "TST2"
                },
                new StockQuote {
                    AskPrice = 3.0m, BidPrice = 3.2m, Change = 0.03m, OpenPrice = 1.1m, QuoteDateTime = DateTime.Now, Symbol = "TST3"
                }
            };

            // hold onto list of quotes added to repository
            var repositoryQuotes = new List <StockQuote>();

            // handle calls to fakes
            A.CallTo(() => stockListProvider.GetStocks(subscription)).Returns(stocks);
            A.CallTo(() => marketDataProvider.GetQuotes(stocks)).Returns(stockQuotes);
            A.CallTo(() => stockQuoteSet.Add(A <StockQuote> .Ignored))
            .Invokes((StockQuote quote) => repositoryQuotes.Add(quote));

            // create subscriptionData
            var marketDataSubscription =
                new MarketDataSubscription(logger, marketDataRepositoryFactory, marketDataProvider, stockListProvider, null, subscription);

            // call get latest data
            marketDataSubscription.InvokeMethod("GetLatestQuotes");

            // ensure call to get data was made
            A.CallTo(() => marketDataProvider.GetQuotes(stocks)).MustHaveHappened();

            // ensure call to store data was made
            A.CallTo(() => stockQuoteSet.Add(A <StockQuote> .Ignored)).MustHaveHappened(Repeated.Exactly.Times(3));

            // check that quotes were added to the repository
            repositoryQuotes.Should().HaveCount(3);
            repositoryQuotes.Should().OnlyContain(q => stockQuotes.Contains(q));
        }
示例#4
0
 /// <summary>
 ///     Отправить сообщение в сокет
 /// </summary>
 public void SendMessage(MarketDataSubscription msg) => SendMessageImpl(new ClientMsg {
     market_data_subscription = { msg }
 });