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 }
public void GetValidators_DoesNotCacheValidatorsWithIsReusableFalse() { // Arrange var cache = new ValidatorCache(); 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.IsType <DataAnnotationsModelValidator>(validators1[0]); var validator2 = Assert.IsType <DataAnnotationsModelValidator>(validators1[1]); 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); var requiredValidator = Assert.Single(validators2.Where(v => (v as DataAnnotationsModelValidator).Attribute is RequiredAttribute)); Assert.Contains(requiredValidator, validators1); // cached var stringLengthValidator = Assert.Single(validators2.Where(v => (v as DataAnnotationsModelValidator).Attribute is StringLengthAttribute)); Assert.DoesNotContain(stringLengthValidator, validators1); // not cached }
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 }
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 }