Exemple #1
0
            public void Should_AddError_When_Invalid(ValidationStrategy validationStrategy, RuleType ruleType)
            {
                var args = new[] { Arg.Text("key", "value") };
                var memberSpecification = GetSingleRuleMemberSpecification(ruleType, false, "message", args);

                AsNullableRule rule = new AsNullableRule <object, int>(memberSpecification);

                var getErrorsResult = rule.TryGetErrors(
                    new object(),
                    default(int),
                    new ExecutionContextStub(),
                    validationStrategy,
                    out var errorsCollection);

                Assert.True(getErrorsResult);
                Assert.Equal("message", errorsCollection.Errors.Single().Message);

                if (ruleType == RuleType.Validate)
                {
                    Assert.Same(args, errorsCollection.Errors.Single().Arguments);
                }
                else
                {
                    Assert.Null(errorsCollection.Errors.Single().Arguments);
                }
            }
Exemple #2
0
            public void Should_OverrideErrorMessage_When_Chain(ValidationStrategy validationStrategy)
            {
                var rule = new AsNullableRule <object, int>(be => be
                                                            .Valid(m => true, "message1", new[] { Arg.Text("key1", "value1") })
                                                            .AsRelative(m => true).WithMessage("message2")
                                                            .Valid(m => false, "message3", new[] { Arg.Text("key3", "value3") })
                                                            .AsRelative(m => false).WithMessage("message4")
                                                            .Valid(m => true, "message5", new[] { Arg.Text("key5", "value5") })
                                                            .AsRelative(m => false).WithMessage("message6")
                                                            .Valid(m => false, "message7", new[] { Arg.Text("key7", "value7") })
                                                            .AsRelative(m => true).WithMessage("message8")
                                                            .SetSingleError("message_overriden")
                                                            );

                var getErrorsResult = rule.TryGetErrors(
                    new object(),
                    default(int),
                    new ExecutionContextStub(),
                    validationStrategy,
                    out var errorsCollection);

                Assert.True(getErrorsResult);

                Assert.Equal("message_overriden", errorsCollection.Errors.Single().Message);
                Assert.Null(errorsCollection.Errors.Single().Arguments);
            }
Exemple #3
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));
                }
            }
Exemple #4
0
            public void Should_PassMemberToPredicate_When_Validate(ValidationStrategy validationStrategy)
            {
                var executed = false;
                int?member   = 1230;

                MemberSpecification <object, int> memberSpecification = be => be.Valid(m =>
                {
                    Assert.Equal(member.Value, m);

                    executed = true;

                    return(true);
                });

                var rule = new AsNullableRule <object, int>(memberSpecification);

                rule.TryGetErrors(
                    new object(),
                    member,
                    new ExecutionContextStub(),
                    validationStrategy,
                    out _);

                Assert.True(executed);
            }
Exemple #5
0
            public void Should_PassModelToPredicate_When_AsRelative(ValidationStrategy validationStrategy)
            {
                var executed = false;
                var model    = new object();

                MemberSpecification <object, int> memberSpecification = be => be.AsRelative(m =>
                {
                    Assert.Same(model, m);

                    executed = true;

                    return(true);
                });

                var rule = new AsNullableRule <object, int>(memberSpecification);

                rule.TryGetErrors(
                    model,
                    1230,
                    new ExecutionContextStub(),
                    validationStrategy,
                    out _);

                Assert.True(executed);
            }
Exemple #6
0
        /// <summary>
        /// Creates a new validation context using the specified options.
        /// </summary>
        /// <param name="instanceToValidate">The instance to validate</param>
        /// <param name="options">Callback that allows extra options to be configured.</param>
        public static ValidationContext <T> CreateWithOptions(T instanceToValidate, Action <ValidationStrategy <T> > options)
        {
            if (options == null)
            {
                throw new ArgumentNullException(nameof(options));
            }
            var strategy = new ValidationStrategy <T>();

            options(strategy);
            return(strategy.BuildContext(instanceToValidate));
        }
Exemple #7
0
 void CustomizeValidationStrategy(
     ValidationStrategy <TArgument> strategy)
 {
     if (_ruleSets?.Any() == true)
     {
         strategy.IncludeRuleSets(_ruleSets);
     }
     else if (_properties?.Any() == true)
     {
         strategy.IncludeProperties(_properties);
     }
 }
