Ejemplo n.º 1
0
    public void GetValidators_CachesAllValidators()
    {
        // Arrange
        var cache             = new ClientValidatorCache();
        var metadata          = new TestModelMetadataProvider().GetMetadataForProperty(typeof(TypeWithProperty), "Property1");
        var validatorProvider = TestClientModelValidatorProvider.CreateDefaultProvider();

        // Act - 1
        var validators1 = cache.GetValidators(metadata, validatorProvider);

        // Assert - 1
        var attribute1 = Assert.Single(validators1.OfType <RequiredAttributeAdapter>()).Attribute;
        var attribute2 = Assert.Single(validators1.OfType <StringLengthAttributeAdapter>()).Attribute;

        Assert.Contains(attribute1, metadata.ValidatorMetadata); // Copied by provider
        Assert.Contains(attribute2, metadata.ValidatorMetadata); // Copied by provider

        // Act - 2
        var validators2 = cache.GetValidators(metadata, validatorProvider);

        // Assert - 2
        Assert.Same(validators1, validators2);

        Assert.Contains(validators1[0], validators2); // Cached
        Assert.Contains(validators1[1], validators2); // Cached
    }
Ejemplo n.º 2
0
    public void GetValidators_DoesNotCacheValidatorsWithIsReusableFalse()
    {
        // Arrange
        var cache             = new ClientValidatorCache();
        var metadata          = new TestModelMetadataProvider().GetMetadataForProperty(typeof(TypeWithProperty), "Property1");
        var validatorProvider = new ProviderWithNonReusableValidators();

        // Act - 1
        var validators1 = cache.GetValidators(metadata, validatorProvider);

        // Assert - 1
        var validator1 = Assert.Single(validators1.OfType <RequiredAttributeAdapter>());
        var validator2 = Assert.Single(validators1.OfType <StringLengthAttributeAdapter>());

        Assert.Contains(validator1.Attribute, metadata.ValidatorMetadata); // Copied by provider
        Assert.Contains(validator2.Attribute, metadata.ValidatorMetadata); // Copied by provider

        // Act - 2
        var validators2 = cache.GetValidators(metadata, validatorProvider);

        // Assert - 2
        Assert.NotSame(validators1, validators2);

        Assert.Same(validator1, Assert.Single(validators2.OfType <RequiredAttributeAdapter>()));        // cached
        Assert.NotSame(validator2, Assert.Single(validators2.OfType <StringLengthAttributeAdapter>())); // not cached
    }
    /// <summary>
    /// Initializes a new <see cref="DefaultValidationHtmlAttributeProvider"/> instance.
    /// </summary>
    /// <param name="optionsAccessor">The accessor for <see cref="MvcViewOptions"/>.</param>
    /// <param name="metadataProvider">The <see cref="IModelMetadataProvider"/>.</param>
    /// <param name="clientValidatorCache">The <see cref="ClientValidatorCache"/> that provides
    /// a list of <see cref="IClientModelValidator"/>s.</param>
    public DefaultValidationHtmlAttributeProvider(
        IOptions <MvcViewOptions> optionsAccessor,
        IModelMetadataProvider metadataProvider,
        ClientValidatorCache clientValidatorCache)
    {
        if (optionsAccessor == null)
        {
            throw new ArgumentNullException(nameof(optionsAccessor));
        }

        if (metadataProvider == null)
        {
            throw new ArgumentNullException(nameof(metadataProvider));
        }

        if (clientValidatorCache == null)
        {
            throw new ArgumentNullException(nameof(clientValidatorCache));
        }

        _clientValidatorCache = clientValidatorCache;
        _metadataProvider     = metadataProvider;

        var clientValidatorProviders = optionsAccessor.Value.ClientModelValidatorProviders;

        _clientModelValidatorProvider = new CompositeClientModelValidatorProvider(clientValidatorProviders);
    }
