public async Task ValidateCartLineItem_RuleSetStrict_UnavailableError(string scenario)
        {
            //Arrange
            var cart = GetValidCart();
            var item = Faker.PickRandom(cart.Items);

            switch (scenario)
            {
            case "Product_null":
                item.Product = null;
                break;

            case "Product_IsActive_false":
                item.Product.IsActive = false;
                break;

            case "Product_IsBuyable_false":
                item.Product.IsBuyable = false;
                break;
            }


            //Act
            var validator = new CartLineItemValidator(cart);
            var result    = await validator.ValidateAsync(item, ruleSet : "strict");

            //Assertion
            Assert.False(result.IsValid);
            Assert.NotEmpty(result.Errors);
            Assert.Collection(result.Errors, x => { Assert.Equal(nameof(item.Product), x.PropertyName); });
            Assert.NotEmpty(item.ValidationErrors);
            Assert.Collection(item.ValidationErrors, x => { Assert.Equal(nameof(UnavailableError), x.ErrorCode); });
        }
        public async Task ValidateCartLineItem_RuleSetStrict_UnavailableError(string scenario)
        {
            // Arrange
            var item        = _fixture.Create <LineItem>();
            var cartProduct = _context.AllCartProducts.FirstOrDefault();

            item.ProductId = cartProduct.Id;

            switch (scenario)
            {
            case "Product_null":
                cartProduct.Id = _fixture.Create <string>();
                break;

            case "Product_IsActive_false":
                cartProduct.Product.IsActive = false;
                break;

            case "Product_IsBuyable_false":
                cartProduct.Product.IsBuyable = false;
                break;
            }

            // Act
            var validator = new CartLineItemValidator(_context.AllCartProducts);
            var result    = await validator.ValidateAsync(item, ruleSet : "strict");

            // Assert
            result.IsValid.Should().BeFalse();
            result.Errors.Should().NotBeEmpty();
            result.Errors.Should().Contain(x => x.ErrorCode == "CART_PRODUCT_UNAVAILABLE");
        }
        public async Task ValidateCartLineItem_RuleSetStrict_Valid()
        {
            //Arrange
            var cart = GetValidCart();
            var item = Faker.PickRandom(cart.Items);

            //Act
            var validator = new CartLineItemValidator(cart);
            var result    = await validator.ValidateAsync(item, ruleSet : "strict");

            //Assertion
            Assert.True(result.IsValid);
            Assert.Empty(result.Errors);
        }
        public async Task ValidateCartLineItem_RuleSetStrict_Valid()
        {
            // Arrange
            var item     = _fixture.Create <LineItem>();
            var lineItem = _context.AllCartProducts.FirstOrDefault();

            item.ProductId = lineItem.Id;

            // Act
            var validator = new CartLineItemValidator(_context.AllCartProducts);
            var result    = await validator.ValidateAsync(item, ruleSet : "strict");

            // Assert
            result.Errors.Should().BeEmpty();
            result.IsValid.Should().BeTrue();
        }
        public async Task ValidateCartLineItem_RuleSetStrict_PriceError()
        {
            //Arrange
            var cart = GetValidCart();
            var item = Faker.PickRandom(cart.Items);

            item.SalePrice = new Money(item.SalePrice.Amount / 2m, Usd);


            //Act
            var validator = new CartLineItemValidator(cart);
            var result    = await validator.ValidateAsync(item, ruleSet : "strict");

            //Assertion
            Assert.False(result.IsValid);
            Assert.NotEmpty(result.Errors);
            Assert.Collection(result.Errors, x => { Assert.Equal(nameof(item.SalePrice), x.PropertyName); });
            Assert.NotEmpty(item.ValidationErrors);
            Assert.Collection(item.ValidationErrors, x => { Assert.Equal(nameof(PriceError), x.ErrorCode); });
        }
        public async Task ValidateCartLineItem_RuleSetStrict_QuantityError()
        {
            //Arrange
            var cart = GetValidCart();
            var item = Faker.PickRandom(cart.Items);

            item.Quantity = InStockQuantity * 2;


            //Act
            var validator = new CartLineItemValidator(cart);
            var result    = await validator.ValidateAsync(item, ruleSet : "strict");

            //Assertion
            Assert.False(result.IsValid);
            Assert.NotEmpty(result.Errors);
            Assert.Collection(result.Errors, x => { Assert.Equal(nameof(item.Product.AvailableQuantity), x.PropertyName); });
            Assert.NotEmpty(item.ValidationErrors);
            Assert.Collection(item.ValidationErrors, x => { Assert.Equal(nameof(QuantityError), x.ErrorCode); });
        }
        public async Task ValidateCartLineItem_RuleSetStrict_PriceError()
        {
            // Arrange
            var item     = _fixture.Create <LineItem>();
            var lineItem = _context.AllCartProducts.FirstOrDefault();

            item.ProductId = lineItem.Id;

            item.SalePrice /= 2m;

            // Act
            var validator = new CartLineItemValidator(_context.AllCartProducts);
            var result    = await validator.ValidateAsync(item, ruleSet : "strict");

            // Assert
            result.IsValid.Should().BeFalse();
            result.Errors.Should().NotBeEmpty();
            result.Errors.Should().HaveCount(1);
            result.Errors.Should().Contain(x => x.ErrorCode == "PRODUCT_PRICE_CHANGED");
        }
예제 #8
0
        public async Task ValidateCartLineItem_RuleSetStrict_Valid()
        {
            // Arrange
            var item     = _fixture.Create <LineItem>();
            var lineItem = _context.AllCartProducts.FirstOrDefault();

            item.ProductId = lineItem.Id;

            // Act
            var validator = new CartLineItemValidator();
            var result    = await validator.ValidateAsync(new LineItemValidationContext
            {
                AllCartProducts = _context.AllCartProducts,
                LineItem        = item
            }, options => options.IncludeRuleSets("strict"));

            // Assert
            result.Errors.Should().BeEmpty();
            result.IsValid.Should().BeTrue();
        }
예제 #9
0
        public async Task ValidateCartLineItem_RuleSetStrict_QuantityError()
        {
            // Arrange
            var item     = _fixture.Create <LineItem>();
            var lineItem = _context.AllCartProducts.FirstOrDefault();

            item.ProductId = lineItem.Id;

            item.Quantity = InStockQuantity * 2;

            // Act
            var validator = new CartLineItemValidator();
            var result    = await validator.ValidateAsync(new LineItemValidationContext
            {
                LineItem        = item,
                AllCartProducts = _context.AllCartProducts
            });

            // Assert
            result.IsValid.Should().BeFalse();
            result.Errors.Should().NotBeEmpty();
        }
예제 #10
0
        public async Task ValidateCartLineItem_RuleSetStrict_ProductMinQuantityError()
        {
            // Arrange
            var item     = _fixture.Create <LineItem>();
            var lineItem = _context.AllCartProducts.FirstOrDefault();

            item.ProductId = lineItem.Id;

            item.Quantity = 1;
            lineItem.Product.MinQuantity = 5;

            // Act
            var validator = new CartLineItemValidator();
            var result    = await validator.ValidateAsync(new LineItemValidationContext
            {
                LineItem        = item,
                AllCartProducts = _context.AllCartProducts
            });

            // Assert
            result.IsValid.Should().BeFalse();
            result.Errors.Should().Contain(x => x.ErrorCode == "PRODUCT_MIN_QTY");
        }