public void Update_AddingManyValidation_ItUpdatesAllUpdateMethodsFromValidationsAdded()
        {
            // Arrange
            var person               = Fixture.Create <Person>();
            var validation           = new CompositeValidation <Person>(person);
            var allValidation        = MockAllValidations(validation);
            var firstNameMock        = allValidation.FirstNameMock;
            var lastNameMock         = allValidation.LastNameMock;
            var hasDriverLicenseMock = allValidation.HasDriverLicenseMock;
            var ageValidationMock    = allValidation.AgeValidationMock;

            // Act
            validation.Update();

            // Assert
            validation.Validations.ShouldContain(firstNameMock.Object);
            validation.Validations.ShouldContain(lastNameMock.Object);
            validation.Validations.ShouldContain(hasDriverLicenseMock.Object);
            validation.Validations.ShouldContain(ageValidationMock.Object);

            firstNameMock.Verify(x => x.Update(person.FirstName), Times.Once);
            lastNameMock.Verify(x => x.Update(person.LastName), Times.Once);
            hasDriverLicenseMock.Verify(x => x.Update(person.HasDriverLicense), Times.Once);
            ageValidationMock.Verify(x => x.Update(person.Age), Times.Once);
        }
        private ValidationsMocked MockAllValidations(CompositeValidation <Person> validation)
        {
            var firstNameMock        = new Mock <IValidation <string> >();
            var lastNameMock         = new Mock <IValidation <string> >();
            var hasDriverLicenseMock = new Mock <IValidation <bool> >();
            var ageValidationMock    = new Mock <IValidation <int> >();

            SetupEmptyFailures(firstNameMock, lastNameMock);
            SetupEmptyFailures(hasDriverLicenseMock);
            SetupEmptyFailures(ageValidationMock);

            firstNameMock.Setup(x => x.GroupName).Returns("FirstName");
            lastNameMock.Setup(x => x.GroupName).Returns("LastName");
            hasDriverLicenseMock.Setup(x => x.GroupName).Returns("HasDriverLicense");
            ageValidationMock.Setup(x => x.GroupName).Returns("Age");

            firstNameMock.Setup(x => x.Message).Returns("FirstName is not valid");
            lastNameMock.Setup(x => x.Message).Returns("LastName is not valid");
            hasDriverLicenseMock.Setup(x => x.Message).Returns("HasDriverLicense is not valid");
            ageValidationMock.Setup(x => x.Message).Returns("Age is not valid");

            validation.Add(firstNameMock.Object, x => x.FirstName);
            validation.Add(lastNameMock.Object, x => x.LastName);
            validation.Add(hasDriverLicenseMock.Object, x => x.HasDriverLicense);
            validation.Add(ageValidationMock.Object, x => x.Age);

            return(new ValidationsMocked(firstNameMock, lastNameMock, hasDriverLicenseMock, ageValidationMock));
        }
        public void NotEmpty_AddingNotEmptyList_ItAddsNotEmptyEnumerableValidation()
        {
            // Arrange
            var validation = new CompositeValidation <Person>();

            // Act
            validation.NotEmpty("AnyGroupName", x => new List <object>());

            // Assert
            validation.Validations.OfType <NotEmptyEnumerableValidation <object> >().Count().ShouldBe(1);
        }
        public void NotEmpty_AddingNotEmptyString_ItAddsNotEmptyStringValidation()
        {
            // Arrange
            var validation = new CompositeValidation <Person>();

            // Act
            validation.NotEmpty("AnyGroupName", x => x.FirstName);

            // Assert
            validation.Validations.OfType <NotEmptyStringValidation>().Count().ShouldBe(1);
        }
        public void Null_AddingNullValidation_ItAddsNullValidation()
        {
            // Arrange
            var validation = new CompositeValidation <Person>();

            // Act
            validation.Null("AnyGroupName", x => x);

            // Assert
            validation.Validations.Single().ShouldBeOfType <NullValidation>();
            validation.Validations.OfType <NullValidation>().Single().AcceptNull.ShouldBeTrue();
        }
        public void Update_PassingGroupNameAndValue_ItUpdatesValidationAccordingWithGroupNamePassed()
        {
            // Arrange
            var validation    = new CompositeValidation <Person>();
            var lastName      = Guid.NewGuid().ToString();
            var allValidation = MockAllValidations(validation);
            var lastNameMock  = allValidation.LastNameMock;

            // Act
            validation.Update("LastName", lastName);

            // Assert
            lastNameMock.Verify(x => x.Update(lastName), Times.Once);
        }
