private bool ProductEquals(WcProduct wcProduct, DbProduct dbProduct) { return (wcProduct.StockStatus == dbProduct.GetStockStatus() && wcProduct.Availability == dbProduct.GetAvailability() && ProductPriceEquals(wcProduct, dbProduct)); }
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); } }
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); }
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); }
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}"); } }