private static async Task GetStockSymbolStatisticsAsync(PriceType[] priceTypes, StockSymbolStatistics[] expected, DateTime mostRecentDate)
        {
            Mock <ICsvReader> csvReaderMock = new Mock <ICsvReader>();
            Mock <IStockSymbolsRepository> stockSymbolsRepositoryMock = new Mock <IStockSymbolsRepository>();

            StockSymbol[] stockSymbols = { new StockSymbol {
                                               Name = SymbolName, Date = mostRecentDate, Open = 40, Close = 60, High = 65, Low = 44
                                           } };

            DateTime?from = mostRecentDate.AddDays(-10);
            DateTime?to   = mostRecentDate.AddDays(1);

            stockSymbolsRepositoryMock.Setup(r => r.GetByUserAndSymbolAsync(User, SymbolName, from, to)).ReturnsAsync(stockSymbols);

            StockSymbolsService stockSymbolsService = new StockSymbolsService(csvReaderMock.Object, stockSymbolsRepositoryMock.Object);

            StockSymbolStatistics[] result = (await stockSymbolsService.GetStockSymbolStatisticsAsync(User, SymbolName, priceTypes, from, to)).ToArray();

            Assert.AreEqual(expected.Length, result.Length);
            Assert.AreEqual(expected[0].Name, result[0].Name);
            Assert.AreEqual(expected[0].Date, result[0].Date);
            Assert.AreEqual(expected[0].Avg, result[0].Avg);
            Assert.AreEqual(expected[0].Min, result[0].Min);
            Assert.AreEqual(expected[0].Max, result[0].Max);
            Assert.AreEqual(expected[0].Median, result[0].Median);
            Assert.AreEqual(expected[0].Percentile95, result[0].Percentile95);
            Assert.AreEqual(expected[0].Open, result[0].Open);
            Assert.AreEqual(expected[0].Close, result[0].Close);
            Assert.AreEqual(expected[0].High, result[0].High);
            Assert.AreEqual(expected[0].Low, result[0].Low);
        }
        public async Task UploadInvalidAsyncTest()
        {
            Mock <ICsvReader> csvReaderMock = new Mock <ICsvReader>();
            Mock <IStockSymbolsRepository> stockSymbolsRepositoryMock = new Mock <IStockSymbolsRepository>();
            DateTime mostRecentDate = DateTime.UtcNow;

            stockSymbolsRepositoryMock.Setup(r => r.GetByUserAndSymbolAsync(User, SymbolName, null, null))
            .ReturnsAsync(new List <StockSymbol>());

            StockSymbol[] stockSymbols = GetStockSymbols(mostRecentDate);

            List <ValidationResult> validationResults = new List <ValidationResult> {
                new ValidationResult(0, "Incorrect Name.")
            };

            csvReaderMock.Setup(r => r.ReadStockSymbols(User, SymbolName, It.IsAny <Stream>())).Returns(
                new ValidationResponse <IEnumerable <StockSymbol> >(
                    stockSymbols, validationResults));

            ValidationResponse expectedResponse = new ValidationResponse(validationResults);

            StockSymbolsService stockSymbolsService = new StockSymbolsService(csvReaderMock.Object, stockSymbolsRepositoryMock.Object);

            using (Stream stream = new MemoryStream())
            {
                ValidationResponse result = await stockSymbolsService.UploadAsync(User, SymbolName, stream);

                stockSymbolsRepositoryMock.Verify(r => r.AddRangeAsync(stockSymbols), Times.Never);
                Assert.AreEqual(expectedResponse.IsValid, result.IsValid);
                Assert.AreEqual(expectedResponse.ValidationResults.First().Message, result.ValidationResults.First().Message);
            }
        }
        public async Task GetStocksAsyncTest()
        {
            Mock <ICsvReader> csvReaderMock = new Mock <ICsvReader>();
            Mock <IStockSymbolsRepository> stockSymbolsRepositoryMock = new Mock <IStockSymbolsRepository>();
            DateTime mostRecentDate = DateTime.UtcNow;

            StockSymbol[] stockSymbols = GetStockSymbols(mostRecentDate);
            stockSymbolsRepositoryMock.Setup(r => r.GetByUserAsync(User)).ReturnsAsync(stockSymbols);

            StockSymbolsService stockSymbolsService = new StockSymbolsService(csvReaderMock.Object, stockSymbolsRepositoryMock.Object);

            StockSymbolInfo[] expected = { new StockSymbolInfo(SymbolName, mostRecentDate) };

            StockSymbolInfo[] result = (await stockSymbolsService.GetStocksAsync(User)).ToArray();

            Assert.AreEqual(expected.Length, result.Length);
            Assert.AreEqual(expected[0].Name, result[0].Name);
            Assert.AreEqual(expected[0].MostRecentDate, result[0].MostRecentDate);
        }