public void ProcessPriceUpdates(string productCode)
        {
            // get the necessary dependencies
            IWebPageEngine       pageEngine      = EngineLocator.CreateEngine <IWebPageEngine>();
            IProductParserEngine priceEngine     = EngineLocator.CreateEngine <IProductParserEngine>();
            IProductAccessor     productAccessor = AccessorLocator.CreateAccessor <IProductAccessor>();
            IEmailAccessor       emailAccessor   = AccessorLocator.CreateAccessor <IEmailAccessor>();

            // build the url
            string url = pageEngine.BuildUrl(productCode);
            // get the page contents
            string contents = pageEngine.GetWebPageContents(url);
            // get the stored product information
            var product = productAccessor.FindByCode(productCode);
            // get the current price
            decimal currentPrice = priceEngine.GetProductPrice(contents, productCode);

            // if the current price is different from the price threshold then send an email
            if (currentPrice > 0)
            {
                if (product.PriceThreshold != currentPrice)
                {
                    emailAccessor.SendPriceNotice(product, currentPrice);
                }
            }
        }
        public OrderRepository(ICustomerAccessor customers, IProductAccessor products)
            : this()
        {
            _customers = customers ?? throw new ArgumentException(nameof(customers));

            _products = products ?? throw new ArgumentException(nameof(products));
        }
 /// <summary>
 /// Constructor used for dependency injection
 /// </summary>
 public PriceManager(IWebPageEngine pageEngine,
                     IProductParserEngine priceEngine,
                     IProductAccessor productAccessor,
                     IEmailAccessor emailAccessor)
 {
     Console.WriteLine("PriceManager constructor called");
     _emailAccessor   = emailAccessor;
     _pageEngine      = pageEngine;
     _priceEngine     = priceEngine;
     _productAccessor = productAccessor;
 }
        public void ProductAccessor_SaveNew()
        {
            Product product = new Product()
            {
                ProductName = "Test",
                Price       = "$10.00",
                Brand       = "HobbyTown",
                Site        = "HobbyTown",
                ProductUrl  = @"http://www.url.com",
                ListPrice   = "$10.00",
                ProductCode = "MAN12345"
            };
            IAccessorFactory factory = new AccessorFactory();
            IProductAccessor acc     = factory.CreateAccessor <IProductAccessor>();

            product = acc.Save(_connString, product);

            Assert.AreNotEqual(0, product.Id);
            Assert.AreEqual("Test", product.ProductName);
            Assert.AreEqual("$10.00", product.Price);
            Assert.AreEqual("HobbyTown", product.Brand);
            Assert.AreEqual("MAN12345", product.ProductCode);
        }
 public ProductController(IProductAccessor products)
 {
     _products = products ?? throw new ArgumentException(nameof(products));
 }
 public ProductManager(IProductAccessor productAccessor)
 {
     _productAccessor = productAccessor;
 }
 public ProductManager()
 {
     _productAccessor = new ProductAccessor();
 }
Exemple #8
0
 public void TestSetup()
 {
     _productAccessor     = new FakeProductAccessor();
     _fakeProductAccessor = new FakeProductAccessor();
     _productManager      = new ProductManager(_fakeProductAccessor);
 }
Exemple #9
0
 public void TestCleanup()
 {
     _productAccessor     = null;
     _fakeProductAccessor = null;
 }
Exemple #10
0
 public ProductRepository(IProductAccessor productAccessor)
 {
     _productAccessor = productAccessor;
 }