public void Throws_exception()
        {
            var validator = new TestValidator {
                v => v.RuleFor(x => x.Surname).NotNull()
            };

            typeof(ValidationException).ShouldBeThrownBy(() => validator.ValidateAndThrow(new Person()));
        }
        public void Throws_exception()
        {
            var validator = new TestValidator {
                v => v.RuleFor(x => x.Surname).NotNull()
            };

            Assert.Throws <ValidationException>(() => validator.ValidateAndThrow(new Person()));
        }
        public void Does_not_throw_when_valid()
        {
            var validator = new TestValidator {
                v => v.RuleFor(x => x.Surname).NotNull()
            };

            validator.ValidateAndThrow(new Person {
                Surname = "foo"
            });
        }
        public void Populates_errors()
        {
            var validator = new TestValidator {
                v => v.RuleFor(x => x.Surname).NotNull()
            };

            var ex = (ValidationException)Assert.Throws <ValidationException>(() => validator.ValidateAndThrow(new Person()));

            ex.Errors.Count().ShouldEqual(1);
        }
        public void ToString_provides_error_details()
        {
            var validator = new TestValidator {
                v => v.RuleFor(x => x.Surname).NotNull(),
                v => v.RuleFor(x => x.Forename).NotNull()
            };

            var ex = typeof(ValidationException).ShouldBeThrownBy(() => validator.ValidateAndThrow(new Person()));

            ex.ToString().ShouldStartWith("FluentValidation.ValidationException: Validation failed: \r\n -- 'Surname' must not be empty.\r\n -- 'Forename' must not be empty.");
        }
        public void ToString_provides_error_details()
        {
            var validator = new TestValidator {
                v => v.RuleFor(x => x.Surname).NotNull(),
                v => v.RuleFor(x => x.Forename).NotNull()
            };

            var    ex       = typeof(ValidationException).ShouldBeThrownBy(() => validator.ValidateAndThrow(new Person()));
            string expected = "FluentValidation.ValidationException: Validation failed: " + Environment.NewLine + " -- Surname: 'Surname' must not be empty." + Environment.NewLine + " -- Forename: 'Forename' must not be empty.";

            Assert.True(ex.ToString().StartsWith(expected));
        }
        public void Throws_exception_with_a_ruleset()
        {
            var validator = new TestValidator {
                v => v.RuleFor(x => x.Surname).NotNull()
            };

            const string ruleSetName = "blah";

            validator.RuleSet(ruleSetName, () => { validator.RuleFor(x => x.Forename).NotNull(); });

            typeof(ValidationException).ShouldBeThrownBy(() => validator.ValidateAndThrow(new Person(), ruleSetName));
        }
        public void Does_not_throw_when_valid_and_a_ruleset()
        {
            var validator = new TestValidator {
                v => v.RuleFor(x => x.Surname).NotNull()
            };

            const string ruleSetName = "blah";

            validator.RuleSet(ruleSetName, () => { validator.RuleFor(x => x.Forename).NotNull(); });

            var person = new Person {
                Forename = "foo",
                Surname  = "foo"
            };

            validator.ValidateAndThrow(person, ruleSetName);
        }