public async Task ValidateAddItem_RuleSetStrict_PriceError()
        {
            //Arrange
            var cart = GetValidCart();

            var productPrice = new Money(Rand.Decimal(MIN_PRICE, MAX_PRICE), Usd);

            var testAddItem = new Faker <AddCartItem>()
                              .RuleFor(x => x.Id, f => f.Random.Guid().ToString())
                              .RuleFor(x => x.Quantity, f => f.Random.Int(1, InStockQuantity))
                              .RuleFor(x => x.Price, f => f.Random.Decimal(MIN_PRICE, productPrice.Amount - 1))
                              .RuleFor(x => x.Product, f => GenTestProduct(productPrice));

            var addItem = testAddItem.Generate();

            //Act
            var validator = new AddCartItemValidator(cart);

            var result = await validator.ValidateAsync(addItem, ruleSet : "strict");

            //Assertion
            Assert.False(result.IsValid);
            Assert.NotEmpty(result.Errors);
            Assert.Collection(result.Errors, x =>
            {
                Assert.Equal(nameof(addItem.Price), x.PropertyName);
            });
        }
        public async Task ValidateAddItem_RuleSetDefault_Valid()
        {
            //Arrange
            var cart = GetValidCart();

            var testAddItem = new Faker <AddCartItem>()
                              .RuleFor(x => x.Id, f => f.Random.Guid().ToString())
                              .RuleFor(x => x.Quantity, f => f.Random.Int(1, InStockQuantity))
                              .RuleFor(x => x.Product, f => new Product(Usd, Language.InvariantLanguage));

            var addItem = testAddItem.Generate();

            //Act
            var validator = new AddCartItemValidator(cart);

            var result = await validator.ValidateAsync(addItem, ruleSet : "default");

            //Assertion
            Assert.True(result.IsValid);
            Assert.Empty(result.Errors);
        }
        public async Task ValidateAddItem_RuleSetDefault_Invalid()
        {
            //Arrange
            var cart = GetValidCart();

            var addItem = new AddCartItem()
            {
                Quantity = 0
            };

            //Act
            var validator = new AddCartItemValidator(cart);

            var result = await validator.ValidateAsync(addItem, ruleSet : "default");

            //Assertion
            Assert.False(result.IsValid);
            Assert.NotEmpty(result.Errors);
            Assert.Collection(result.Errors, x => { Assert.Equal(nameof(addItem.Quantity), x.PropertyName); Assert.Equal(nameof(GreaterThanValidator), x.ErrorCode); }
                              , x => { Assert.Equal(nameof(addItem.Product), x.PropertyName); Assert.Equal(nameof(NotNullValidator), x.ErrorCode); }
                              );
        }