Exemple #8
0
        public bool TryGetErrors(TModel model, IExecutionContext executionContext, ValidationStrategy validationStrategy, int depth, out IErrorsCollection scopeErrorsCollection)
        {
            var anyErrors = Rule.TryGetErrors(model, executionContext, validationStrategy, out var errorsCollection);

            if (!errorsCollection.IsEmpty && (RuleSingleError != null))
            {
                scopeErrorsCollection = ErrorsCollection.WithSingleOrNull(RuleSingleError);

                return(true);
            }

            scopeErrorsCollection = errorsCollection;

            return(anyErrors);
        }
Exemple #9
0
        public bool TryGetErrors(TModel model, IExecutionContext executionContext, ValidationStrategy validationStrategy, int depth, out IErrorsCollection scopeErrorsCollection)
        {
            var errorsCollection = _getErrors(this, model, executionContext ?? throw new ArgumentNullException(nameof(executionContext)), validationStrategy, depth);

            if (!errorsCollection.IsEmpty && (RuleSingleError != null))
            {
                scopeErrorsCollection = ErrorsCollection.WithSingleOrNull(RuleSingleError);

                return(true);
            }

            scopeErrorsCollection = errorsCollection;

            return(!scopeErrorsCollection.IsEmpty);
        }
Exemple #10
0
            public void Should_NotAddError_When_Valid(ValidationStrategy validationStrategy)
            {
                Predicate <object> isValid = m => true;

                var error = new Error("message");

                var rule = new AsRelativeRule <object>(isValid, error);

                rule.TryGetErrors(new object(),
                                  new ExecutionContextStub(),
                                  validationStrategy,
                                  out var errorsCollection);

                Assert.Same(ErrorsCollection.Empty, errorsCollection);
                Assert.True(errorsCollection.IsEmpty);
            }
Exemple #11
0
            public void Should_AddError_When_Invalid(ValidationStrategy validationStrategy)
            {
                Predicate <object> isValid = m => false;

                var error = new Error("message");

                var rule = new ValidRule <object>(isValid, error);

                var getErrorsResult = rule.TryGetErrors(new object(),
                                                        new ExecutionContextStub(),
                                                        validationStrategy,
                                                        out var errorsCollection);

                Assert.True(getErrorsResult);
                Assert.Same(error, errorsCollection.Errors.Single());
            }
Exemple #12
0
            public void Should_NotAddError_When_NullMember(ValidationStrategy validationStrategy, RuleType ruleType)
            {
                var memberSpecification = GetSingleRuleMemberSpecification(ruleType, true, "message");

                AsNullableRule rule = new AsNullableRule <object, int>(memberSpecification);

                var getErrorsResult = rule.TryGetErrors(
                    new object(),
                    null,
                    new ExecutionContextStub(),
                    validationStrategy,
                    out var errorsCollection);

                Assert.False(getErrorsResult);
                Assert.True(errorsCollection.IsEmpty);
                Assert.Empty(errorsCollection.Errors);
            }
Exemple #13
0
            public void Should_AddError_When_Invalid_And_NullArgs(ValidationStrategy validationStrategy, RuleType ruleType)
            {
                var memberSpecification = GetSingleRuleMemberSpecification(ruleType, false, "message");

                AsNullableRule rule = new AsNullableRule <object, int>(memberSpecification);

                var getErrorsResult = rule.TryGetErrors(
                    new object(),
                    default(int),
                    new ExecutionContextStub(),
                    validationStrategy,
                    out var errorsCollection);

                Assert.True(getErrorsResult);
                Assert.Equal("message", errorsCollection.Errors.Single().Message);
                Assert.Null(errorsCollection.Errors.Single().Arguments);
            }
Exemple #14
0
            public void Should_PassStrategy(ValidationStrategy validationStrategy)
            {
                var model = new MemberClass();

                var executed = 0;

                var modelScope = new ModelScope <MemberClass>(c =>
                {
                    Assert.Same(c, model);
                    executed = 1;

                    return(true);
                });

                modelScope.TryGetErrors(model, new ExecutionContextStub(), validationStrategy, 0, out _);

                Assert.Equal(validationStrategy == ValidationStrategy.Force ? 0 : 1, executed);
            }
Exemple #15
0
            public void Should_OverrideErrorMessage_When_Valid_And_Force(ValidationStrategy validationStrategy, RuleType ruleType)
            {
                var memberSpecification = GetSingleRuleMemberSpecification(ruleType, true, "message", new[] { Arg.Text("key", "value") });

                var rule = new AsNullableRule <object, int>(c => memberSpecification(c).SetSingleError("message_overriden"));

                var getErrorsResult = rule.TryGetErrors(
                    new object(),
                    default(int),
                    new ExecutionContextStub(),
                    validationStrategy,
                    out var errorsCollection);

                Assert.True(getErrorsResult);

                Assert.Equal("message_overriden", errorsCollection.Errors.Single().Message);
                Assert.Null(errorsCollection.Errors.Single().Arguments);
            }