Ejemplo n.º 4
0
 public CustomValidationHtmlAttributeProvider(IOptions <MvcViewOptions> optionsAccessor, IModelMetadataProvider metadataProvider, ClientValidatorCache clientValidatorCache)
     : base(optionsAccessor, metadataProvider, clientValidatorCache)
 {
     _optionsAccessor      = optionsAccessor;
     _metadataProvider     = metadataProvider;
     _clientValidatorCache = clientValidatorCache;
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Initializes a new <see cref="DefaultValidationHtmlAttributeProvider"/> instance.
        /// </summary>
        /// <param name="optionsAccessor">The accessor for <see cref="MvcViewOptions"/>.</param>
        /// <param name="metadataProvider">The <see cref="IModelMetadataProvider"/>.</param>
        /// <param name="clientValidatorCache">The <see cref="ClientValidatorCache"/> that provides
        /// a list of <see cref="IClientModelValidator"/>s.</param>
        public DefaultValidationHtmlAttributeProvider(
            IOptions <MvcViewOptions> optionsAccessor,
            IModelMetadataProvider metadataProvider,
#pragma warning disable PUB0001 // Pubternal type in public API
            ClientValidatorCache clientValidatorCache
#pragma warning restore PUB0001
            )
        {
            if (optionsAccessor == null)
            {
                throw new ArgumentNullException(nameof(optionsAccessor));
            }

            if (metadataProvider == null)
            {
                throw new ArgumentNullException(nameof(metadataProvider));
            }

            if (clientValidatorCache == null)
            {
                throw new ArgumentNullException(nameof(clientValidatorCache));
            }

            _clientValidatorCache = clientValidatorCache;
            _metadataProvider     = metadataProvider;

            var clientValidatorProviders = optionsAccessor.Value.ClientModelValidatorProviders;

            _clientModelValidatorProvider = new CompositeClientModelValidatorProvider(clientValidatorProviders);
        }
        public CustomValidationHtmlAttributeProvider(IOptions <MvcViewOptions> optionsAccessor, IModelMetadataProvider metadataProvider, ClientValidatorCache clientValidatorCache)
            : base(optionsAccessor, metadataProvider, clientValidatorCache)
        {
            _metadataProvider     = metadataProvider;
            _clientValidatorCache = clientValidatorCache;
            var clientValidatorProviders = optionsAccessor.Value.ClientModelValidatorProviders;

            _clientModelValidatorProvider = new CompositeClientModelValidatorProvider(clientValidatorProviders);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="modelMetadataProvider"></param>
        /// <param name="clientValidatorCache"></param>
        /// <param name="mvcViewOptions"></param>
        public ValidatorsPropertyProcessor(IModelMetadataProvider modelMetadataProvider,
                                           ClientValidatorCache clientValidatorCache,
                                           IOptions <MvcViewOptions> mvcViewOptions)
        {
            _modelMetadataProvider = modelMetadataProvider ?? throw new ArgumentNullException(nameof(modelMetadataProvider));
            // TODO: Even though ClientValidatorCache class is currently public, it's placed in namespace "Microsoft.AspNetCore.Mvc.Internal". Need to investigate if there is a better alternative.
            _clientValidatorCache = clientValidatorCache ?? throw new ArgumentNullException(nameof(clientValidatorCache));
            var clientValidatorProviders = mvcViewOptions?.Value?.ClientModelValidatorProviders ?? throw new ArgumentNullException(nameof(mvcViewOptions));

            _validatorProvider = new CompositeClientModelValidatorProvider(clientValidatorProviders);
        }
Ejemplo n.º 8
0
 public AbpValidationHtmlAttributeProvider(
     IOptions <MvcViewOptions> optionsAccessor,
     IModelMetadataProvider metadataProvider,
     ClientValidatorCache clientValidatorCache,
     IValidationAttributeAdapterProvider validationAttributeAdapterProvider,
     IStringLocalizerFactory stringLocalizerFactory,
     IStringLocalizer <AbpValidationResource> validationStringLocalizer)
     : base(
         optionsAccessor,
         metadataProvider,
         clientValidatorCache)
 {
     _metadataProvider = metadataProvider;
     _validationAttributeAdapterProvider = validationAttributeAdapterProvider;
     _stringLocalizerFactory             = stringLocalizerFactory;
     _validationStringLocalizer          = validationStringLocalizer;
 }
Ejemplo n.º 9
0
 public HtmlGeneratorHack(
     IAntiforgery antiforgery,
     IOptions <MvcViewOptions> optionsAccessor,
     IModelMetadataProvider metadataProvider,
     IUrlHelperFactory urlHelperFactory,
     HtmlEncoder htmlEncoder,
     ClientValidatorCache clientValidatorCache,
     ValidationHtmlAttributeProvider validationAttributeProvider)
     : base(
         antiforgery,
         optionsAccessor,
         metadataProvider,
         urlHelperFactory,
         htmlEncoder,
         clientValidatorCache,
         validationAttributeProvider)
 {
 }
Ejemplo n.º 10
0
    public void GetValidators_ReadsValidatorsFromProperty_IfRecordTypeDoesNotHaveCorrespondingParameter()
    {
        // Arrange
        var cache = new ClientValidatorCache();
        var modelMetadataProvider = new TestModelMetadataProvider();
        var metadata          = modelMetadataProvider.GetMetadataForType(typeof(TestRecordTypeWithProperty));
        var property          = metadata.Properties[nameof(TestRecordTypeWithProperty.Property2)];
        var validatorProvider = new ProviderWithNonReusableValidators();

        // Act
        var validators = cache.GetValidators(property, validatorProvider);

        // Assert
        var validator1 = Assert.Single(validators.OfType <RequiredAttributeAdapter>());
        var validator2 = Assert.Single(validators.OfType <StringLengthAttributeAdapter>());

        Assert.Contains(validator1.Attribute, property.ValidatorMetadata); // Copied by provider
        Assert.Contains(validator2.Attribute, property.ValidatorMetadata); // Copied by provider
    }
Ejemplo n.º 11
0
    public void GetValidators_ReadsValidatorsFromCorrespondingRecordTypeParameter()
    {
        // Arrange
        var cache = new ClientValidatorCache();
        var modelMetadataProvider = new TestModelMetadataProvider();
        var metadata          = modelMetadataProvider.GetMetadataForType(typeof(TestRecordType));
        var property          = metadata.Properties[nameof(TestRecordType.Property1)];
        var parameter         = metadata.BoundConstructor.BoundConstructorParameters.First(f => f.Name == nameof(TestRecordType.Property1));
        var validatorProvider = new ProviderWithNonReusableValidators();

        // Act
        var validators = cache.GetValidators(property, validatorProvider);

        // Assert
        var validator1 = Assert.Single(validators.OfType <RequiredAttributeAdapter>());
        var validator2 = Assert.Single(validators.OfType <StringLengthAttributeAdapter>());

        Assert.Contains(validator1.Attribute, parameter.ValidatorMetadata); // Copied by provider
        Assert.Contains(validator2.Attribute, parameter.ValidatorMetadata); // Copied by provider
    }
Ejemplo n.º 12
0
 public MyHtmlGenerator(IAntiforgery antiforgery, IOptions <MvcViewOptions> optionsAccessor, IModelMetadataProvider metadataProvider, IUrlHelperFactory urlHelperFactory, HtmlEncoder htmlEncoder, ClientValidatorCache clientValidatorCache) : base(antiforgery, optionsAccessor, metadataProvider, urlHelperFactory, htmlEncoder, clientValidatorCache)
 {
 }