예제 #7
0
        public void Update_ConfiguringValidationWithAddForEach_ItUpdateTheValidationCorrectly()
        {
            // Arrange
            string summaryMessage   = "#TestError";
            var    personValidation = new CompositeValidation <Person>(null, null, summaryMessage)
                                      .NotNull(nameof(Person.FirstName), x => x.FirstName)
                                      .MinimumLength(nameof(Person.FirstName), x => x.FirstName, 3)
                                      .MaximumLength(nameof(Person.FirstName), x => x.FirstName, 10)
                                      .NotNull(nameof(Person.LastName), x => x.LastName)
                                      .MinimumLength(nameof(Person.LastName), x => x.LastName, 3)
                                      .MaximumLength(nameof(Person.LastName), x => x.LastName, 10);

            const string minimumPlayersMessage = "A Football team must have at least 11 players";
            const string maximumPlayersMessage = "Including the substitutes a Football team can not have more 23 players";

            var footballTeamValidation = new CompositeValidation <FootballTeam>()
                                         .AddForEach(personValidation, team => team.Players)
                                         .MinimumSize("Players", x => x.Players, 11, minimumPlayersMessage)
                                         .MaximumSize("Players", x => x.Players, 23, maximumPlayersMessage);

            var footballTeam = new FootballTeam()
            {
                Name    = "Liverpool",
                Players = new List <Person>()
                {
                    new Person()
                    {
                        FirstName = "Steven",
                        LastName  = "Gerard"
                    },
                    new Person()
                    {
                        FirstName = "Invalid",
                        LastName  = "a"
                    }
                }
            };

            // Act
            footballTeamValidation.Update(footballTeam);

            // Assert
            footballTeamValidation.IsValid.ShouldBeFalse();
            footballTeamValidation.Failures.Count.ShouldBe(2);
            footballTeamValidation.Failures.First().Message.ShouldBe(summaryMessage);
            footballTeamValidation.Failures.ElementAt(1).Message.ShouldBe(minimumPlayersMessage);
        }
        public void Update_ForcingFailedValidationAndPassingSummaryMessage_ItInsertsTheSummaryMessage()
        {
            // Arrange
            var person         = Fixture.Create <Person>();
            var summaryMessage = "#TestSummaryMessage";
            var validation     = new CompositeValidation <Person>(null, null, summaryMessage);
            var stopValidation = new MustNotValidation <object>("Failing", x => true);

            validation.Add(stopValidation, x => x);


            // Act
            validation.Update(person);

            // Assert
            validation.IsValid.ShouldBeFalse();
            validation.Failures.Count.ShouldBe(2);
            validation.Failures.First().Message.ShouldBe(summaryMessage);
        }
        public void Update_PassingGroupNameAndKeepingTargetNull_NoValidationAreCalled()
        {
            // Arrange
            var person               = Fixture.Create <Person>();
            var validation           = new CompositeValidation <Person>(person);
            var allValidation        = MockAllValidations(validation);
            var firstNameMock        = allValidation.FirstNameMock;
            var lastNameMock         = allValidation.LastNameMock;
            var hasDriverLicenseMock = allValidation.HasDriverLicenseMock;
            var ageValidationMock    = allValidation.AgeValidationMock;

            // Act
            validation.Update("LastName");

            // Assert
            firstNameMock.Verify(x => x.Update(person.FirstName), Times.Never);
            lastNameMock.Verify(x => x.Update(person.LastName), Times.Once);
            hasDriverLicenseMock.Verify(x => x.Update(person.HasDriverLicense), Times.Never);
            ageValidationMock.Verify(x => x.Update(person.Age), Times.Never);
        }
