Beispiel #1
0
 private bool ProductEquals(WcProduct wcProduct, DbProduct dbProduct)
 {
     return
         (wcProduct.StockStatus == dbProduct.GetStockStatus() &&
          wcProduct.Availability == dbProduct.GetAvailability() &&
          ProductPriceEquals(wcProduct, dbProduct));
 }
Beispiel #2
0
        private async Task SetUnavailableStatus(WcProduct wcProduct)
        {
            if (wcProduct.StockStatus != Consts.UnavailableStatus || !string.IsNullOrWhiteSpace(wcProduct.Availability))
            {
                _logger.LogInformation($"Updating product {wcProduct.Name} - {wcProduct.Sku} to \"{Consts.UnavailableStatus}\"");
                await _wcProductService.UpdateProduct(wcProduct.Id, Consts.UnavailableStatus, string.Empty, null, null);

                await Task.Delay(Consts.RequestDelay);
            }
        }
Beispiel #3
0
        public void SetUp()
        {
            DefaultWcProduct = new WcProduct
            {
                Availability = "test",
                Sku          = "0",
                RegularPrice = 0,
                SalePrice    = 0,
                StockStatus  = "instock",
            };

            DefaultDbProduct = new DbProduct
            {
                Id           = 0,
                Availability = new List <Store>
                {
                    new Store
                    {
                        Name     = "test",
                        Quantity = 1,
                        Price    = 0,
                        Type     = StoreType.Shop,
                    }
                }
            };

            _wcProductServiceMock = new Mock <IWcProductService>();
            _wcProductServiceMock
            .Setup(m => m.GetProductsAsync())
            .Returns(Task.FromResult(new List <WcProduct> {
                DefaultWcProduct
            }));

            _dbProductRepositoryMock = new Mock <IDbProductRepository>();
            _dbProductRepositoryMock
            .Setup(r => r.GetProducts())
            .Returns(new List <DbProduct> {
                DefaultDbProduct
            });

            var loggerMock = new Mock <ILogger <ProductService> >();

            _productService = new ProductService(
                _wcProductServiceMock.Object,
                _dbProductRepositoryMock.Object,
                new PriceCalculator(loggerMock.Object),
                loggerMock.Object);
        }
Beispiel #4
0
        private bool ProductPriceEquals(WcProduct wcProduct, DbProduct dbProduct)
        {
            if (wcProduct.FixedPrice)
            {
                _logger.LogInformation($"Product {wcProduct.Name} - {wcProduct.Sku} has fixed price.");

                return(true);
            }

            (var price, var salePrice) = _priceCalculator.GetPrice(dbProduct);

            if (price == null)
            {
                return(true);
            }

            return
                (wcProduct.RegularPrice == price &&
                 (wcProduct.SalePrice ?? price) == salePrice);
        }
Beispiel #5
0
        private async Task UpdateProduct(WcProduct wcProduct, DbProduct dbProduct)
        {
            if (wcProduct == null)
            {
                _logger.LogError($"{nameof(wcProduct)} should not be null");
            }

            try
            {
                var stockStatus  = dbProduct.GetStockStatus();
                var availability = dbProduct.GetAvailability();
                (var price, var salePrice) = _priceCalculator.GetPrice(dbProduct);

                if (wcProduct.FixedPrice)
                {
                    price     = wcProduct.RegularPrice;
                    salePrice = wcProduct.SalePrice;
                }

                _logger.LogInformation(
                    $"Updating product {wcProduct.Name} - {wcProduct.Sku} from {wcProduct.StockStatus} - " +
                    $"\"{wcProduct.Availability}\" price: {wcProduct.RegularPrice:F0}/{wcProduct.SalePrice:F0} to " +
                    $"{stockStatus} - \"{availability}\", price: {price:F0}/{salePrice:F0}");
                await _wcProductService.UpdateProduct(wcProduct.Id, stockStatus, availability, price, salePrice);

                await Task.Delay(Consts.RequestDelay);
            }
            catch (WebException e)
            {
                _logger.LogError(e, $"Failed to {nameof(_wcProductService.UpdateProduct)} for {wcProduct.Name} - {wcProduct.Sku}");
                await Task.Delay(Consts.FailedRequestDelay);
            }
            catch (Exception e)
            {
                _logger.LogError(e, $"Failed to {nameof(_wcProductService.UpdateProduct)} for {wcProduct.Name} - {wcProduct.Sku}");
            }
        }