public void Test_RuleBuilder_NoProperty()
        {
            var v = new RuleBuilder <ValidateFailure, ValidateFailure>(_Validation);

            v.SetValueGetter(i => i);
            Assert.Equal(string.Empty, v.ValueName);
            var result = new ValidateFailure();

            Assert.Equal(result, v.ValueGetter((object)result));
        }
        public async void Test_Validator_Validate()
        {
            var v    = new Validator(_Validation);
            var rule = new ValidateRule(_Validation)
            {
                ValidateAsyncFunc = (c, name, error) =>
                {
                    var f = new ValidateFailure()
                    {
                        Name  = name,
                        Error = error,
                        Value = c
                    };
                    return(Task.FromResult <IValidateResult>(new ValidateResult(new List <ValidateFailure>()
                    {
                        f
                    })));
                }
            };

            var context = new ValidateContext()
            {
                RuleSelector = new RuleSelector()
            };
            var result = await v.ValidateAsync(context);

            Assert.NotNull(result);
            Assert.True(result.IsValid);
            Assert.NotNull(result.Failures);
            Assert.Equal(0, result.Failures.Count);

            v.SetRules(new List <ValidateRule>()
            {
                rule
            });
            result = await v.ValidateAsync(context);

            Assert.NotNull(result);
            Assert.False(result.IsValid);
            Assert.NotNull(result.Failures);
            Assert.Equal(1, result.Failures.Count);

            rule.ValidateAsyncFunc = (c, name, error) =>
            {
                return(Task.FromResult <IValidateResult>(new ValidateResult()));
            };

            result = await v.ValidateAsync(context);

            Assert.NotNull(result);
            Assert.True(result.IsValid);
            Assert.NotNull(result.Failures);
            Assert.Equal(0, result.Failures.Count);
        }
        public void Test_RuleBuilder_OneLevelProperty()
        {
            var v = new RuleBuilder <ValidateFailure, string>(_Validation);

            v.SetValueGetter(i => i.Error);
            Assert.Equal("Error", v.ValueName);
            var result = new ValidateFailure()
            {
                Error = "a"
            };

            Assert.Equal(result.Error, v.ValueGetter(result));
        }
