public void Should_PassValue() { var model = new MemberClass { Inner = new InnerClass() }; var executed = 0; Predicate <InnerClass> isValid = c => { Assert.Same(c, model.Inner); executed++; return(true); }; Expression <Func <MemberClass, InnerClass> > selector = m => m.Inner; var propertyInfo = (PropertyInfo)((MemberExpression)selector.Body).Member; var memberScope = new MemberScope <MemberClass, InnerClass>(propertyInfo, m => m .Valid(isValid) ); memberScope.TryGetErrors(model, new ExecutionContextStub(), ValidationStrategy.Complete, 0, out _); Assert.Equal(1, executed); }
public void Should_PassStrategy(ValidationStrategy validationStrategy) { var model = new MemberClass { Inner = new InnerClass() }; var executed = new int[3]; Predicate <InnerClass> isValid1 = c => { Assert.Same(c, model.Inner); executed[0]++; return(false); }; Predicate <InnerClass> isValid2 = c => { Assert.Same(c, model.Inner); executed[1]++; return(false); }; Predicate <InnerClass> isValid3 = c => { Assert.Same(c, model.Inner); executed[2]++; return(false); }; Expression <Func <MemberClass, InnerClass> > selector = m => m.Inner; var propertyInfo = (PropertyInfo)((MemberExpression)selector.Body).Member; var memberScope = new MemberScope <MemberClass, InnerClass>(propertyInfo, m => m .Valid(isValid1) .Valid(isValid2) .Valid(isValid3) ); memberScope.TryGetErrors(model, new ExecutionContextStub(), validationStrategy, 0, out _); if (validationStrategy == ValidationStrategy.Complete) { Assert.True(executed.All(i => i == 1)); } else if (validationStrategy == ValidationStrategy.FailFast) { Assert.Equal(1, executed.ElementAt(0)); Assert.Equal(0, executed.ElementAt(1)); Assert.Equal(0, executed.ElementAt(2)); } else if (validationStrategy == ValidationStrategy.Force) { Assert.True(executed.All(i => i == 0)); } }
public void Should_ThrowException_When_NullExecutionContext() { Expression <Func <MemberClass, string> > selector = m => m.Member; var propertyInfo = (PropertyInfo)((MemberExpression)selector.Body).Member; var modelScope = new MemberScope <MemberClass, string>(propertyInfo, m => m); Assert.Throws <ArgumentNullException>(() => { modelScope.TryGetErrors(new MemberClass(), null, ValidationStrategy.Complete, 0, out _); }); }
public void Should_ReturnNoErrors_IfValid() { var model = new MemberClass { Inner = new InnerClass() }; Expression <Func <MemberClass, InnerClass> > selector = m => m.Inner; var propertyInfo = (PropertyInfo)((MemberExpression)selector.Body).Member; var memberScope = new MemberScope <MemberClass, InnerClass>(propertyInfo, m => m .Valid(c => true) ); var errors = memberScope.TryGetErrors(model, new ExecutionContextStub(), ValidationStrategy.Complete, 0, out var errorsCollection); Assert.False(errors); Assert.True(errorsCollection.IsEmpty); }
public void Should_ReturnRuleSingleError_IfValid() { var model = new MemberClass { Inner = new InnerClass() }; Expression <Func <MemberClass, InnerClass> > selector = m => m.Inner; var propertyInfo = (PropertyInfo)((MemberExpression)selector.Body).Member; var memberScope = new MemberScope <MemberClass, InnerClass>(propertyInfo, m => m .Valid(c => false) ); memberScope.RuleSingleError = new Error("single error"); var errors = memberScope.TryGetErrors(model, new ExecutionContextStub(), ValidationStrategy.Complete, 0, out var errorsCollection); Assert.True(errors); Assert.Single(errorsCollection.Errors); Assert.Equal("single error", errorsCollection.Errors.Single().Message); }