Exemple #16
0
            public void Should_AddSingleError_When_Valid_And_Force(ValidationStrategy validationStrategy, RuleType ruleType)
            {
                var args = new[] { Arg.Text("key", "value") };
                var memberSpecification = GetSingleRuleMemberSpecification(ruleType, true, "message", args);

                AsNullableRule rule = new AsNullableRule <object, int>(memberSpecification);

                rule.RuleSingleError = new Error("ruleSingleError");

                var getErrorsResult = rule.TryGetErrors(
                    new object(),
                    default(int),
                    new ExecutionContextStub(),
                    validationStrategy,
                    out var errorsCollection);

                Assert.True(getErrorsResult);
                Assert.Equal("ruleSingleError", errorsCollection.Errors.Single().Message);
            }
Exemple #17
0
            public void Should_AddDefaultError_When_Invalid_And_NoError(ValidationStrategy validationStrategy)
            {
                Predicate <object> isValid = m => false;

                var error = new Error("default error {arg}", new[] { Arg.Text("key", "value") });

                var rule = new ValidRule <object>(isValid);

                var getErrorsResult = rule.TryGetErrors(new object(),
                                                        new ExecutionContextStub
                {
                    DefaultError = error
                },
                                                        validationStrategy,
                                                        out var errorsCollection);

                Assert.True(getErrorsResult);

                Assert.Same(error, errorsCollection.Errors.Single());
            }
Exemple #18
0
            public void Should_ExecutePredicate(ValidationStrategy validationStrategy)
            {
                var executed = 0;

                Predicate <object> isValid = m =>
                {
                    executed++;

                    return(true);
                };

                var rule = new AsRelativeRule <object>(isValid);

                rule.TryGetErrors(new object(),
                                  new ExecutionContextStub(),
                                  validationStrategy,
                                  out _);

                Assert.Equal(1, executed);
            }
Exemple #19
0
            public void Should_NotExecutePredicate_When_NullMember(ValidationStrategy validationStrategy)
            {
                var executed = 0;

                Predicate <object> isValid = m =>
                {
                    executed++;

                    return(true);
                };

                var rule = new ValidRule <object>(isValid);

                rule.TryGetErrors(null,
                                  new ExecutionContextStub(),
                                  validationStrategy,
                                  out _);

                Assert.Equal(0, executed);
            }
Exemple #20
0
            public void Should_NotExecuteCollect_When_AsRelative_And_NullMember(ValidationStrategy validationStrategy)
            {
                var executed = false;

                MemberSpecification <object, int> memberSpecification = be => be.AsRelative(m =>
                {
                    executed = true;

                    return(true);
                });

                var rule = new AsNullableRule <object, int>(memberSpecification);

                rule.TryGetErrors(
                    new object(),
                    null,
                    new ExecutionContextStub(),
                    validationStrategy,
                    out _);

                Assert.False(executed);
            }
Exemple #21
0
            public void Should_PassEqualValueToPredicate(ValidationStrategy validationStrategy)
            {
                var executed = false;
                var member   = 123.123;

                Predicate <object> isValid = m =>
                {
                    executed = true;
                    Assert.Equal(member, m);

                    return(true);
                };

                var rule = new ValidRule <object>(isValid);

                rule.TryGetErrors(member,
                                  new ExecutionContextStub(),
                                  validationStrategy,
                                  out _);

                Assert.True(executed);
            }
Exemple #22
0
            public void Should_ExecuteCollect_When_Validate(ValidationStrategy validationStrategy)
            {
                var executed = false;

                MemberSpecification <object, int> memberSpecification = be => be.Valid(m =>
                {
                    executed = true;

                    return(true);
                }, "message");

                var rule = new AsNullableRule <object, int>(memberSpecification);

                rule.TryGetErrors(
                    new object(),
                    default(int),
                    new ExecutionContextStub(),
                    validationStrategy,
                    out _);

                Assert.True(executed);
            }
Exemple #23
0
            public void Should_PassReferenceToPredicate(ValidationStrategy validationStrategy)
            {
                var executed = false;
                var member   = new object();

                Predicate <object> isValid = m =>
                {
                    executed = true;
                    Assert.Same(member, m);

                    return(true);
                };

                var rule = new AsRelativeRule <object>(isValid);

                rule.TryGetErrors(member,
                                  new ExecutionContextStub(),
                                  validationStrategy,
                                  out _);

                Assert.True(executed);
            }
