public void Validate_DoesNotUseOverridden_GetHashCodeOrEquals()
        {
            // Arrange
            ModelMetadataProvider     metadataProvider = new DataAnnotationsModelMetadataProvider();
            HttpActionContext         actionContext    = ContextUtil.CreateActionContext();
            DefaultBodyModelValidator validator        = new DefaultBodyModelValidator();
            object instance = new[]
            {
                new TypeThatOverridesEquals {
                    Funny = "hehe"
                },
                new TypeThatOverridesEquals {
                    Funny = "hehe"
                }
            };

            // Act & Assert
            Assert.DoesNotThrow(
                () =>
                validator.Validate(
                    instance,
                    typeof(TypeThatOverridesEquals[]),
                    metadataProvider,
                    actionContext,
                    String.Empty
                    )
                );
        }
Esempio n. 2
0
        public void GetModelBindingContext_UsesBindAttributeOnType_IfNoBindAttributeOnParameter_ForPrefix()
        {
            // Arrange
            var type          = typeof(ControllerActionArgumentBinderTests);
            var methodInfo    = type.GetMethod("ParameterWithNoBindAttribute");
            var actionContext = new ActionContext(new RouteContext(Mock.Of <HttpContext>()),
                                                  Mock.Of <ActionDescriptor>());

            var metadataProvider = new DataAnnotationsModelMetadataProvider();
            var modelMetadata    = metadataProvider.GetMetadataForParameter(modelAccessor: null,
                                                                            methodInfo: methodInfo,
                                                                            parameterName: "parameter");

            var actionBindingContext = new ActionBindingContext(actionContext,
                                                                Mock.Of <IModelMetadataProvider>(),
                                                                Mock.Of <IModelBinder>(),
                                                                Mock.Of <IValueProvider>(),
                                                                Mock.Of <IInputFormatterSelector>(),
                                                                Mock.Of <IModelValidatorProvider>());
            // Act
            var context = DefaultControllerActionArgumentBinder.GetModelBindingContext(
                modelMetadata, actionBindingContext, Mock.Of <OperationBindingContext>());

            // Assert
            Assert.Equal("TypePrefix", context.ModelName);
        }
        public void MultipleValidationErrorsOnSameMemberReported()
        {
            // Arrange
            ModelMetadataProvider metadataProvider = new DataAnnotationsModelMetadataProvider();
            HttpActionContext     actionContext    = ContextUtil.CreateActionContext();
            object model = new Address()
            {
                Street = "Microsoft Way"
            };

            // Act
            Assert.DoesNotThrow(
                () =>
                new DefaultBodyModelValidator().Validate(
                    model,
                    typeof(Address),
                    metadataProvider,
                    actionContext,
                    string.Empty
                    )
                );

            // Assert
            Assert.Contains("Street", actionContext.ModelState.Keys);
            ModelState streetState = actionContext.ModelState["Street"];

            Assert.Equal(2, streetState.Errors.Count);
        }
        public void ExcludedPropertyTypes_AreShallowValidated()
        {
            // Arrange
            ModelMetadataProvider            metadataProvider = new DataAnnotationsModelMetadataProvider();
            HttpActionContext                actionContext    = ContextUtil.CreateActionContext();
            Mock <DefaultBodyModelValidator> mockValidator    = new Mock <DefaultBodyModelValidator>();

            mockValidator.CallBase = true;
            mockValidator
            .Setup(validator => validator.ShouldValidateType(typeof(Person)))
            .Returns(false);

            // Act
            mockValidator.Object.Validate(
                new Pet(),
                typeof(Pet),
                metadataProvider,
                actionContext,
                string.Empty
                );

            // Assert
            Assert.False(actionContext.ModelState.IsValid);
            ModelState modelState = actionContext.ModelState["Owner"];

            Assert.Single(modelState.Errors);
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="CustomMetadata"/> class.
        /// </summary>
        /// <param name="provider">The provider.</param>
        /// <param name="containerType">Type of the container.</param>
        /// <param name="modelAccessor">The model accessor.</param>
        /// <param name="modelType">Type of the model.</param>
        /// <param name="propertyName">Name of the property.</param>
        /// <param name="displayColumnAttribute">The display column attribute.</param>
        /// <param name="attributes">The attributes.</param>
        public CustomMetadata(DataAnnotationsModelMetadataProvider provider, Type containerType, Func <object> modelAccessor, Type modelType, string propertyName, DisplayColumnAttribute displayColumnAttribute, IEnumerable <Attribute> attributes)
            : base(provider, containerType, modelAccessor, modelType, propertyName, displayColumnAttribute)
        {
            var descAttr = attributes.OfType <DescriptionAttribute>().SingleOrDefault();

            _description = descAttr != null ? descAttr.Description : "";
        }
Esempio n. 6
0
        public override string ProcessTag(NDjango.Interfaces.IContext context, string content, object[] parms)
        {
            var htmlHelperOption = context.tryfind("Html");

            if (htmlHelperOption == null)
            {
                return("");
            }

            var htmlHelper = (HtmlHelper)htmlHelperOption.Value;

            var metadata_provider = new DataAnnotationsModelMetadataProvider();

            if (context.ModelType == null)
            {
                htmlHelper.ViewData.ModelMetadata = null;
            }
            else
            {
                var model = Activator.CreateInstance(context.ModelType.Value);
                htmlHelper.ViewData.ModelMetadata = metadata_provider.GetMetadataForType(() => model, context.ModelType.Value);
            }

            var result = htmlHelper.Label(parms[0].ToString());

            if (result == null)
            {
                return("");
            }
            else
            {
                return(result.ToHtmlString());
            }
        }
Esempio n. 7
0
        public virtual ActionResult PropertyItemHtml(object data, string propertyPath, int depth, string pathPrefix)
        {
            ViewData["propertyPath"] = (pathPrefix ?? "") + propertyPath;
            ViewData["addDepth"]     = depth - 1;
            string parentPath   = propertyPath.Contains(".") ? propertyPath.UpToLast(".") : "";
            string propertyName = (propertyPath.Contains(".") ? propertyPath.LastAfter(".") : propertyPath).UpTo("[");
            Type   parentType   = ReflectionX.GetPropertyTypeByPath(data.GetType(), parentPath);
            IList  list         = ReflectionX.GetPropertyValueByPath(data, propertyPath, true) as IList;
            var    listProp     = ReflectionX.GetPropertyByPath(data.GetType(), propertyPath);
            Type   listType     = listProp.PropertyType;

            if (listType.GetType().IsArray)
            {
                list    = (IList)Array.CreateInstance(ReflectionX.ElementType(listType), 1);
                list[0] = CreateInstance(listType.GetElementType());
            }
            else
            {
                list = (IList)Activator.CreateInstance(listType);
                list.Add(CreateInstance(ReflectionX.ElementType(listType)));
            }

            ViewData["list"] = list;
            var metadata = new DataAnnotationsModelMetadataProvider().GetMetadataForProperty(null, parentType, propertyName);

            ViewData["CollectionAdditionalValues"] = metadata.AdditionalValues;

            RouteData.DataTokens.Add("CancelProcessingHtml", true);
            return(PartialView(ConfigHelper.GetViewPath("LyniconPropertyItem.cshtml"), data));
        }
Esempio n. 8
0
        public async Task TryUpdateModel_UsesModelTypeNameIfSpecified()
        {
            // Arrange
            var modelName = "mymodel";

            var metadataProvider = new DataAnnotationsModelMetadataProvider();
            var valueProvider    = Mock.Of <IValueProvider>();
            var binder           = new Mock <IModelBinder>();

            binder.Setup(b => b.BindModelAsync(It.IsAny <ModelBindingContext>()))
            .Callback((ModelBindingContext context) =>
            {
                Assert.Equal(modelName, context.ModelName);
                Assert.Same(valueProvider, context.ValueProvider);

                // Include and exclude should be null, resulting in property
                // being included.
                Assert.True(context.PropertyFilter(context, "Property1"));
                Assert.True(context.PropertyFilter(context, "Property2"));
            })
            .Returns(Task.FromResult(false))
            .Verifiable();

            var controller = GetController(binder.Object, valueProvider);
            var model      = new MyModel();

            // Act
            var result = await controller.TryUpdateModelAsync(model, modelName);

            // Assert
            binder.Verify();
        }
        public void ExpectedValidationErrorsRaised(object model, Type type, Dictionary <string, string> expectedErrors)
        {
            // Arrange
            ModelMetadataProvider metadataProvider = new DataAnnotationsModelMetadataProvider();
            HttpActionContext     actionContext    = ContextUtil.CreateActionContext();

            // Act
            Assert.DoesNotThrow(() =>
                                new DefaultBodyModelValidator().Validate(model, type, metadataProvider, actionContext, string.Empty)
                                );

            // Assert
            Dictionary <string, string> actualErrors = new Dictionary <string, string>();

            foreach (KeyValuePair <string, ModelState> keyStatePair in actionContext.ModelState)
            {
                foreach (ModelError error in keyStatePair.Value.Errors)
                {
                    actualErrors.Add(keyStatePair.Key, error.ErrorMessage);
                }
            }

            Assert.Equal(expectedErrors.Count, actualErrors.Count);
            foreach (KeyValuePair <string, string> keyErrorPair in expectedErrors)
            {
                Assert.Contains(keyErrorPair.Key, actualErrors.Keys);
                Assert.Equal(keyErrorPair.Value, actualErrors[keyErrorPair.Key]);
            }
        }
            public void ReturnsCharacters()
            {
                // Arrange
                var characters = new[] { "cadence" };
                var binder     = new CharactersBinder(characters);
                HttpActionContext actionContext = null;
                var modelName         = "myModelName";
                var mockValueProvider = new Mock <IValueProvider>();

                mockValueProvider.Setup(v => v.GetValue("myModelName")).ReturnsValueProviderResult("cadence");
                var valueProvider  = mockValueProvider.Object;
                var data           = new DataAnnotationsModelMetadataProvider();
                var modelMetadata  = data.GetMetadataForType(null, typeof(Characters));
                var bindingContext = new ModelBindingContext
                {
                    ModelName     = modelName,
                    ValueProvider = valueProvider,
                    ModelMetadata = modelMetadata,
                };

                // Act
                binder.BindModel(actionContext, bindingContext);

                // Assert
                var model = bindingContext.Model;

                Assert.IsAssignableFrom <Characters>(model);
            }
        private IReadOnlyList <ApiDescription> GetApiDescriptions(
            ActionDescriptor action,
            List <MockFormatter> formatters)
        {
            var context = new ApiDescriptionProviderContext(new ActionDescriptor[] { action });

            var formattersProvider = new Mock <IOutputFormattersProvider>(MockBehavior.Strict);

            formattersProvider.Setup(fp => fp.OutputFormatters).Returns(formatters);

            var constraintResolver = new Mock <IInlineConstraintResolver>();

            constraintResolver.Setup(c => c.ResolveConstraint("int"))
            .Returns(new IntRouteConstraint());

            var modelMetadataProvider = new DataAnnotationsModelMetadataProvider();

            var provider = new DefaultApiDescriptionProvider(
                formattersProvider.Object,
                constraintResolver.Object,
                modelMetadataProvider);

            provider.Invoke(context, () => { });
            return(context.Results);
        }
Esempio n. 12
0
        public void PropertiesListGetsResetWhenModelGetsReset()
        { // Dev10 Bug #923263
            // Arrange
            var provider = new DataAnnotationsModelMetadataProvider();
            var metadata = new ModelMetadata(
                provider,
                null,
                () => new Class1(),
                typeof(Class1),
                null
                );

            // Act
            ModelMetadata[] originalProps = metadata.Properties.ToArray();
            metadata.Model = new Class2();
            ModelMetadata[] newProps = metadata.Properties.ToArray();

            // Assert
            ModelMetadata originalProp = Assert.Single(originalProps);

            Assert.Equal(typeof(string), originalProp.ModelType);
            Assert.Equal("Prop1", originalProp.PropertyName);
            ModelMetadata newProp = Assert.Single(newProps);

            Assert.Equal(typeof(int), newProp.ModelType);
            Assert.Equal("Prop2", newProp.PropertyName);
        }
Esempio n. 13
0
        public void ReflectionBuilderTest()
        {
            var reflectionBuilder = new ReflectionContentManagementBuilder();

            var module = reflectionBuilder.BuildModuleFromAssembly(typeof(ContactInputViewModel).Assembly);

            Assert.That(module.Name, Is.EqualTo("ToileDeFond.Tests.Unit.ContentManagement.Reflection"));
            Assert.That(module.ContentTypes.Count(), Is.EqualTo(1));

            var contentType = module.ContentTypes.First();

            Assert.That(contentType.Name, Is.EqualTo("ContactInputViewModel"));
            Assert.That(contentType.Properties.Count(), Is.EqualTo(5));

            IContentTypeProperty nameProperty;

            contentType.TryGetProperty("Name", out nameProperty);
            Assert.That(nameProperty, Is.Not.Null);

            var dataAnnotationsModelMetadataProvider = new DataAnnotationsModelMetadataProvider();

            var contentModelmetadataBasedOnDataAnnotationsModelMetadataProvider = dataAnnotationsModelMetadataProvider
                                                                                  .GetMetadataForType(() => new ContactInputViewModel(), typeof(ContactInputViewModel));

            var nameMedata = contentModelmetadataBasedOnDataAnnotationsModelMetadataProvider.Properties.Single(p => p.DisplayName == "Nom");

            //TODO: Tester l'overriding du metadata
            //TODO: Tester l'ensemble des propriétés metadata

            Assert.That(nameMedata, Is.Not.Null);
            //Assert.That(nameMedata.DisplayName, Is.EqualTo(nameProperty.DisplayName));
        }
Esempio n. 14
0
        public void GetModelBindingContext_ModelBindingContextIsNotSet_ForTypes(
            string actionMethodName, bool expectedFallToEmptyPrefix, string expectedModelName)
        {
            // Arrange
            var type       = typeof(ControllerActionArgumentBinderTests);
            var methodInfo = type.GetMethod(actionMethodName);

            var actionContext = new ActionContext(
                new RouteContext(Mock.Of <HttpContext>()),
                Mock.Of <ActionDescriptor>());

            var metadataProvider = new DataAnnotationsModelMetadataProvider();
            var modelMetadata    = metadataProvider.GetMetadataForParameter(modelAccessor: null,
                                                                            methodInfo: methodInfo,
                                                                            parameterName: "parameter1");

            // Act
            var context = DefaultControllerActionArgumentBinder.GetModelBindingContext(
                modelMetadata,
                actionContext,
                Mock.Of <OperationBindingContext>());

            // Assert
            Assert.Equal(expectedFallToEmptyPrefix, context.FallbackToEmptyPrefix);
            Assert.Equal(expectedModelName, context.ModelName);
        }
Esempio n. 15
0
        public async Task ProcessAsync_GeneratesExpectedOutput(
            object model,
            Type containerType,
            Func <object> modelAccessor,
            NameAndId nameAndId,
            string ignored)
        {
            // Arrange
            var originalAttributes = new Dictionary <string, string>
            {
                { "class", "form-control" },
            };
            var originalContent = "original content";
            var originalTagName = "not-select";

            var expectedAttributes = new Dictionary <string, string>(originalAttributes)
            {
                { "id", nameAndId.Id },
                { "name", nameAndId.Name },
                { "valid", "from validation attributes" },
            };
            var expectedContent = originalContent;
            var expectedTagName = "select";

            var metadataProvider = new DataAnnotationsModelMetadataProvider();

            // Property name is either nameof(Model.Text) or nameof(NestedModel.Text).
            var metadata        = metadataProvider.GetMetadataForProperty(modelAccessor, containerType, propertyName: "Text");
            var modelExpression = new ModelExpression(nameAndId.Name, metadata);

            var tagHelperContext = new TagHelperContext(new Dictionary <string, object>());
            var output           = new TagHelperOutput(originalTagName, originalAttributes, expectedContent)
            {
                SelfClosing = true,
            };

            var htmlGenerator = new TestableHtmlGenerator(metadataProvider)
            {
                ValidationAttributes =
                {
                    { "valid", "from validation attributes" },
                }
            };
            var viewContext = TestableHtmlGenerator.GetViewContext(model, htmlGenerator, metadataProvider);
            var tagHelper   = new SelectTagHelper
            {
                For         = modelExpression,
                Generator   = htmlGenerator,
                ViewContext = viewContext,
            };

            // Act
            await tagHelper.ProcessAsync(tagHelperContext, output);

            // Assert
            Assert.Equal(expectedAttributes, output.Attributes);
            Assert.Equal(expectedContent, output.Content);
            Assert.False(output.SelfClosing);
            Assert.Equal(expectedTagName, output.TagName);
        }
Esempio n. 16
0
        protected ModelMetadata CreateMetaData(Type type)
        {
            var meta = new DataAnnotationsModelMetadataProvider();

            return(meta.GetMetadataForType(null, type));
            //return new ModelMetadata(new EmptyModelMetadataProvider(), null, null, type, null);
        }
            public void ReturnsLeaderboardIdParams()
            {
                // Arrange
                var binder = new LeaderboardIdParamsBinder();
                HttpActionContext actionContext = null;
                var modelName         = "myModelName";
                var mockValueProvider = new Mock <IValueProvider>();

                mockValueProvider.Setup(v => v.GetValue(modelName)).ReturnsValueProviderResult("2047616,2047493");
                var valueProvider  = mockValueProvider.Object;
                var data           = new DataAnnotationsModelMetadataProvider();
                var modelMetadata  = data.GetMetadataForType(null, typeof(LeaderboardIdParams));
                var bindingContext = new ModelBindingContext
                {
                    ModelName     = modelName,
                    ValueProvider = valueProvider,
                    ModelMetadata = modelMetadata,
                };

                // Act
                binder.BindModel(actionContext, bindingContext);

                // Assert
                var model = bindingContext.Model;

                Assert.IsAssignableFrom <LeaderboardIdParams>(model);
            }
Esempio n. 18
0
        private static ModelMetadata GetMetadataForType(Type t)
        {
            DataAnnotationsModelMetadataProvider metadataProvider =
                new DataAnnotationsModelMetadataProvider();

            return(metadataProvider.GetMetadataForType(null, t));
        }
Esempio n. 19
0
        private static ModelMetadata GetMetadataForObject(object o)
        {
            DataAnnotationsModelMetadataProvider metadataProvider =
                new DataAnnotationsModelMetadataProvider();

            return(metadataProvider.GetMetadataForType(() => o, o.GetType()));
        }
        public void GetValidators_ReturnsDateValidator()
        {
            ModelMetadata metadata = new DataAnnotationsModelMetadataProvider().GetMetadataForProperty(null, typeof(ProviderModel), "Date");

            IEnumerable <Type> actual   = provider.GetValidators(metadata, new ControllerContext()).Select(validator => validator.GetType());
            IEnumerable <Type> expected = new[] { typeof(DateValidator) };

            Assert.Equal(expected, actual);
        }
        public void GetValidators_GetsNumericValidator()
        {
            ModelMetadata metadata = new DataAnnotationsModelMetadataProvider().GetMetadataForProperty(null, typeof(ProviderModel), "Numeric");

            IEnumerable actual   = provider.GetValidators(metadata, new ControllerContext()).Select(validator => validator.GetType());
            IEnumerable expected = new[] { typeof(NumberValidator) };

            CollectionAssert.AreEqual(expected, actual);
        }
Esempio n. 22
0
        public void DisplayFormaAttributetSetsNullDisplayText()
        {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.IsNull(provider.GetMetadataForProperty(null, typeof(DisplayFormatModel), "NoAttribute").NullDisplayText);
            Assert.AreEqual("(null value)", provider.GetMetadataForProperty(null, typeof(DisplayFormatModel), "NullDisplayText").NullDisplayText);
        }
Esempio n. 23
0
        public void DisplayNameAttributeSetsDisplayName()
        {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.IsNull(provider.GetMetadataForProperty(null, typeof(DisplayNameAttributeModel), "Without").DisplayName);
            Assert.AreEqual("Custom property name", provider.GetMetadataForProperty(null, typeof(DisplayNameAttributeModel), "With").DisplayName);
        }
Esempio n. 24
0
        public void RegisterAdapters_RegistersAdapter(String property, Type adapter)
        {
            DataAnnotationsModelValidatorProvider annotations = new DataAnnotationsModelValidatorProvider();
            ModelMetadata metadata = new DataAnnotationsModelMetadataProvider()
                                     .GetMetadataForProperty(null, typeof(AdaptersModel), property);

            application.RegisterAdapters();

            Assert.Single(annotations.GetValidators(metadata, new ControllerContext()), validator => validator.GetType() == adapter);
        }
Esempio n. 25
0
        public void ReadOnlyAttributeSetsIsReadOnly()
        {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.IsFalse(provider.GetMetadataForProperty(null, typeof(IsReadOnlyModel), "NoAttribute").IsReadOnly);
            Assert.IsTrue(provider.GetMetadataForProperty(null, typeof(IsReadOnlyModel), "ReadOnlyTrue").IsReadOnly);
            Assert.IsFalse(provider.GetMetadataForProperty(null, typeof(IsReadOnlyModel), "ReadOnlyFalse").IsReadOnly);
        }
Esempio n. 26
0
        public void DisplayFormatAttributeSetEditFormatString()
        {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.IsNull(provider.GetMetadataForProperty(null, typeof(DisplayFormatModel), "NoAttribute").EditFormatString);
            Assert.IsNull(provider.GetMetadataForProperty(null, typeof(DisplayFormatModel), "DisplayFormatString").EditFormatString);
            Assert.AreEqual("Data {0} format", provider.GetMetadataForProperty(null, typeof(DisplayFormatModel), "DisplayAndEditFormatString").EditFormatString);
        }
Esempio n. 27
0
        public void DisplayFormatAttributeSetsConvertEmptyStringToNull()
        {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.IsTrue(provider.GetMetadataForProperty(null, typeof(DisplayFormatModel), "NoAttribute").ConvertEmptyStringToNull);
            Assert.IsTrue(provider.GetMetadataForProperty(null, typeof(DisplayFormatModel), "ConvertEmptyStringToNullTrue").ConvertEmptyStringToNull);
            Assert.IsFalse(provider.GetMetadataForProperty(null, typeof(DisplayFormatModel), "ConvertEmptyStringToNullFalse").ConvertEmptyStringToNull);
        }
Esempio n. 28
0
        public void IsRequiredTests()
        {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.IsTrue(provider.GetMetadataForProperty(null, typeof(IsRequiredModel), "NonNullableWithout").IsRequired);
            Assert.IsFalse(provider.GetMetadataForProperty(null, typeof(IsRequiredModel), "NullableWithout").IsRequired);
            Assert.IsTrue(provider.GetMetadataForProperty(null, typeof(IsRequiredModel), "NullableWith").IsRequired);
        }
Esempio n. 29
0
        public void SimpleDisplayNameWithUnknownDisplayColumnThrows()
        {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            ExceptionHelper.ExpectInvalidOperationException(
                () => provider.GetMetadataForType(() => new UnknownDisplayColumnModel(), typeof(UnknownDisplayColumnModel)).SimpleDisplayText,
                "System.Web.Mvc.Test.DataAnnotationsModelMetadataProviderTest+UnknownDisplayColumnModel has a DisplayColumn attribute for NoPropertyWithThisName, but property NoPropertyWithThisName does not exist.");
        }
Esempio n. 30
0
        public void ScaffoldColumnAttributeSetsShowForEdit()
        {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.IsTrue(provider.GetMetadataForProperty(null, typeof(ScaffoldColumnModel), "NoAttribute").ShowForEdit);
            Assert.IsTrue(provider.GetMetadataForProperty(null, typeof(ScaffoldColumnModel), "ScaffoldColumnTrue").ShowForEdit);
            Assert.IsFalse(provider.GetMetadataForProperty(null, typeof(ScaffoldColumnModel), "ScaffoldColumnFalse").ShowForEdit);
        }
        public void ReadOnlyTests()
        {
            // Arrange
            var provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.False(provider.GetMetadataForProperty(null, typeof(ReadOnlyModel), "NoAttributes").IsReadOnly);
            Assert.True(provider.GetMetadataForProperty(null, typeof(ReadOnlyModel), "ReadOnlyAttribute").IsReadOnly);
            Assert.True(provider.GetMetadataForProperty(null, typeof(ReadOnlyModel), "EditableAttribute").IsReadOnly);
            Assert.False(provider.GetMetadataForProperty(null, typeof(ReadOnlyModel), "BothAttributes").IsReadOnly);
        }
        public void ReadOnlyTests()
        {
            // Arrange
            var provider = new DataAnnotationsModelMetadataProvider();

            IModelFlattener test = new DefaultModelFlattener();
            var model = new DisplayModel();
            var result = test.Flatten(model, model.GetType(), provider, string.Empty);

            Assert.NotNull(result);
        }
        public void GetMetadataForTypeSetsTypeWithNullPropertyName() {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act
            ModelMetadata result = provider.GetMetadataForType(null, typeof(string));

            // Assert
            Assert.AreEqual(typeof(string), result.ModelType);
            Assert.IsNull(result.PropertyName);
        }
        public void DataAnnotationsModelMetadataProvider_ReadsScaffoldColumnAttribute_ForShowForEdit()
        {
            // Arrange
            var type = typeof(ScaffoldColumnModel);
            var provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.True(provider.GetMetadataForProperty(null, type, "NoAttribute").ShowForEdit);
            Assert.True(provider.GetMetadataForProperty(null, type, "ScaffoldColumnTrue").ShowForEdit);
            Assert.False(provider.GetMetadataForProperty(null, type, "ScaffoldColumnFalse").ShowForEdit);
        }
        public void ReadOnlyTests(string propertyName, bool expected)
        {
            // Arrange
            var provider = new DataAnnotationsModelMetadataProvider();

            // Act
            var actual = provider.GetMetadataForProperty(null, typeof(ReadOnlyModel), propertyName).IsReadOnly;

            // Assert
            Assert.Equal(expected, actual);
        }
        public void GetMetadataForPropertySetsTypeAndPropertyName() {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act
            ModelMetadata result = provider.GetMetadataForProperty(null, typeof(string), "Length");

            // Assert
            Assert.AreEqual(typeof(int), result.ModelType);
            Assert.AreEqual("Length", result.PropertyName);
        }
        public void GetMetadataForPropertiesSetTypesAndPropertyNames() {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act
            IEnumerable<ModelMetadata> result = provider.GetMetadataForProperties("foo", typeof(string));

            // Assert
            Assert.IsTrue(result.Any(m => m.ModelType == typeof(int)
                                          && m.PropertyName == "Length"
                                          && (int)m.Model == 3));
        }
Esempio n. 38
0
        public void ClientRulesWithCompareAttribute_ErrorMessageUsesPropertyName()
        {
            // Arrange
            var metadataProvider = new DataAnnotationsModelMetadataProvider();
            var metadata = metadataProvider.GetMetadataForProperty(() => null, typeof(PropertyNameModel), "MyProperty");
            var attribute = new CompareAttribute("OtherProperty");
            var context = new ClientModelValidationContext(metadata, metadataProvider);
            var adapter = new CompareAttributeAdapter(attribute);

            // Act
            var rules = adapter.GetClientValidationRules(context);

            // Assert
            var rule = Assert.Single(rules);
            Assert.Equal("'MyProperty' and 'OtherProperty' do not match.", rule.ErrorMessage);
        }
Esempio n. 39
0
        public void GetClientValidationRules_ReturnsValidationParameters()
        {
            // Arrange
            var provider = new DataAnnotationsModelMetadataProvider();
            var metadata = provider.GetMetadataForProperty(() => null, typeof(string), "Length");
            var attribute = new RequiredAttribute();
            var adapter = new RequiredAttributeAdapter(attribute);
            var context = new ClientModelValidationContext(metadata, provider);

            // Act
            var rules = adapter.GetClientValidationRules(context);

            // Assert
            var rule = Assert.Single(rules);
            Assert.Equal("required", rule.ValidationType);
            Assert.Empty(rule.ValidationParameters);
            Assert.Equal("The Length field is required.", rule.ErrorMessage);
        }
Esempio n. 40
0
        public void ClientRulesWithMaxLengthAttribute()
        {
            // Arrange
            var provider = new DataAnnotationsModelMetadataProvider();
            var metadata = provider.GetMetadataForProperty(() => null, typeof(string), "Length");
            var attribute = new MaxLengthAttribute(10);
            var adapter = new MaxLengthAttributeAdapter(attribute);
            var context = new ClientModelValidationContext(metadata, provider);

            // Act
            var rules = adapter.GetClientValidationRules(context);

            // Assert
            var rule = Assert.Single(rules);
            Assert.Equal("maxlength", rule.ValidationType);
            Assert.Equal(1, rule.ValidationParameters.Count);
            Assert.Equal(10, rule.ValidationParameters["max"]);
            Assert.Equal("The field Length must be a string or array type with a maximum length of '10'.", rule.ErrorMessage);
        }
        public void HiddenAttributeSetsTemplateHintAndHideSurroundingHtml() {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            ModelMetadata noAttributeMetadata = provider.GetMetadataForProperty(null, typeof(HiddenModel), "NoAttribute");
            Assert.IsNull(noAttributeMetadata.TemplateHint);
            Assert.IsFalse(noAttributeMetadata.HideSurroundingHtml);

            ModelMetadata defaultHiddenMetadata = provider.GetMetadataForProperty(null, typeof(HiddenModel), "DefaultHidden");
            Assert.AreEqual("HiddenInput", defaultHiddenMetadata.TemplateHint);
            Assert.IsFalse(defaultHiddenMetadata.HideSurroundingHtml);

            ModelMetadata hiddenWithDisplayValueFalseMetadata = provider.GetMetadataForProperty(null, typeof(HiddenModel), "HiddenWithDisplayValueFalse");
            Assert.AreEqual("HiddenInput", hiddenWithDisplayValueFalseMetadata.TemplateHint);
            Assert.IsTrue(hiddenWithDisplayValueFalseMetadata.HideSurroundingHtml);

            // [UIHint] overrides the template hint from [Hidden]
            Assert.AreEqual("CustomUIHint", provider.GetMetadataForProperty(null, typeof(HiddenModel), "HiddenAndUIHint").TemplateHint);
        }
Esempio n. 42
0
        public void SettingViewData_AlsoUpdatesViewBag()
        {
            // Arrange
            var metadataProvider = new DataAnnotationsModelMetadataProvider();
            var controller = new Controller();
            var originalViewData = controller.ViewData = new ViewDataDictionary<object>(metadataProvider);
            var replacementViewData = new ViewDataDictionary<object>(metadataProvider);

            // Act
            controller.ViewBag.Hello = "goodbye";
            controller.ViewData = replacementViewData;
            controller.ViewBag.Another = "property";

            // Assert
            Assert.NotSame(originalViewData, controller.ViewData);
            Assert.Same(replacementViewData, controller.ViewData);
            Assert.Null(controller.ViewBag.Hello);
            Assert.Equal("property", controller.ViewBag.Another);
            Assert.Equal("property", controller.ViewData["Another"]);
        }
Esempio n. 43
0
        public void ClientRulesWithCompareAttribute_ErrorMessageUsesResourceOverride()
        {
            // Arrange
            var metadataProvider = new DataAnnotationsModelMetadataProvider();
            var metadata = metadataProvider.GetMetadataForProperty(() => null, typeof(PropertyNameModel), "MyProperty");
            var attribute = new CompareAttribute("OtherProperty")
            {
                ErrorMessageResourceName = "CompareAttributeTestResource",
                ErrorMessageResourceType = typeof(Test.Resources),
            };
            var context = new ClientModelValidationContext(metadata, metadataProvider);
            var adapter = new CompareAttributeAdapter(attribute);

            // Act
            var rules = adapter.GetClientValidationRules(context);

            // Assert
            var rule = Assert.Single(rules);
            Assert.Equal("Comparing MyProperty to OtherProperty.", rule.ErrorMessage);
        }
Esempio n. 44
0
        public void GetClientValidationRules_ReturnsValidationParameters()
        {
            // Arrange
            var provider = new DataAnnotationsModelMetadataProvider();
            var metadata = provider.GetMetadataForProperty(() => null, typeof(string), "Length");
            var attribute = new RangeAttribute(typeof(decimal), "0", "100");
            var adapter = new RangeAttributeAdapter(attribute);
            var context = new ClientModelValidationContext(metadata, provider);

            // Act
            var rules = adapter.GetClientValidationRules(context);

            // Assert
            var rule = Assert.Single(rules);
            Assert.Equal("range", rule.ValidationType);
            Assert.Equal(2, rule.ValidationParameters.Count);
            Assert.Equal(0m, rule.ValidationParameters["min"]);
            Assert.Equal(100m, rule.ValidationParameters["max"]);
            Assert.Equal(@"The field Length must be between 0 and 100.", rule.ErrorMessage);
        }
Esempio n. 45
0
        public void ClientRulesWithMaxLengthAttributeAndCustomMessage()
        {
            // Arrange
            var propertyName = "Length";
            var message = "{0} must be at most {1}";
            var provider = new DataAnnotationsModelMetadataProvider();
            var metadata = provider.GetMetadataForProperty(() => null, typeof(string), propertyName);
            var attribute = new MaxLengthAttribute(5) { ErrorMessage = message };
            var adapter = new MaxLengthAttributeAdapter(attribute);
            var context = new ClientModelValidationContext(metadata, provider);

            // Act
            var rules = adapter.GetClientValidationRules(context);

            // Assert
            var rule = Assert.Single(rules);
            Assert.Equal("maxlength", rule.ValidationType);
            Assert.Equal(1, rule.ValidationParameters.Count);
            Assert.Equal(5, rule.ValidationParameters["max"]);
            Assert.Equal("Length must be at most 5", rule.ErrorMessage);
        }
        public void AttributesOverrideMetadataStrings(Attribute attribute, Func<ModelMetadata, string> accessor)
        {
            // Arrange
            var attributes = new[] { attribute };
            var provider = new DataAnnotationsModelMetadataProvider();

            // Act
            var metadata = new CachedDataAnnotationsModelMetadata(
                provider,
                containerType: null,
                modelType: typeof(ClassWithDisplayableColumn),
                propertyName: null,
                attributes: attributes)
            {
                Model = new ClassWithDisplayableColumn { Property = "value" },
            };
            var result = accessor(metadata);

            // Assert
            Assert.Equal("value", result);
        }
        public void GetClientValidationRules_WithMinAndMaxLength_ReturnsValidationParameters()
        {
            // Arrange
            var provider = new DataAnnotationsModelMetadataProvider();
            var metadata = provider.GetMetadataForProperty(() => null, typeof(string), "Length");
            var attribute = new StringLengthAttribute(10) { MinimumLength = 3 };
            var adapter = new StringLengthAttributeAdapter(attribute);
            var context = new ClientModelValidationContext(metadata, provider);

            // Act
            var rules = adapter.GetClientValidationRules(context);

            // Assert
            var rule = Assert.Single(rules);
            Assert.Equal("length", rule.ValidationType);
            Assert.Equal(2, rule.ValidationParameters.Count);
            Assert.Equal(3, rule.ValidationParameters["min"]);
            Assert.Equal(10, rule.ValidationParameters["max"]);
            Assert.Equal("The field Length must be a string with a minimum length of 3 and a maximum length of 10.",
                         rule.ErrorMessage);
        }
        public void Constructor_DefersDefaultsToBaseModelMetadata()
        {
            // Arrange
            var attributes = Enumerable.Empty<Attribute>();
            var provider = new DataAnnotationsModelMetadataProvider();

            // Act
            var metadata = new CachedDataAnnotationsModelMetadata(
                provider,
                containerType: null,
                modelType: typeof(object),
                propertyName: null,
                attributes: attributes);

            // Assert
            Assert.True(metadata.ConvertEmptyStringToNull);
            Assert.False(metadata.IsReadOnly);
            Assert.False(metadata.IsRequired);

            Assert.Null(metadata.Description);
            Assert.Null(metadata.DisplayName);
            Assert.Null(metadata.NullDisplayText);
        }
 private static ModelMetadata GetMetadataForCanUpdateProperty(string propertyName)
 {
     DataAnnotationsModelMetadataProvider metadataProvider = new DataAnnotationsModelMetadataProvider();
     return metadataProvider.GetMetadataForProperty(null, typeof(MyModelTestingCanUpdateProperty), propertyName);
 }
        public void SimpleDisplayTextForNullClassRevertsToDefaultBehavior() {
            // Arrange
            string expected = "Null Display Text";
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();
            ModelMetadata metadata = provider.GetMetadataForType(null, typeof(SimpleDisplayTextAttributeModel));
            metadata.NullDisplayText = expected;

            // Act
            string result = metadata.SimpleDisplayText;

            // Assert
            Assert.AreEqual(expected, result);
        }
        public void PropertiesListGetsResetWhenModelGetsReset()
        { // Dev10 Bug #923263
            // Arrange
            var provider = new DataAnnotationsModelMetadataProvider();
            var metadata = new ModelMetadata(provider, null, () => new Class1(), typeof(Class1), null);

            // Act
            ModelMetadata[] originalProps = metadata.Properties.ToArray();
            metadata.Model = new Class2();
            ModelMetadata[] newProps = metadata.Properties.ToArray();

            // Assert
            ModelMetadata originalProp = Assert.Single(originalProps);
            Assert.Equal(typeof(string), originalProp.ModelType);
            Assert.Equal("Prop1", originalProp.PropertyName);
            ModelMetadata newProp = Assert.Single(newProps);
            Assert.Equal(typeof(int), newProp.ModelType);
            Assert.Equal("Prop2", newProp.PropertyName);
        }
        public void SimpleDisplayTextForNonNullClassWithNullDisplayColumnValueRevertsToDefaultBehavior() {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();
            SimpleDisplayTextAttributeModel model = new SimpleDisplayTextAttributeModel();
            ModelMetadata metadata = provider.GetMetadataForType(() => model, typeof(SimpleDisplayTextAttributeModel));

            // Act
            string result = metadata.SimpleDisplayText;

            // Assert
            Assert.AreEqual("42", result);    // Falls back to the default logic of first property value
        }
        public void DataAnnotationsDescriptionTests()
        {
            // Arrange
            var provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.Null(provider.GetMetadataForProperty(null, typeof(DisplayModel), "NoAttribute").Description);
            Assert.Null(provider.GetMetadataForProperty(null, typeof(DisplayModel), "NothingSet").Description);
            Assert.Null(provider.GetMetadataForProperty(null, typeof(DisplayModel), "NameSet").Description);
            Assert.Equal("Description text1", provider.GetMetadataForProperty(null, typeof(DisplayModel), "DescriptionSet").Description);
            Assert.Equal("Description text2", provider.GetMetadataForProperty(null, typeof(DisplayModel), "BothSet").Description);
        }
        public void DataAnnotationsNameTests()
        {
            // Arrange
            var provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.Equal("NoAttribute", provider.GetMetadataForProperty(null, typeof(DisplayModel), "NoAttribute").GetDisplayName());
            Assert.Equal("NothingSet", provider.GetMetadataForProperty(null, typeof(DisplayModel), "NothingSet").GetDisplayName());
            Assert.Equal("", provider.GetMetadataForProperty(null, typeof(DisplayModel), "EmptyDisplayName").GetDisplayName());
            Assert.Equal("DescriptionSet", provider.GetMetadataForProperty(null, typeof(DisplayModel), "DescriptionSet").GetDisplayName());
            Assert.Equal("Name text1", provider.GetMetadataForProperty(null, typeof(DisplayModel), "NameSet").GetDisplayName());
            Assert.Equal("Name text2", provider.GetMetadataForProperty(null, typeof(DisplayModel), "BothSet").GetDisplayName());

            Assert.NotEqual("String1", Resources.String1);
            Assert.Equal(Resources.String1, provider.GetMetadataForProperty(null, typeof(DisplayModel), "Localized").GetDisplayName());
        }
        public void SimpleDisplayTextForNonNullClassWithNonNullDisplayColumnValue() {
            // Arrange
            string expected = "Custom property display value";
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();
            SimpleDisplayTextAttributeModel model = new SimpleDisplayTextAttributeModel { DisplayColumnProperty = expected };
            ModelMetadata metadata = provider.GetMetadataForType(() => model, typeof(SimpleDisplayTextAttributeModel));

            // Act
            string result = metadata.SimpleDisplayText;

            // Assert
            Assert.AreEqual(expected, result);
        }
 private static ModelMetadata GetMetadataForObject(object o)
 {
     DataAnnotationsModelMetadataProvider metadataProvider = new DataAnnotationsModelMetadataProvider();
     return metadataProvider.GetMetadataForType(() => o, o.GetType());
 }
        public void DisplayNameAttributeSetsDisplayName() {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.IsNull(provider.GetMetadataForProperty(null, typeof(DisplayNameAttributeModel), "Without").DisplayName);
            Assert.AreEqual("Custom property name", provider.GetMetadataForProperty(null, typeof(DisplayNameAttributeModel), "With").DisplayName);
        }
        public void IsRequiredTests() {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            Assert.IsTrue(provider.GetMetadataForProperty(null, typeof(IsRequiredModel), "NonNullableWithout").IsRequired);
            Assert.IsFalse(provider.GetMetadataForProperty(null, typeof(IsRequiredModel), "NullableWithout").IsRequired);
            Assert.IsTrue(provider.GetMetadataForProperty(null, typeof(IsRequiredModel), "NullableWith").IsRequired);
        }
 private static ModelMetadata GetMetadataForType(Type t)
 {
     DataAnnotationsModelMetadataProvider metadataProvider = new DataAnnotationsModelMetadataProvider();
     return metadataProvider.GetMetadataForType(null, t);
 }
        public void SimpleDisplayTextForTypeWithWriteOnlyDisplayColumnThrows() {
            // Arrange
            DataAnnotationsModelMetadataProvider provider = new DataAnnotationsModelMetadataProvider();

            // Act & Assert
            ExceptionHelper.ExpectInvalidOperationException(
                () => provider.GetMetadataForType(() => new WriteOnlyDisplayColumnModel(), typeof(WriteOnlyDisplayColumnModel)).SimpleDisplayText,
                "System.Web.Mvc.Test.DataAnnotationsModelMetadataProviderTest+WriteOnlyDisplayColumnModel has a DisplayColumn attribute for WriteOnlyProperty, but property WriteOnlyProperty does not have a public getter.");

            ExceptionHelper.ExpectInvalidOperationException(
                () => provider.GetMetadataForType(() => new PrivateReadPublicWriteDisplayColumnModel(), typeof(PrivateReadPublicWriteDisplayColumnModel)).SimpleDisplayText,
                "System.Web.Mvc.Test.DataAnnotationsModelMetadataProviderTest+PrivateReadPublicWriteDisplayColumnModel has a DisplayColumn attribute for PrivateReadPublicWriteProperty, but property PrivateReadPublicWriteProperty does not have a public getter.");
        }