コード例 #1
0
        public async Task StockRepository_GetStockVm_Success()
        {
            var dataFixture = new StockDataFixture();
            var repository  = StockRepositoryFactory.Create();

            repository.MockDbContext.Setup(s => s.StockQuotes).Returns(dataFixture.QuoteDataFixture.MockDataSet.Object);
            repository.MockDbContext.Setup(s => s.Stocks).Returns(dataFixture.MockDataSet.Object);

            var ticker = dataFixture.Entities.First().Id;
            var result = await repository.GetStockAsync(ticker);

            var quotes = dataFixture.QuoteDataFixture.Entities.Where(s => s.Ticker == ticker).ToList();

            Assert.AreEqual(result.Ticker, ticker);
            var lastRecord = quotes.Where(s => s.Ticker == ticker).OrderByDescending(s => s.Date).First();

            Assert.AreEqual(result.Open, lastRecord.Open);
            Assert.AreEqual(result.Close, lastRecord.Close);

            Assert.AreEqual(result.AllTimeHigh, quotes.Where(s => s.Ticker == ticker).Max(s => s.High));
            Assert.AreEqual(result.AllTimeLow, quotes.Where(s => s.Ticker == ticker).Min(s => s.Low));

            var fiftyTwoWeekAgo = DateTime.Today.AddYears(-1);

            Assert.AreEqual(result.AllTimeHigh, quotes.Where(s => s.Ticker == ticker && s.Date >= fiftyTwoWeekAgo).Max(s => s.High));
            Assert.AreEqual(result.AllTimeLow, quotes.Where(s => s.Ticker == ticker && s.Date >= fiftyTwoWeekAgo).Min(s => s.Low));
        }
コード例 #2
0
        public async Task StockRepository_GetStockVm_Failed_BadTicker()
        {
            var dataFixture = new StockDataFixture();
            var repository  = StockRepositoryFactory.Create();

            repository.MockDbContext.Setup(s => s.StockQuotes).Returns(dataFixture.QuoteDataFixture.MockDataSet.Object);
            repository.MockDbContext.Setup(s => s.Stocks).Returns(dataFixture.MockDataSet.Object);

            var ticker = dataFixture.Entities.First().Id;
            var result = await repository.GetStockAsync($"{ticker}123");

            Assert.IsNull(result);
        }
コード例 #3
0
        public async Task StockRepository_GetStockWithChartVm_ByTake_Failed_FailedLoader()
        {
            var dataFixture = new StockDataFixture();
            var processor   = new StockProcessorTestFixture();
            var repository  = StockRepositoryFactory.Create(processor);

            repository.MockDbContext.Setup(s => s.StockQuotes).Returns(dataFixture.QuoteDataFixture.MockDataSet.Object);
            repository.MockDbContext.Setup(s => s.Stocks).Returns(dataFixture.MockDataSet.Object);

            processor.LoadCompactAsyncResult = AnalyzerResult.Fail("Failed to load.");
            var result = await repository.GetChartAsync("ticker", 30);

            Assert.IsNull(result);
        }
