public void CreateValidationMetadata_SetsHasValidatorsToTrue_IfProviderReturnsTrue()
        {
            // Arrange
            var metadataBasedModelValidatorProvider = new Mock <IMetadataBasedModelValidatorProvider>();

            metadataBasedModelValidatorProvider.Setup(p => p.HasValidators(typeof(object), It.IsAny <IList <object> >()))
            .Returns(true)
            .Verifiable();

            var validationProviders = new IModelValidatorProvider[]
            {
                new DefaultModelValidatorProvider(),
                metadataBasedModelValidatorProvider.Object,
            };
            var metadataProvider = new HasValidatorsValidationMetadataProvider(validationProviders);

            var key             = ModelMetadataIdentity.ForType(typeof(object));
            var modelAttributes = new ModelAttributes(new object[0], new object[0], new object[0]);
            var context         = new ValidationMetadataProviderContext(key, modelAttributes);

            // Act
            metadataProvider.CreateValidationMetadata(context);

            // Assert
            Assert.True(context.ValidationMetadata.HasValidators);
            metadataBasedModelValidatorProvider.Verify();
        }
        public void CreateValidationMetadata_DoesNotSetHasValidators_IfProviderIsConfigured()
        {
            // Arrange
            var validationProviders = new IModelValidatorProvider[0];
            var metadataProvider    = new HasValidatorsValidationMetadataProvider(validationProviders);

            var key             = ModelMetadataIdentity.ForType(typeof(object));
            var modelAttributes = new ModelAttributes(new object[0], new object[0], new object[0]);
            var context         = new ValidationMetadataProviderContext(key, modelAttributes);

            // Act
            metadataProvider.CreateValidationMetadata(context);

            // Assert
            Assert.Null(context.ValidationMetadata.HasValidators);
        }
        public void CreateValidationMetadata_DoesNotSetHasValidators_IfNonMetadataBasedProviderExists()
        {
            // Arrange
            var validationProviders = new IModelValidatorProvider[]
            {
                new DefaultModelValidatorProvider(),
                Mock.Of <IModelValidatorProvider>(),
            };
            var metadataProvider = new HasValidatorsValidationMetadataProvider(validationProviders);

            var key             = ModelMetadataIdentity.ForType(typeof(object));
            var modelAttributes = new ModelAttributes(new object[0], new object[0], new object[0]);
            var context         = new ValidationMetadataProviderContext(key, modelAttributes);

            // Act
            metadataProvider.CreateValidationMetadata(context);

            // Assert
            Assert.Null(context.ValidationMetadata.HasValidators);
        }
        public void CreateValidationMetadata_SetsHasValidatorsToFalse_IfNoProviderReturnsTrue()
        {
            // Arrange
            var provider            = Mock.Of <IMetadataBasedModelValidatorProvider>(p => p.HasValidators(typeof(object), It.IsAny <IList <object> >()) == false);
            var validationProviders = new IModelValidatorProvider[]
            {
                new DefaultModelValidatorProvider(),
                provider,
            };
            var metadataProvider = new HasValidatorsValidationMetadataProvider(validationProviders);

            var key             = ModelMetadataIdentity.ForType(typeof(object));
            var modelAttributes = new ModelAttributes(new object[0], new object[0], new object[0]);
            var context         = new ValidationMetadataProviderContext(key, modelAttributes);

            // Act
            metadataProvider.CreateValidationMetadata(context);

            // Assert
            Assert.False(context.ValidationMetadata.HasValidators);
        }
        public void CreateValidationMetadata_DoesNotOverrideExistingHasValidatorsValue()
        {
            // Arrange
            var provider            = Mock.Of <IMetadataBasedModelValidatorProvider>(p => p.HasValidators(typeof(object), It.IsAny <IList <object> >()) == false);
            var validationProviders = new IModelValidatorProvider[]
            {
                new DefaultModelValidatorProvider(),
                provider,
            };
            var metadataProvider = new HasValidatorsValidationMetadataProvider(validationProviders);

            var key             = ModelMetadataIdentity.ForType(typeof(object));
            var modelAttributes = new ModelAttributes(new object[0], new object[0], new object[0]);
            var context         = new ValidationMetadataProviderContext(key, modelAttributes);

            // Initialize this value.
            context.ValidationMetadata.HasValidators = true;

            // Act
            metadataProvider.CreateValidationMetadata(context);

            // Assert
            Assert.True(context.ValidationMetadata.HasValidators);
        }