예제 #10
0
        public void UpdatePartially3_UpdatingPartiallyAGroupName_ItRaisesFailuresCorrectlyWithTheSummaryMessage()
        {
            //Arrange
            var summaryMessage = "#TestSummaryMessage";
            var validations    = new CompositeValidation <Person>(null, null, summaryMessage)
                                 .NotNull(nameof(Person.FirstName), x => x.FirstName)
                                 .MinimumLength(nameof(Person.FirstName), x => x.FirstName, 3)
                                 .MaximumLength(nameof(Person.FirstName), x => x.FirstName, 10)
                                 .NotNull(nameof(Person.LastName), x => x.LastName)
                                 .MinimumLength(nameof(Person.LastName), x => x.LastName, 3)
                                 .MaximumLength(nameof(Person.LastName), x => x.LastName, 10);


            var person = new Person()
            {
                FirstName = "Hugo",
                LastName  = "Jose",
                Email     = "*****@*****.**",
                Phone     = "+5501234567",
                BirthDate = DateTime.Now.AddYears(-20)
            };

            // Act
            validations.Update(person);
            validations.Update("LastName", "J");

            // Assert
            validations.IsValid.ShouldBeFalse();
            validations.Failures.Count.ShouldBe(2);

            validations.Failures.First().Validation.ShouldBe(validations);

            validations.Failures.Select(x => x.Validation)
            .OfType <CompositeValidation <Person> >().Single()
            .SummaryMessage.ShouldBe(summaryMessage);

            validations.Failures.Single(x => x.GroupName == nameof(Person.LastName))
            .Validation.ShouldBeOfType <StringMinimumLengthValidation>();
        }
예제 #11
0
        public void Update_MustAndNotMust_NoErrors()
        {
            var footballTeamValidation = new CompositeValidation <FootballTeam>()
                                         .MustForEach("Players", x => x.Players, x => x?.FirstName != null)
                                         .MustNotForEach("Players", x => x.Players, x => x?.LastName == null);

            var footballTeam = new FootballTeam()
            {
                Name    = "Liverpool 2005",
                Players = new List <Person>()
                {
                    new Person()
                    {
                        FirstName = "Jerzy",
                        LastName  = "Dudek"
                    },
                    new Person()
                    {
                        FirstName = "Steve",
                        LastName  = "Finnan"
                    },
                    new Person()
                    {
                        FirstName = "Jamie",
                        LastName  = "Carragher"
                    },
                    new Person()
                    {
                        FirstName = "Sami",
                        LastName  = "Hyypia"
                    },
                    new Person()
                    {
                        FirstName = "Djimi",
                        LastName  = "Traoré"
                    },
                    new Person()
                    {
                        FirstName = "Xabi",
                        LastName  = "Alonso"
                    },
                    new Person()
                    {
                        FirstName = "Luis",
                        LastName  = "García"
                    },
                    new Person()
                    {
                        FirstName = "Steven",
                        LastName  = "Gerrard"
                    },
                    new Person()
                    {
                        FirstName = "John",
                        LastName  = "Arne Riise"
                    },
                    new Person()
                    {
                        FirstName = "Harry",
                        LastName  = "Kewell"
                    },
                    new Person()
                    {
                        FirstName = "Milan",
                        LastName  = "Baroš"
                    },
                    new Person()
                    {
                        FirstName = "Hugo",
                        LastName  = "Jose"
                    }
                }
            };

            // Act
            footballTeamValidation.Update(footballTeam);

            // Assert
            footballTeamValidation.IsValid.ShouldBeTrue();
            footballTeamValidation.Failures.Count.ShouldBe(0);
        }
