public void Passing_Null_Configuration_By_Constructor_Throws()
        {
            // arrange
            _subject = new AutoValidation((ValidatorConfigurationExpression)null);

            // act
            Action action = () => _subject.AssertExpressionsAreValid();

            // assert
            action.Should().Throw <ConfigurationExpressionException>().WithMessage("No configuration has been setup");
        }
        public void Passing_Good_Configuration_Will_Not_Throw_Any_Exceptions_On_Assert()
        {
            // arrange
            var expression = new ValidatorConfigurationExpression();

            expression.AddProfile <Profile2>();
            expression.AddProfile <Profile1>();

            _subject = new AutoValidation(expression);

            // act
            Action action = () => _subject.AssertExpressionsAreValid();

            // assert
            action.Should().NotThrow();
        }
        public void Passing_Good_Configuration_Action_Will_Not_Throw_Any_Exceptions_On_Assert()
        {
            // arrange
            Action <IValidatorConfigurationExpression> configure = cfg =>
            {
                cfg.AddProfile <Profile2>();
                cfg.AddProfile <Profile2>();
            };

            _subject = new AutoValidation(configure);

            // act
            Action action = () => _subject.AssertExpressionsAreValid();

            // assert
            action.Should().NotThrow();
        }
        public void Passing_Bad_Configuration_Will_Throw()
        {
            // arrange
            var expression = new ValidatorConfigurationExpression();

            expression.AddProfile <DuplicateInvalidMappingProfile>();
            expression.AddProfile <MissingMappingProfile>();

            _subject = new AutoValidation(expression);

            try
            {
                _subject.AssertExpressionsAreValid();
            }
            catch (ConfigurationExpressionException ex)
            {
                ex.Errors.ToList().Count.Should().Be(2);
                ex.Errors.Should().Contain(e => e.ProfileType == typeof(DuplicateInvalidMappingProfile));
                ex.Errors.Should().Contain(e => e.ProfileType == typeof(MissingMappingProfile));
            }
        }
        public void Passing_Bad_Configuration_Action__Will_Throw_Will_Not_Contain_Good_Profile()
        {
            // arrange
            Action <IValidatorConfigurationExpression> configure = cfg =>
            {
                cfg.AddProfile <DuplicateInvalidMappingProfile>();
                cfg.AddProfile <MissingMappingProfile>();
                cfg.AddProfile <Profile1>();
            };

            _subject = new AutoValidation(configure);

            try
            {
                _subject.AssertExpressionsAreValid();
            }
            catch (ConfigurationExpressionException ex)
            {
                ex.Errors.ToList().Count.Should().Be(2);
                ex.Errors.Should().Contain(e => e.ProfileType == typeof(DuplicateInvalidMappingProfile));
                ex.Errors.Should().Contain(e => e.ProfileType == typeof(MissingMappingProfile));
            }
        }