コード例 #4
0
        public async Task Process_Success_MarketNotClosed_MaxDayMinus2()
        {
            var mockDbContext = new Mock <AnalyzerDbContext>();

            var stockDataFixture = new StockDataFixture();
            var stock            = stockDataFixture.Entities.First();
            var ticker           = stock.Id;

            stock.LastLoadDate = DateTime.Today.AddDays(-2);
            stock.MaxDate      = stock.LastLoadDate;

            var mockStockDataSet = stockDataFixture.MockDataSet;

            mockStockDataSet.Setup(s => s.Add(It.IsAny <Stock>())).Returns((Stock s) => s);
            mockDbContext.Setup(s => s.Stocks).Returns(mockStockDataSet.Object);

            stockDataFixture.QuoteDataFixture.Entities.Remove(stockDataFixture.QuoteDataFixture.Entities.First(s => s.Ticker == ticker && s.Date == DateTime.Today));
            stockDataFixture.QuoteDataFixture.Entities.Remove(stockDataFixture.QuoteDataFixture.Entities.First(s => s.Ticker == ticker && s.Date == DateTime.Today.AddDays(-1)));
            var mockStockQuoteDataSet = stockDataFixture.QuoteDataFixture.MockDataSet;

            mockDbContext.Setup(s => s.StockQuotes).Returns(mockStockQuoteDataSet.Object);


            var stockLoader = new StockLoaderTestFixture();
            var processor   = new StockProcessorTestFixture(mockDbContext, stockLoader)
            {
                IsMarketClosedValue = false
            };


            stockLoader.Quotes = stockDataFixture.QuoteDataFixture.Entities.Where(s => s.Ticker == ticker).ToList();
            stockLoader.Quotes.Add(new StockQuote()
            {
                Ticker = ticker,
                Date   = DateTime.Today.AddDays(-1)
            });
            stockLoader.Quotes.Add(new StockQuote()
            {
                Ticker = ticker,
                Date   = DateTime.Today
            });
            var result = await processor.LoadCompactAsync(ticker);

            mockStockQuoteDataSet.Verify(s => s.Add(It.IsAny <StockQuote>()), Times.Once);
            mockStockDataSet.Verify(s => s.Add(It.IsAny <Stock>()), Times.Never);
            mockDbContext.Verify(s => s.SaveChangesAsync(), Times.Once);
            Assert.IsTrue(result.Succeeded);
            Assert.AreEqual(stock.MaxDate, DateTime.Today.AddDays(-1));
        }
コード例 #5
0
        public async Task StockRepository_GetStockWithChartVm_ByTake_Success()
        {
            var dataFixture = new StockDataFixture();
            var repository  = StockRepositoryFactory.Create();

            repository.MockDbContext.Setup(s => s.StockQuotes).Returns(dataFixture.QuoteDataFixture.MockDataSet.Object);
            repository.MockDbContext.Setup(s => s.Stocks).Returns(dataFixture.MockDataSet.Object);

            var ticker = dataFixture.Entities.First().Id;
            var take   = 3;
            var result = await repository.GetChartAsync($"{ticker}", take);

            Assert.AreEqual(take, result.ChartQuotes.Count());
            foreach (var chartQuote in result.ChartQuotes)
            {
                var orgQuote = dataFixture.QuoteDataFixture.Entities.Where(s => s.Ticker == ticker).OrderByDescending(s => s.Date).Take(take).First(s => s.Date == DateTime.Parse(chartQuote.Date));
                Assert.AreEqual(chartQuote.Close, orgQuote.Close);
                Assert.AreEqual(chartQuote.High, orgQuote.High);
                Assert.AreEqual(chartQuote.Low, orgQuote.Low);
                Assert.AreEqual(chartQuote.Open, orgQuote.Open);
            }
        }
コード例 #6
0
        public async Task StockRepository_GetStockWithChartVm_ByDate_Success()
        {
            var dataFixture = new StockDataFixture();
            var repository  = StockRepositoryFactory.Create();

            repository.MockDbContext.Setup(s => s.StockQuotes).Returns(dataFixture.QuoteDataFixture.MockDataSet.Object);
            repository.MockDbContext.Setup(s => s.Stocks).Returns(dataFixture.MockDataSet.Object);

            var ticker    = dataFixture.Entities.First().Id;
            var startDate = new DateTime(2012, 1, 1);
            var endDate   = DateTime.Today;

            var result = await repository.GetChartAsync($"{ticker}", startDate.ToString("yyyyMMdd"), endDate.ToString("yyyyMMdd"));

            Assert.AreEqual(dataFixture.QuoteDataFixture.Entities.Count(s => s.Ticker == ticker && s.Date >= startDate && s.Date <= endDate), result.ChartQuotes.Count());
            foreach (var chartQuote in result.ChartQuotes)
            {
                var orgQuote = dataFixture.QuoteDataFixture.Entities.First(s => s.Ticker == ticker && s.Date == DateTime.Parse(chartQuote.Date));
                Assert.AreEqual(chartQuote.Close, orgQuote.Close);
                Assert.AreEqual(chartQuote.High, orgQuote.High);
                Assert.AreEqual(chartQuote.Low, orgQuote.Low);
                Assert.AreEqual(chartQuote.Open, orgQuote.Open);
            }
        }