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());
        }
Exemple #4
0
        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;
        }
Exemple #5
0
        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);
        }