Пример #1
0
        public async Task Update_Should_Add_New_EndOfDay_Record()
        {
            // Arrange
            var arrangeStocks = new List <Stock>
            {
                new Stock
                {
                    Code = "111"
                }
            };

            using (var arrangeStocksContext = new StocksContext(ContextOptions))
            {
                arrangeStocksContext.Stock.AddRange(arrangeStocks);
                arrangeStocksContext.SaveChanges();
            }

            var endOfDays = new List <string>
            {
                "111,20200203,3.28,3.29,3.15,3.17,96249"
            };

            _endOfDayStore
            .GetFromStore()
            .Returns(endOfDays);

            // Act
            using (var actStocksContext = new StocksContext(ContextOptions))
            {
                await _endOfDayUpdate.Update(actStocksContext);
            }

            // Assert
            using var stocksContext = new StocksContext(ContextOptions);

            var endOfDayEntities = stocksContext.EndOfDay.ToList();

            var stocks = stocksContext.Stock.ToList();


            Assert.AreEqual(1, endOfDayEntities.Count);

            Assert.AreEqual(stocks[0], endOfDayEntities[0].Stock);
            AssertEndOfDay(endOfDayEntities[0], new DateTime(2020, 2, 3), 3.28m, 3.29m, 3.15m, 3.17m, 96249);
        }
Пример #2
0
        private async Task <IList <EndOfDay> > GetEndOfDays(StocksContext stocksContext)
        {
            var endOfDays = new List <EndOfDay>();

            var allStocks = stocksContext
                            .Stock
                            .ToList();

            var allStocksWorking = allStocks
                                   .ToHashSet(Stock.EqualityComparer);

            var endOfDayLines = await _endOfDayStore.GetFromStore();

            foreach (var endOfDayLine in endOfDayLines)
            {
                var endOfDaySplit = endOfDayLine.Split(",");

                var stockCode = endOfDaySplit[0];

                var stock = GetOrAddStock(allStocksWorking, stockCode);

                endOfDays.Add(
                    new EndOfDay
                {
                    Stock  = stock,
                    Date   = DateTime.ParseExact(endOfDaySplit[1], "yyyyMMdd", CultureInfo.InvariantCulture),
                    Open   = Decimal.Parse(endOfDaySplit[2]),
                    High   = Decimal.Parse(endOfDaySplit[3]),
                    Low    = Decimal.Parse(endOfDaySplit[4]),
                    Close  = Decimal.Parse(endOfDaySplit[5]),
                    Volume = Int64.Parse(endOfDaySplit[6])
                });
            }

            var newStocks = allStocksWorking
                            .Except(allStocks, Stock.EqualityComparer)
                            .ToList();

            stocksContext.Stock.AddRange(newStocks);

            return(endOfDays);
        }