Exemple #24
0
    //TODO we could make the list of tableNames to check for be an array, so that this method is a bit more "agnostic" to implementation
    void Start()
    {
        if (!doneStart)
        {        //put init stuff here
            DebugConsole.Log("GameStateServer.Start()");

            dbManip.TryEnableForeignKeys();             //VERY IMPORTANT to ensure foreign keys are enforced

            if (dbManip.VerifyTableExistence(RAY_TABLE_NAMES))
            {
                //choose which Validation strategy you want to use
                valStrat = new ValidationStrategyMemoized(dbManip);
            }
            else               //probably don't have a propperly set up db.
                               //TODO give them an easy way to set one up.
            {
                DebugConsole.LogError("Did not find expected table(s) in db. Make sure it is set up!");
            }

            doneStart = true;
        }
    }
Exemple #25
0
        public ObjectValidator(Type targetType, ValidatorFactory validatorFactory, string targetRuleset, string keyFormat)
            : base(targetType, targetRuleset)
        {
            var itypes = targetType.GetInterfaces();

            m_validators = new Validator[itypes.Length];
            if (m_validators.Length > 0)
            {
                EnumerableHelper.ForEach(itypes,
                                         (i, type) => m_validators[i] = validatorFactory.CreateValidator(type, targetRuleset));
                m_strategy = ValidateInterfacesStrategy;
            }
            else
            {
                m_strategy = base.DoValidate;
            }

            if (!String.IsNullOrEmpty(keyFormat))
            {
                KeyFormat  = keyFormat;
                m_strategy = FormatKeyStrategy;
            }
        }
Exemple #26
0
            public void Should_AddDefaultError_When_Invalid_And_NoError(ValidationStrategy validationStrategy, RuleType ruleType)
            {
                var args                = new[] { Arg.Text("key", "value") };
                var message             = "default error {arg}";
                var memberSpecification = GetSingleRuleMemberSpecification(ruleType, false);

                var rule = new AsNullableRule <object, int>(memberSpecification);

                var getErrorsResult = rule.TryGetErrors(
                    new object(),
                    default(int),
                    new ExecutionContextStub
                {
                    DefaultError = new Error(message, args)
                },
                    validationStrategy,
                    out var errorsCollection);

                Assert.True(getErrorsResult);

                Assert.Equal(message, errorsCollection.Errors.Single().Message);
                Assert.Same(args, errorsCollection.Errors.Single().Arguments);
            }
Exemple #27
0
		/// <summary>
		/// Default constructor.
		/// </summary>
		public DicomAnonymizer()
		{
			_validationStrategy = new ValidationStrategy();

			SpecificCharacterSet = @"ISO_IR 192";
		}
		/// <summary>
		/// Default constructor.
		/// </summary>
		public DicomAnonymizer()
		{
			_validationStrategy = new ValidationStrategy();
		}
 public static void Default <TInput>(ValidationStrategy <TInput> validationStrategy)
 {
 }
Exemple #30
0
        public static IErrorsCollection ExecuteMember <TModel, TMember>(IMemberValidator memberValidator, TModel model, TMember memberValue, IExecutionContext executionContext, ValidationStrategy validationStrategy, int depth)
            where TModel : class
        {
            ErrorsCollection result = null;

            // ReSharper disable once CompareNonConstrainedGenericWithNull
            var exists = IsValueType(typeof(TMember)) || (memberValue != null);

            var strategy = validationStrategy;

            var includeRequired = !memberValidator.IsOptional && (!exists || (strategy == ValidationStrategy.Force));

            if (includeRequired)
            {
                result = new ErrorsCollection();
                result.AddError(memberValidator.RequiredError ?? executionContext.RequiredError);
            }

            if ((strategy == ValidationStrategy.Complete) && (memberValidator.SingleError != null))
            {
                strategy = ValidationStrategy.FailFast;
            }

            if ((strategy == ValidationStrategy.FailFast) && (result != null) && !result.IsEmpty)
            {
                return(result);
            }

            if (exists || (strategy == ValidationStrategy.Force))
            {
                foreach (var rule in memberValidator.Rules)
                {
                    bool anyErrors;

                    IErrorsCollection ruleErrorsCollection;

                    if (rule is ValidRule <TMember> validateRule)
                    {
                        anyErrors = validateRule.TryGetErrors(memberValue, executionContext, strategy, out ruleErrorsCollection);
                    }
                    else if (rule is AsRelativeRule <TModel> validateRelationRule)
                    {
                        anyErrors = validateRelationRule.TryGetErrors(model, executionContext, strategy, out ruleErrorsCollection);
                    }
                    else if (rule is AsModelRule validModelRule)
                    {
                        anyErrors = validModelRule.TryGetErrors(memberValue, executionContext, strategy, depth, out ruleErrorsCollection);
                    }
                    else if (rule is AsCollectionRule validCollectionRule)
                    {
                        anyErrors = validCollectionRule.TryGetErrors(model, memberValue, executionContext, strategy, depth, out ruleErrorsCollection);
                    }
                    else if (rule is AsNullableRule validNullableRule)
                    {
                        anyErrors = validNullableRule.TryGetErrors(model, memberValue, executionContext, strategy, out ruleErrorsCollection);
                    }
                    else
                    {
                        throw new InvalidRuleException("Unknown rule");
                    }

                    if (!anyErrors)
                    {
                        continue;
                    }

                    if (result == null)
                    {
                        result = new ErrorsCollection();
                    }

                    result.Include(ruleErrorsCollection);

                    if (strategy == ValidationStrategy.FailFast)
                    {
                        break;
                    }
                }
            }

            if ((result == null) || result.IsEmpty)
            {
                return(ErrorsCollection.Empty);
            }

            if (memberValidator.SingleError == null)
            {
                return(result);
            }

            var summaryErrorResult = new ErrorsCollection();

            if (includeRequired)
            {
                summaryErrorResult.AddError(executionContext.RequiredError ?? memberValidator.RequiredError);
            }

            summaryErrorResult.AddError(memberValidator.SingleError);

            return(summaryErrorResult);
        }
