Пример #1
0
            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);
            }
Пример #2
0
            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));
                }
            }
Пример #3
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 _); });
            }
Пример #4
0
            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);
            }
Пример #5
0
            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);
            }