public void For_WithCode_When_ThereAre2ValidationTasks_Then_CodeIsChangedInLastValidationTask()
        {
            // Arrange:
            var memberInfo      = CreateTestMemberInfo();
            var validator       = new PropertyValidatorBaseTestImpl <string>(memberInfo);
            var validationTasks = new List <ValidationTask>
            {
                new ValidationTask(Mock.Of <IValidator>(), false),
                new ValidationTask(Mock.Of <IValidator>(), false)
            };

            validator.AddValidationTasksTestMethod(validationTasks);
            const string code = "SOME CODE";

            // Act:
            validator.WithCode(code);

            // Assert:
            var resultValidationTasks = validator.GetValidationTasksTestMethod();

            resultValidationTasks.Count.Should().Be(2);
            resultValidationTasks.First().ErrorTransformation.OverriddenCode.Should().BeNull();
            resultValidationTasks.Skip(1).First().ErrorTransformation
            .OverriddenCode.Should().Be(code);
        }
        public void For_AddRule_When_ProvidedArgumentsAreValid_Then_ValidationTaskIsAdded()
        {
            // Arrange:
            var memberInfo = CreateTestMemberInfo();
            var validator  = new PropertyValidatorBaseTestImpl <string>(memberInfo);
            Predicate <string> anyPredicate = s => s != null;
            const string       errorMessage = "SOME ERROR MESSAGE";

            // Act:
            validator.AddRule(anyPredicate, errorMessage, null);

            // Assert:
            validator.GetValidationTasksTestMethod().Count.Should().Be(1);
            var validationTask = validator.GetValidationTasksTestMethod().First();

            validationTask.IsOtherValidator.Should().Be(false);
            validationTask.StopValidationAfterFailure.Should().Be(false);
            validationTask.Validator.Should().NotBeNull();
        }
        public void For_StopValidationAfterFailure_When_ThereAreNoValidationTasks_Then_ConstraintIsNotAppliedToAnyValidationTask()
        {
            // Arrange:
            var memberInfo = CreateTestMemberInfo();
            var validator  = new PropertyValidatorBaseTestImpl <string>(memberInfo);

            // Act:
            validator.StopValidationAfterFailure();

            // Assert:
            var validationTasks = validator.GetValidationTasksTestMethod();

            validationTasks.Count.Should().Be(0);
        }
        public void For_SetValidator_When_ValidatorCanBeSet_Then_ItIsAddedToValidationTasksList()
        {
            // Arrange:
            var memberInfo = CreateTestMemberInfo();
            var validator  = new PropertyValidatorBaseTestImpl <string>(memberInfo);

            // Act:
            validator.SetValidator(Mock.Of <ISyncValidator <string> >());

            // Assert:
            var validationTasks = validator.GetValidationTasksTestMethod();

            validationTasks.Count.Should().Be(1);
        }
        public void For_WithCode_When_ThereAreNoValidationTasks_Then_MessageIsNotOverridenForAnyValidationTask()
        {
            // Arrange:
            var          memberInfo = CreateTestMemberInfo();
            var          validator  = new PropertyValidatorBaseTestImpl <string>(memberInfo);
            const string code       = "SOME CODE";

            // Act:
            validator.WithCode(code);

            // Assert:
            var validationTasks = validator.GetValidationTasksTestMethod();

            validationTasks.Count.Should().Be(0);
        }
        public void For_StopValidationAfterFailure_When_ThereAre2ValidationTasks_Then_ConstraintIsAppliedToLastValidationTask()
        {
            // Arrange:
            var memberInfo      = CreateTestMemberInfo();
            var validator       = new PropertyValidatorBaseTestImpl <string>(memberInfo);
            var validationTasks = new List <ValidationTask>
            {
                new ValidationTask(Mock.Of <IValidator>(), false),
                new ValidationTask(Mock.Of <IValidator>(), false)
            };

            validator.AddValidationTasksTestMethod(validationTasks);

            // Act:
            validator.StopValidationAfterFailure();

            // Assert:
            var resultValidationTasks = validator.GetValidationTasksTestMethod();

            resultValidationTasks.Count.Should().Be(2);
            resultValidationTasks.First().StopValidationAfterFailure.Should().BeFalse();
            resultValidationTasks.Skip(1).First().StopValidationAfterFailure.Should().BeTrue();
        }