Esempio n. 1
0
        public async Task StockPriceUpdaterHandlerTest()
        {
            using var contextFactory = new InMemoryDbContextFactorySQLite();
            using (var db = contextFactory.CreateDbContext())
            {
                db.Stocks.Add(new StockEntity()
                {
                    Symbol = "MSFT", Name = "Microsoft"
                });
                await db.SaveChangesAsync();
            }

            ILogger <StockPriceUpdaterHandler> logger = Mock.Of <ILogger <StockPriceUpdaterHandler> >();

            var mediatorMock = new Mock <IMediator>();

            mediatorMock.Setup(x => x.Send(It.IsAny <YahooPriceHistoryQuery>(), It.IsAny <CancellationToken>())).ReturnsAsync(GetMockResult());

            var command = new StockPriceUpdaterCommand()
            {
                Frequency = Frequency.Monthly
            };
            var handler = new StockPriceUpdaterHandler(mediatorMock.Object, logger, contextFactory);

            await((IRequestHandler <StockPriceUpdaterCommand>)handler).Handle(command, CancellationToken.None);

            using (var db = contextFactory.CreateDbContext())
            {
                var prices = await db.StockPrices.Select(p => p).ToListAsync();

                Assert.Equal(7, prices.Count);
            }
        }
Esempio n. 2
0
        public async Task StockSymbolUpdaterCommandHandlerTest()
        {
            using var contextFactory = new InMemoryDbContextFactorySQLite();
            var mockResult = GetMockResult();

            using (var db = contextFactory.CreateDbContext())
            {
                // Load the database with one stock.
                var stock = mockResult.NasdaqSymbols.First();
                db.Stocks.Add(new StockEntity()
                {
                    Symbol = stock.Symbol, Name = stock.SecurityName
                });
                await db.SaveChangesAsync();
            }

            var mediatorMock = new Mock <IMediator>();

            mediatorMock.Setup(x => x.Send(It.IsAny <NasdaqSymbolsQuery>(), It.IsAny <CancellationToken>())).ReturnsAsync(mockResult);

            var command = new StockSymbolUpdaterCommand();
            var handler = new StockSymbolUpdaterHandler(mediatorMock.Object, contextFactory);

            await((IRequestHandler <StockSymbolUpdaterCommand>)handler).Handle(command, CancellationToken.None);

            List <StockEntity> dbStocks;

            using (var db = contextFactory.CreateDbContext())
            {
                dbStocks = await db.Stocks.ToListAsync();
            }

            Assert.Equal(6, dbStocks.Count);
        }
Esempio n. 3
0
        public async Task StockChangeGridHandler()
        {
            using var contextFactory = new InMemoryDbContextFactorySQLite();
            LoadDbWithTestData(contextFactory);

            var query   = new StockChangeGrid.Query();
            var handler = new StockChangeGrid.Handler(contextFactory);
            var result  = await handler.Handle(query, CancellationToken.None);

            Assert.NotNull(result);
            Assert.NotNull(result.Headings);
            Assert.NotNull(result.Rows);
            Assert.Equal(5, result.Headings.Count());
            Assert.Equal(3, result.Rows.Count());
            Assert.Null(result.Rows.ElementAt(0).Percentages.First());
            Assert.NotNull(result.Rows.ElementAt(0).Percentages.ElementAt(1));
            Assert.NotNull(result.Rows.ElementAt(1).Percentages.First());
            Assert.NotNull(result.Rows.ElementAt(2).Percentages.First());
        }
Esempio n. 4
0
        /// <summary>
        /// Load database with test data.
        /// </summary>
        /// <param name="contextFactory">InMemoryDbContextFactorySqlite.</param>
        private static void LoadDbWithTestData(InMemoryDbContextFactorySQLite contextFactory)
        {
            using var db = contextFactory.CreateDbContext();

            var stocks = new StockEntity[3]
            {
                new StockEntity()
                {
                    Symbol = "ABC", Name = "ABC Stores"
                },
                new StockEntity()
                {
                    Symbol = "DEF", Name = "DEF Industries"
                },
                new StockEntity()
                {
                    Symbol = "GHI", Name = "GHI Stamps"
                },
            };

            db.Stocks.AddRange(stocks);
            db.SaveChanges();

            var rand = new Random();

            foreach (var stock in stocks)
            {
                List <StockPriceEntity> prices = new List <StockPriceEntity>();

                for (int i = 0; i < 5; i++)
                {
                    if (stock.Symbol == "ABC" && i == 0)
                    {
                        // skip ABC and 2020
                        continue;
                    }

                    int low    = rand.Next(2000, 9999);
                    int high   = rand.Next(low, low + 444);
                    int open   = rand.Next(low, high);
                    int close  = rand.Next(low, high);
                    int volume = rand.Next(1000000, 100000000);

                    prices.Add(new StockPriceEntity()
                    {
                        StockId   = stock.Id,
                        Frequency = Frequency.Yearly,
                        Period    = new DateTime(2020 + i, 1, 1),
                        Open      = (double)open / 100,
                        Low       = (double)low / 100,
                        High      = (double)high / 100,
                        Close     = (double)close / 100,
                        AdjClose  = (double)close / 100,
                        Volume    = volume,
                    });
                }

                db.StockPrices.AddRange(prices);
            }

            db.SaveChanges();
        }