Exemple #31
0
        public static IErrorsCollection ExecuteCollectionMember <TModel, TItem>(IMemberValidator memberValidator, TModel model, IEnumerable <TItem> memberValue, IExecutionContext executionContext, ValidationStrategy validationStrategy, int depth)
            where TModel : class
        {
            ErrorsCollection result = null;

            if (validationStrategy == ValidationStrategy.Force)
            {
                var itemErrorsCollection = ExecuteMember(
                    memberValidator,
                    model,
                    default(TItem),
                    executionContext,
                    validationStrategy,
                    depth
                    );

                result = new ErrorsCollection();

                result.AddError(executionContext.CollectionForceKey, itemErrorsCollection);
            }
            else if (memberValue != null)
            {
                var items = memberValue.ToArray();

                for (var i = 0; i < items.Length; i++)
                {
                    var item = items.ElementAt(i);

                    var itemErrorsCollection = ExecuteMember(
                        memberValidator,
                        model,
                        item,
                        executionContext,
                        validationStrategy,
                        depth
                        );

                    if (itemErrorsCollection.IsEmpty)
                    {
                        continue;
                    }

                    if (result == null)
                    {
                        result = new ErrorsCollection();
                    }

                    result.AddError(i.ToString(), itemErrorsCollection);

                    if ((validationStrategy == ValidationStrategy.FailFast) && !result.IsEmpty)
                    {
                        break;
                    }
                }
            }

            return(GetOrEmpty(result));
        }
Exemple #32
0
        public static IErrorsCollection ExecuteNullableMember <TModel, TMember>(IMemberValidator memberValidator, TModel model, TMember?memberValue, IExecutionContext executionContext, ValidationStrategy validationStrategy)
            where TModel : class
            where TMember : struct
        {
            ErrorsCollection result = null;

            var strategy = validationStrategy;

            if ((strategy == ValidationStrategy.Complete) && (memberValidator.SingleError != null))
            {
                strategy = ValidationStrategy.FailFast;
            }

            foreach (var rule in memberValidator.Rules)
            {
                IError error = null;

                if (rule is ValidRule <TMember> validateRule)
                {
                    if ((strategy == ValidationStrategy.Force) ||
                        (memberValue.HasValue && !validateRule.IsValid(memberValue.Value)))
                    {
                        error = validateRule.RuleSingleError ?? validateRule.Error ?? executionContext.DefaultError;
                    }
                }
                else if (rule is AsRelativeRule <TModel> relationRule)
                {
                    if ((strategy == ValidationStrategy.Force) ||
                        (memberValue.HasValue && !relationRule.IsValid(model)))
                    {
                        error = relationRule.RuleSingleError ?? relationRule.Error ?? executionContext.DefaultError;
                    }
                }
                else
                {
                    throw new InvalidRuleException($"Unknown (or not allowed) rule in {nameof(AsNullableRule)}");
                }

                if (error == null)
                {
                    continue;
                }

                if (result == null)
                {
                    result = new ErrorsCollection();
                }

                if (memberValidator.SingleError != null)
                {
                    result.AddError(memberValidator.SingleError);

                    break;
                }

                result.AddError(error);

                if (strategy == ValidationStrategy.FailFast)
                {
                    break;
                }
            }

            return(GetOrEmpty(result));
        }