public void GetMetadataForPropertiesCreatesMetadataForAllPropertiesOnModelWithPropertyValues() { // Arrange PropertyModel model = new PropertyModel { LocalAttributes = 42, MetadataAttributes = "hello", MixedAttributes = 21.12 }; TestableAssociatedMetadataProvider provider = new TestableAssociatedMetadataProvider(); // Act provider.GetMetadataForProperties(model, typeof(PropertyModel)).ToList(); // Call ToList() to force the lazy evaluation to evaluate // Assert CreateMetadataPrototypeParams local = provider.CreateMetadataPrototypeLog.Single(m => m.ContainerType == typeof(PropertyModel) && m.PropertyName == "LocalAttributes"); Assert.Equal(typeof(int), local.ModelType); Assert.True(local.Attributes.Any(a => a is RequiredAttribute)); CreateMetadataPrototypeParams metadata = provider.CreateMetadataPrototypeLog.Single(m => m.ContainerType == typeof(PropertyModel) && m.PropertyName == "MetadataAttributes"); Assert.Equal(typeof(string), metadata.ModelType); Assert.True(metadata.Attributes.Any(a => a is RangeAttribute)); CreateMetadataPrototypeParams mixed = provider.CreateMetadataPrototypeLog.Single(m => m.ContainerType == typeof(PropertyModel) && m.PropertyName == "MixedAttributes"); Assert.Equal(typeof(double), mixed.ModelType); Assert.True(mixed.Attributes.Any(a => a is RequiredAttribute)); Assert.True(mixed.Attributes.Any(a => a is RangeAttribute)); }
public void GetMetadataForTypeIncludesAttributesOnType() { TestableAssociatedMetadataProvider provider = new TestableAssociatedMetadataProvider(); ModelMetadata metadata = new ModelMetadata( provider, null, null, typeof(TypeModel), null ); provider.CreateMetadataFromPrototypeReturnValue = metadata; // Act ModelMetadata result = provider.GetMetadataForType(null, typeof(TypeModel)); // Assert Assert.Same(metadata, result); CreateMetadataPrototypeParams parms = Assert.Single( provider.CreateMetadataPrototypeLog, p => p.ModelType == typeof(TypeModel) ); Assert.Contains(parms.Attributes, a => a is ReadOnlyAttribute); }
public void GetMetadataForPropertyWithMixedAttributes() { // Arrange TestableAssociatedMetadataProvider provider = new TestableAssociatedMetadataProvider(); ModelMetadata metadata = new ModelMetadata( provider, typeof(PropertyModel), null, typeof(double), "MixedAttributes" ); provider.CreateMetadataFromPrototypeReturnValue = metadata; // Act ModelMetadata result = provider.GetMetadataForProperty( null, typeof(PropertyModel), "MixedAttributes" ); // Assert Assert.Same(metadata, result); CreateMetadataPrototypeParams parms = Assert.Single( provider.CreateMetadataPrototypeLog, p => p.PropertyName == "MixedAttributes" ); Assert.Contains(parms.Attributes, a => a is RequiredAttribute); Assert.Contains(parms.Attributes, a => a is RangeAttribute); }
public void GetMetadataForPropertyWithMetadataAttributes() { // Arrange TestableAssociatedMetadataProvider provider = new TestableAssociatedMetadataProvider(); ModelMetadata metadata = new ModelMetadata(provider, typeof(PropertyModel), null, typeof(string), "MetadataAttributes"); provider.CreateMetadataFromPrototypeReturnValue = metadata; // Act ModelMetadata result = provider.GetMetadataForProperty(null, typeof(PropertyModel), "MetadataAttributes"); // Assert Assert.Same(metadata, result); CreateMetadataPrototypeParams parms = provider.CreateMetadataPrototypeLog.Single(p => p.PropertyName == "MetadataAttributes"); Assert.True(parms.Attributes.Any(a => a is RangeAttribute)); }