Exemple #1
0
        public static IErrorsCollection CompileSingleError <TMember>(TMember member, IReadOnlyCollection <IRule> rulesCollection, IError defaultError)
        {
            var errorsCollection = new ErrorsCollection() as IErrorsCollection;

            var rule = rulesCollection.Single();

            var compilationContext = new ExecutionContextStub
            {
                DefaultError = defaultError
            };

            if (rule is ValidRule <TMember> validateRule)
            {
                validateRule.TryGetErrors(member, compilationContext, ValidationStrategy.Complete, out errorsCollection);
            }
            else if (rule is AsNullableRule validateNullableRule)
            {
                validateNullableRule.TryGetErrors(new object(), member, compilationContext, ValidationStrategy.Complete, out errorsCollection);
            }

            return(errorsCollection);
        }
Exemple #2
0
        public static IValidationResult <object> MockValidationResult(IErrorsCollection errorsCollection, ExecutionContextStub executionContext = null, Translation[] translations = null)
        {
            var resultMock = new Mock <IValidationResult <object> >();

            resultMock.Setup(v => v.ErrorsCollection).Returns(errorsCollection);
            resultMock.Setup(v => v.TranslationProxy).Returns(new TranslationProxy(e => e.ToFormattedMessage(), new TranslatorsRepository(translations ?? Array.Empty <Translation>())));
            resultMock.Setup(v => v.ExecutionOptions).Returns(executionContext ?? new ExecutionContextStub {
                MaxDepth = 10, CollectionForceKey = "*", RequiredError = new Error("Required")
            });

            return(resultMock.Object);
        }
Exemple #3
0
        public static void TestSingleMemberRule <TMember>(MemberSpecification <object, TMember> specification, TMember member, bool expectedIsValid, string expectedErrorMessage = null, IReadOnlyCollection <IMessageArg> expectedArgs = null)
        {
            var validator = MemberValidatorCreator.Create(specification);

            var rule = validator.Rules.Single();

            var executionContext = new ExecutionContextStub();

            IErrorsCollection errorsCollection;

            if (rule is ValidRule <TMember> validateRule)
            {
                validateRule.TryGetErrors(member, executionContext, ValidationStrategy.Complete, out errorsCollection);
            }
            else if (rule is AsNullableRule validateNullableRule)
            {
                validateNullableRule.TryGetErrors(new object(), member, executionContext, ValidationStrategy.Complete, out errorsCollection);
            }
            else
            {
                throw new UntestableException($"Only Valid and AsNullable can be tested in {nameof(TestSingleMemberRule)}");
            }

            if (expectedIsValid)
            {
                if (!errorsCollection.IsEmpty)
                {
                    throw new TesterException("Error collection isn't empty, but no error is expected");
                }
            }
            else
            {
                if (errorsCollection.IsEmpty)
                {
                    throw new TesterException("Error collection is empty, but error is expected");
                }

                if ((errorsCollection.Errors.Count != 1) || (errorsCollection.Members.Count > 0))
                {
                    throw new TesterException("Only one error is expected");
                }

                var error = errorsCollection.Errors.Single();

                if (expectedErrorMessage != null)
                {
                    if (!string.Equals(error.Message, expectedErrorMessage))
                    {
                        throw new TesterException($"Message `{error.Message}` is not as expected: `{expectedErrorMessage}`");
                    }
                }

                if (expectedArgs != null)
                {
                    if (error.Arguments == null)
                    {
                        throw new TesterException($"No arguments while expected amount is `{expectedArgs.Count}`");
                    }

                    if (error.Arguments.Count != expectedArgs.Count)
                    {
                        throw new TesterException($"Arguments count `{error.Arguments.Count}` is not as expected `{expectedArgs.Count}`");
                    }

                    for (var i = 0; i < expectedArgs.Count; ++i)
                    {
                        var expected = expectedArgs.ElementAt(i);

                        var actual = error.Arguments.ElementAt(i);

                        if (!string.Equals(expected.Name, actual.Name))
                        {
                            throw new TesterException($"Argument at position `{i}` - name `{actual.Name}` is not as expected `{expected.Name}`");
                        }

                        var actualType   = actual.GetType();
                        var expectedType = expected.GetType();

                        if (!expectedType.IsAssignableFrom(actualType))
                        {
                            throw new TesterException($"Argument at position `{i}` - type `{actualType.FullName}` cannot be used as `{expectedType.FullName}`");
                        }

                        var actualValue   = actualType.GetProperties().Single(p => p.Name == "Value").GetValue(actual);
                        var expectedValue = actualType.GetProperties().Single(p => p.Name == "Value").GetValue(expected);

                        if (actualValue is double d)
                        {
                            if (Math.Abs(d - (double)expectedValue) > 0.0000001d)
                            {
                                throw new TesterException($"Argument at position `{i}` - value (double) `{actualValue}` is not as expected `{expectedValue}`");
                            }
                        }
                        else if (!expectedValue.Equals(actualValue))
                        {
                            throw new TesterException($"Argument at position `{i}` - value `{actualValue}` is not as expected `{expectedValue}`");
                        }
                    }
                }
                else if (error.Arguments != null)
                {
                    throw new TesterException("Arguments are not expected in the error");
                }
            }
        }