public async Task ValidateChangePriceItem_RuleSetDefault_Invalid() { //Arrange var cart = GetValidCart(); var newItemPrice = new ChangeCartItemPrice { LineItemId = null, NewPrice = -1 }; //Act var validator = new ChangeCartItemPriceValidator(cart); var result = await validator.ValidateAsync(newItemPrice, ruleSet : "default"); //Assertion Assert.False(result.IsValid); Assert.NotEmpty(result.Errors); Assert.Equal(3, result.Errors.Count); Assert.Collection(result.Errors, x => { Assert.Equal(nameof(newItemPrice.NewPrice), x.PropertyName); Assert.Equal(nameof(GreaterThanOrEqualValidator), x.ErrorCode); } , x => { Assert.Equal(nameof(newItemPrice.LineItemId), x.PropertyName); Assert.Equal(nameof(NotNullValidator), x.ErrorCode); } , x => { Assert.Equal(nameof(newItemPrice.LineItemId), x.PropertyName); Assert.Equal(nameof(NotEmptyValidator), x.ErrorCode); } ); }
public async Task ValidateChangePriceItem_RuleSetStrict_Invalid() { //Arrange var cart = GetValidCart(); var item = Faker.PickRandom(cart.Items); var newItemPrice = new ChangeCartItemPrice { LineItemId = item.Id, NewPrice = item.ListPrice.Amount - Rand.Decimal(0, item.ListPrice.Amount) }; //Act var validator = new ChangeCartItemPriceValidator(cart); var result = await validator.ValidateAsync(newItemPrice, ruleSet : "strict"); //Assertion Assert.False(result.IsValid); Assert.NotEmpty(result.Errors); Assert.Collection(result.Errors, x => { Assert.Equal(nameof(item.SalePrice), x.PropertyName); }); }
public async Task <ActionResult> ChangeCartItemPrice([FromBody] ChangeCartItemPrice newPrice) { EnsureCartExists(); //Need lock to prevent concurrent access to same cart using (await AsyncLock.GetLockByKey(WorkContext.CurrentCart.Value.GetCacheKey()).LockAsync()) { var cartBuilder = await LoadOrCreateCartAsync(); var lineItem = cartBuilder.Cart.Items.FirstOrDefault(x => x.Id == newPrice.LineItemId); if (lineItem != null) { var newPriceMoney = new Money(newPrice.NewPrice, cartBuilder.Cart.Currency); //do not allow to set less price via this API call if (lineItem.ListPrice < newPriceMoney) { lineItem.ListPrice = newPriceMoney; } if (lineItem.SalePrice < newPriceMoney) { lineItem.SalePrice = newPriceMoney; } } await cartBuilder.SaveAsync(); } return(Ok()); }
public virtual async Task ChangeItemPriceAsync(LineItem lineItem, ChangeCartItemPrice changePrice) { await new ChangeCartItemPriceValidator(Cart).ValidateAndThrowAsync(changePrice, ruleSet: Cart.ValidationRuleSet); var newPriceMoney = new Money(changePrice.NewPrice, Cart.Currency); lineItem.ListPrice = newPriceMoney; lineItem.SalePrice = newPriceMoney; }
public virtual async Task ChangeItemPriceAsync(ChangeCartItemPrice newPrice) { EnsureCartExists(); var lineItem = Cart.Items.FirstOrDefault(x => x.Id == newPrice.LineItemId); if (lineItem != null) { await ChangeItemPriceAsync(lineItem, newPrice); } }
public async Task <ActionResult> ChangeCartItemPrice([FromBody] ChangeCartItemPrice newPrice) { EnsureCartExists(); //Need lock to prevent concurrent access to same cart using (await AsyncLock.GetLockByKey(WorkContext.CurrentCart.Value.GetCacheKey()).LockAsync()) { var cartBuilder = await LoadOrCreateCartAsync(); await cartBuilder.ChangeItemPriceAsync(newPrice); await cartBuilder.SaveAsync(); } return(Ok()); }
public async Task ValidateChangePriceItem_RuleSetStrict_Valid() { //Arrange var cart = GetValidCart(); var item = Faker.PickRandom(cart.Items); var newItemPrice = new ChangeCartItemPrice { LineItemId = item.Id, NewPrice = item.ListPrice.Amount + Rand.Decimal(MIN_PRICE, MAX_PRICE) }; //Act var validator = new ChangeCartItemPriceValidator(cart); var result = await validator.ValidateAsync(newItemPrice, ruleSet : "strict"); //Assertion Assert.True(result.IsValid); Assert.Empty(result.Errors); }