Beispiel #4
0
        public async void Test_Validate()
        {
            var rule = new ValidateRule(_Validation);

            rule.ValueName = "a";
            Func <ValidateContext, string, string, Task <IValidateResult> > failed = (context, name, error) =>
            {
                var f = new ValidateFailure()
                {
                    Name  = name,
                    Error = error,
                    Value = context
                };
                return(Task.FromResult <IValidateResult>(new ValidateResult(new List <ValidateFailure>()
                {
                    f
                })));
            };

            rule.ValidateAsyncFunc = failed;
            var result = await rule.ValidateAsync(new ValidateContext());

            Assert.NotNull(result);
            Assert.Equal(false, result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("a", result.Failures[0].Name);

            rule.Condition = (context) => { return(context.RuleSetList.IsEmptyOrNull()); };
            result         = await rule.ValidateAsync(new ValidateContext());

            Assert.NotNull(result);
            Assert.Equal(false, result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("a", result.Failures[0].Name);

            result = await rule.ValidateAsync(new ValidateContext()
            {
                RuleSetList = new List <string>()
                {
                    "A"
                }
            });

            Assert.NotNull(result);
            Assert.Equal(true, result.IsValid);
            Assert.Equal(0, result.Failures.Count);
        }
Beispiel #5
0
        public async void Test_ValidateAsyncByFunc()
        {
            var rule = new ValidateRule(_Validation);

            rule.ValueName = "a";
            Func <ValidateContext, string, string, Task <IValidateResult> > failed = (context, name, error) =>
            {
                var f = new ValidateFailure()
                {
                    Name  = name,
                    Error = error,
                    Value = context
                };
                return(Task.FromResult <IValidateResult>(new ValidateResult(new List <ValidateFailure>()
                {
                    f
                })));
            };

            rule.ValidateAsyncFunc = failed;
            var result = await rule.ValidateAsyncByFunc(new ValidateContext());

            Assert.NotNull(result);
            Assert.Equal(false, result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("a", result.Failures[0].Name);

            rule.NextRuleList.Add(new ValidateRule(_Validation)
            {
                ValueName = "b", ValidateAsyncFunc = failed
            });
            result = await rule.ValidateAsyncByFunc(new ValidateContext()
            {
                Option = ValidateOption.StopOnFirstFailure
            });

            Assert.NotNull(result);
            Assert.Equal(false, result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("a", result.Failures[0].Name);

            result = await rule.ValidateAsyncByFunc(new ValidateContext()
            {
                Option = ValidateOption.Continue
            });

            Assert.NotNull(result);
            Assert.Equal(false, result.IsValid);
            Assert.Equal(2, result.Failures.Count);
            Assert.Equal("a", result.Failures[0].Name);
            Assert.Equal("b", result.Failures[1].Name);

            Func <ValidateContext, string, string, Task <IValidateResult> > successed = (context, name, error) =>
            {
                return(Task.FromResult <IValidateResult>(new ValidateResult()));
            };

            rule.NextRuleList[0].ValidateAsyncFunc = successed;
            result = await rule.ValidateAsyncByFunc(new ValidateContext()
            {
                Option = ValidateOption.StopOnFirstFailure
            });

            Assert.NotNull(result);
            Assert.Equal(false, result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("a", result.Failures[0].Name);

            result = await rule.ValidateAsyncByFunc(new ValidateContext()
            {
                Option = ValidateOption.Continue
            });

            Assert.NotNull(result);
            Assert.Equal(false, result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("a", result.Failures[0].Name);

            rule.ValidateAsyncFunc = successed;
            result = await rule.ValidateAsyncByFunc(new ValidateContext()
            {
                Option = ValidateOption.StopOnFirstFailure
            });

            Assert.NotNull(result);
            Assert.Equal(true, result.IsValid);
            Assert.Equal(0, result.Failures.Count);

            rule.NextRuleList.Add(new ValidateRule(_Validation)
            {
                ValueName = "c", ValidateAsyncFunc = failed
            });
            rule.NextRuleList.Add(new ValidateRule(_Validation)
            {
                ValueName = "d", ValidateAsyncFunc = failed
            });
            result = await rule.ValidateAsyncByFunc(new ValidateContext()
            {
                Option = ValidateOption.StopOnFirstFailure
            });

            Assert.NotNull(result);
            Assert.Equal(false, result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("c", result.Failures[0].Name);
            rule.NextRuleList.RemoveAt(1);
            rule.NextRuleList.RemoveAt(1);

            result = await rule.ValidateAsyncByFunc(new ValidateContext()
            {
                Option = ValidateOption.Continue
            });

            Assert.NotNull(result);
            Assert.Equal(true, result.IsValid);
            Assert.Equal(0, result.Failures.Count);

            rule.NextRuleList[0].ValidateAsyncFunc = failed;
            result = await rule.ValidateAsyncByFunc(new ValidateContext()
            {
                Option = ValidateOption.StopOnFirstFailure
            });

            Assert.NotNull(result);
            Assert.Equal(false, result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("b", result.Failures[0].Name);

            result = await rule.ValidateAsyncByFunc(new ValidateContext()
            {
                Option = ValidateOption.Continue
            });

            Assert.NotNull(result);
            Assert.Equal(false, result.IsValid);
            Assert.Equal(1, result.Failures.Count);
            Assert.Equal("b", result.Failures[0].Name);

            rule.NextRuleList.Clear();
            result = await rule.ValidateAsyncByFunc(new ValidateContext()
            {
                Option = ValidateOption.Continue
            });

            Assert.Equal(true, result.IsValid);
            Assert.Equal(0, result.Failures.Count);

            result = await rule.ValidateAsyncByFunc(new ValidateContext()
            {
                Option = ValidateOption.StopOnFirstFailure
            });

            Assert.Equal(true, result.IsValid);
            Assert.Equal(0, result.Failures.Count);
        }