예제 #12
0
        public void Update_RegExAndEmailForEach_RaisesErrors()
        {
            var footballTeamValidation = new CompositeValidation <FootballTeam>()
                                         .EmailForEach("Players", x => x.Players.Select(y => y.LastName))
                                         .RegExForEach("Players", x => x.Players.Select(y => y.FirstName), "^[a-zA-Z]+$");

            var footballTeam = new FootballTeam()
            {
                Name    = "Liverpool 2005",
                Players = new List <Person>()
                {
                    new Person()
                    {
                        FirstName = "Jerzy",
                        LastName  = "Dudek"
                    },
                    new Person()
                    {
                        FirstName = "Steve",
                        LastName  = "Finnan"
                    },
                    new Person()
                    {
                        FirstName = "Jamie",
                        LastName  = "Carragher"
                    },
                    new Person()
                    {
                        FirstName = "Sami",
                        LastName  = "Hyypia"
                    },
                    new Person()
                    {
                        FirstName = "Djimi",
                        LastName  = "Traoré"
                    },
                    new Person()
                    {
                        FirstName = "Xabi",
                        LastName  = "Alonso"
                    },
                    new Person()
                    {
                        FirstName = "Luis",
                        LastName  = "García"
                    },
                    new Person()
                    {
                        FirstName = "Steven",
                        LastName  = "Gerrard"
                    },
                    new Person()
                    {
                        FirstName = "John",
                        LastName  = "Arne Riise"
                    },
                    new Person()
                    {
                        FirstName = "Harry",
                        LastName  = "Kewell"
                    },
                    new Person()
                    {
                        FirstName = "Milan",
                        LastName  = "Baroš"
                    },
                    new Person()
                    {
                        FirstName = "Hugooool9",
                        LastName  = "Jose"
                    }
                }
            };

            // Act
            footballTeamValidation.Update(footballTeam);

            // Assert
            footballTeamValidation.IsValid.ShouldBeFalse();
            footballTeamValidation.Failures.Count.ShouldBe(2);
        }
예제 #13
0
        public void Update2_ConfiguringValidationWithAddForEach_ItUpdateTheValidationCorrectly()
        {
            // Arrange
            var personValidation = new CompositeValidation <Person>()
                                   .NotNull(nameof(Person.FirstName), x => x.FirstName)
                                   .MinimumLength(nameof(Person.FirstName), x => x.FirstName, 3)
                                   .MaximumLength(nameof(Person.FirstName), x => x.FirstName, 10)
                                   .NotNull(nameof(Person.LastName), x => x.LastName)
                                   .MinimumLength(nameof(Person.LastName), x => x.LastName, 3)
                                   .MaximumLength(nameof(Person.LastName), x => x.LastName, 10);

            const string maximumPlayersMessage = "a Football team can not have more 11 players";

            var footballTeamValidation = new CompositeValidation <FootballTeam>()
                                         .AddForEach(personValidation, team => team.Players)
                                         .MaximumSize("Players", x => x.Players, 11, maximumPlayersMessage);

            var footballTeam = new FootballTeam()
            {
                Name    = "Liverpool 2005",
                Players = new List <Person>()
                {
                    new Person()
                    {
                        FirstName = "Jerzy",
                        LastName  = "Dudek"
                    },
                    new Person()
                    {
                        FirstName = "Steve",
                        LastName  = "Finnan"
                    },
                    new Person()
                    {
                        FirstName = "Jamie",
                        LastName  = "Carragher"
                    },
                    new Person()
                    {
                        FirstName = "Sami",
                        LastName  = "Hyypia"
                    },
                    new Person()
                    {
                        FirstName = "Djimi",
                        LastName  = "Traoré"
                    },
                    new Person()
                    {
                        FirstName = "Xabi",
                        LastName  = "Alonso"
                    },
                    new Person()
                    {
                        FirstName = "Luis",
                        LastName  = "García"
                    },
                    new Person()
                    {
                        FirstName = "Steven",
                        LastName  = "Gerrard"
                    },
                    new Person()
                    {
                        FirstName = "John",
                        LastName  = "Arne Riise"
                    },
                    new Person()
                    {
                        FirstName = "Harry",
                        LastName  = "Kewell"
                    },
                    new Person()
                    {
                        FirstName = "Milan",
                        LastName  = "Baroš"
                    },
                    new Person()
                    {
                        FirstName = "Hugo",
                        LastName  = "Jose"
                    }
                }
            };

            // Act
            footballTeamValidation.Update(footballTeam);

            // Assert
            footballTeamValidation.IsValid.ShouldBeFalse();
            footballTeamValidation.Failures.Count.ShouldBe(1);
            footballTeamValidation.Failures.First().Message.ShouldBe(maximumPlayersMessage);
        }