public async Task Update_Should_Add_New_Stocks()
        {
            // Arrange
            var asxData =
                "ASX listed companies as at Sat Jun 13 20:40:46 AEST 2020\r\n\r\nCompany name,ASX code,GICS industry group\r\n\"MOQ LIMITED\",\"MOQ\",\"Software & Services\"\r\n\"1300 SMILES LIMITED\",\"ONT\",\"Health Care Equipment & Services\"\r\n\"1414 DEGREES LIMITED\",\"14D\",\"Capital Goods\"\r\n";

            _companyInformationStore
            .GetFromStore()
            .Returns(asxData);

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

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

            var stocks = stocksContext.Stock.ToList();

            Assert.AreEqual(3, stocks.Count);

            AssertCompanyData(stocks[0], "MOQ", "MOQ LIMITED", "Software & Services");
            AssertCompanyData(stocks[1], "ONT", "1300 SMILES LIMITED", "Health Care Equipment & Services");
            AssertCompanyData(stocks[2], "14D", "1414 DEGREES LIMITED", "Capital Goods");
        }
Esempio n. 2
0
        public async Task Update(StocksContext stocksContext)
        {
            var content = await _companyInformationStore.GetFromStore();

            var lines = content.Split(new[] { "\r\n", "\r", "\n" }, StringSplitOptions.None);

            if (lines.Length > 3)
            {
                for (var i = 3; i < lines.Length; i++)
                {
                    // https://stackoverflow.com/questions/18144431/regex-to-split-a-csv
                    var matches = Regex.Matches(lines[i], @"(?:^|,)(?=[^""]|("")?)""?((?(1)[^""]*|[^,""]*))""?(?=,|$)");

                    if (matches.Count != 3)
                    {
                        continue;
                    }

                    var stock = stocksContext.Stock.FirstOrDefault(s => s.Code == matches[1].Groups[2].Value);

                    if (stock == null)
                    {
                        stock = new Model.Stock();
                        stocksContext.Add(stock);
                    }

                    stock.CompanyName   = matches[0].Groups[2].Value;
                    stock.Code          = matches[1].Groups[2].Value;
                    stock.IndustryGroup = matches[2].Groups[2].Value;
                }
            }

            stocksContext.SaveChanges();
        }