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"); }
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(); }
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(); }
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"); }