Пример #1
0
        public void FromLambdaExpressionSetsContainerWithoutObjectInViewData()
        {
            // Arrange
            Mock <ModelMetadataProvider> provider      = new Mock <ModelMetadataProvider>();
            DerivedModel derivedModel                  = new DerivedModel();
            ViewDataDictionary <DerivedModel> viewData = new ViewDataDictionary <DerivedModel>();

            provider.Setup(p => p.GetMetadataForProperty(It.IsAny <Func <object> >(), It.IsAny <Type>(), It.IsAny <string>()))
            .Callback <Func <object>, Type, string>((accessor, type, propertyName) =>
            {
                Assert.Null(accessor());
                Assert.Equal(derivedModel.GetType(), type);
                Assert.Equal("MyProperty", propertyName);
            })
            .Returns <Func <object>, Type, string>((accessor, type, propertyName) =>
            {
                return(new ModelMetadata(provider.Object, derivedModel.GetType(), accessor, type, propertyName));
            })
            .Verifiable();

            // Act
            ModelMetadata metadata = ModelMetadata.FromLambdaExpression <DerivedModel, string>(m => m.MyProperty, viewData, provider.Object);

            // Assert
            provider.Verify();
            Assert.Null(metadata.Container);
        }
Пример #2
0
        public async Task BindModelAsync_ForProperty_UsesValidationOnProperty_WhenDerivedModelIsSet()
        {
            // Arrange
            var property            = typeof(TestControllerWithValidatedProperties).GetProperty(nameof(TestControllerWithValidatedProperties.Model));
            var parameterDescriptor = new ControllerBoundPropertyDescriptor
            {
                PropertyInfo = property,
                Name         = property.Name,
            };

            var actionContext         = GetControllerContext();
            var modelMetadataProvider = new TestModelMetadataProvider();

            var model = new DerivedModel {
                DerivedProperty = "some value"
            };
            var modelBindingResult = ModelBindingResult.Success(model);

            var parameterBinder = new ParameterBinder(
                modelMetadataProvider,
                Mock.Of <IModelBinderFactory>(),
                new DefaultObjectValidator(
                    modelMetadataProvider,
                    new[] { TestModelValidatorProvider.CreateDefaultProvider() },
                    new MvcOptions()),
                _optionsAccessor,
                NullLoggerFactory.Instance);

            var modelMetadata = modelMetadataProvider.GetMetadataForProperty(property.DeclaringType, property.Name);
            var modelBinder   = CreateMockModelBinder(modelBindingResult);

            // Act
            var result = await parameterBinder.BindModelAsync(
                actionContext,
                modelBinder,
                CreateMockValueProvider(),
                parameterDescriptor,
                modelMetadata,
                value : null);

            // Assert
            Assert.True(result.IsModelSet);
            Assert.Same(model, result.Model);

            Assert.False(actionContext.ModelState.IsValid);
            Assert.Collection(
                actionContext.ModelState,
                kvp =>
            {
                Assert.Equal($"{property.Name}", kvp.Key);
                var error = Assert.Single(kvp.Value.Errors);
                Assert.Equal("Always Invalid", error.ErrorMessage);
            });
        }
Пример #3
0
    public Task BindModelAsync(ModelBindingContext bindingContext)
    {
        var model = new DerivedModel
        {
            DerivedProperty = bindingContext.ValueProvider.GetValue(nameof(DerivedModel.DerivedProperty)).FirstValue,
        };

        bindingContext.Result = ModelBindingResult.Success(model);

        return(Task.CompletedTask);
    }
        public void CanSerializeBaseType()
        {
            DerivedModel payload = new DerivedModel {
                A = "value", B = 5, C = true, D = null, E = "derived property"
            };

            BinaryData data = new BinaryData(jsonSerializable: payload, type: typeof(TestModel));

            Assert.Null(data.ToObjectFromJson <DerivedModel>().E);

            data = new BinaryData(jsonSerializable: payload, type: typeof(DerivedModel));
            Assert.Equal("derived property", data.ToObjectFromJson <DerivedModel>().E);

            data = new BinaryData(jsonSerializable: payload);
            Assert.Equal("derived property", data.ToObjectFromJson <DerivedModel>().E);

            data = BinaryData.FromObjectAsJson <TestModel>(payload);
            Assert.Null(data.ToObjectFromJson <DerivedModel>().E);

            data = BinaryData.FromObjectAsJson <DerivedModel>(payload);
            Assert.Equal("derived property", data.ToObjectFromJson <DerivedModel>().E);
        }
        public void FromLambdaExpressionSetsContainerWithoutObjectInViewData()
        {
            // Arrange
            Mock<ModelMetadataProvider> provider = new Mock<ModelMetadataProvider>();
            DerivedModel derivedModel = new DerivedModel();
            ViewDataDictionary<DerivedModel> viewData = new ViewDataDictionary<DerivedModel>();
            provider.Setup(p => p.GetMetadataForProperty(It.IsAny<Func<object>>(), It.IsAny<Type>(), It.IsAny<string>()))
                .Callback<Func<object>, Type, string>((accessor, type, propertyName) =>
                {
                    Assert.Null(accessor());
                    Assert.Equal(derivedModel.GetType(), type);
                    Assert.Equal("MyProperty", propertyName);
                })
                .Returns<Func<object>, Type, string>((accessor, type, propertyName) =>
                {
                    return new ModelMetadata(provider.Object, derivedModel.GetType(), accessor, type, propertyName);
                })
                .Verifiable();

            // Act
            ModelMetadata metadata = ModelMetadata.FromLambdaExpression<DerivedModel, string>(m => m.MyProperty, viewData, provider.Object);

            // Assert
            provider.Verify();
            Assert.Null(metadata.Container);
        }
Пример #6
0
        public void Derived()
        {
            //-------------------------------------------------------------
            // Verify that [BaseModel] works.

            var baseModel = new BaseModel();

            Assert.Null(baseModel.ParentProperty);

            baseModel.ParentProperty = "Hello World!";
            Assert.Equal("Hello World!", baseModel.ParentProperty);

            baseModel = BaseModel.CreateFrom(baseModel.ToString());
            Assert.Equal("Hello World!", baseModel.ParentProperty);

            //-------------------------------------------------------------
            // Verify that [DerivedModel] works too.

            var derivedModel = new DerivedModel();

            Assert.Null(derivedModel.ParentProperty);
            Assert.Null(derivedModel.ChildProperty);

            derivedModel.ParentProperty = "parent";
            derivedModel.ChildProperty  = "child";

            derivedModel = DerivedModel.CreateFrom(derivedModel.ToString());

            Assert.Equal("parent", derivedModel.ParentProperty);
            Assert.Equal("child", derivedModel.ChildProperty);

            //-------------------------------------------------------------
            // Verify Equals():

            var value1 = new DerivedModel()
            {
                ParentProperty = "parent", ChildProperty = "child"
            };
            var value2 = new DerivedModel()
            {
                ParentProperty = "parent", ChildProperty = "child"
            };

            Assert.True(value1.Equals(value1));
            Assert.True(value1.Equals(value2));
            Assert.True(value2.Equals(value1));

            Assert.False(value1.Equals(null));
            Assert.False(value1.Equals("Hello World!"));

            // Verify that a change to the parent class property is detected.

            value1.ParentProperty = "DIFFERENT";

            Assert.True(value1.Equals(value1));

            Assert.False(value1.Equals(value2));
            Assert.False(value2.Equals(value1));
            Assert.False(value1.Equals(null));
            Assert.False(value1.Equals("Hello World!"));

            // Verify that a change to the derived class property is detected.

            value1.ParentProperty = "parent";
            value1.ChildProperty  = "DIFFERENT";

            Assert.True(value1.Equals(value1));

            Assert.False(value1.Equals(value2));
            Assert.False(value2.Equals(value1));
            Assert.False(value1.Equals(null));
            Assert.False(value1.Equals("Hello World!"));

            //-------------------------------------------------------------
            // Verify that we can use [ToDerived<TResult>()] to create a derived instance
            // from the base type.  This also exercises [RoundtripDataFactory] a bit.

            derivedModel = new DerivedModel()
            {
                ParentProperty = "parent", ChildProperty = "child"
            };

            baseModel = BaseModel.CreateFrom(derivedModel.ToString());

            Assert.Equal("parent", baseModel.ParentProperty);

            derivedModel = baseModel.ToDerived <DerivedModel>();

            Assert.Equal("parent", derivedModel.ParentProperty);
            Assert.Equal("child", derivedModel.ChildProperty);
        }
 public ActionResult <DerivedModel> PutModel(string userId, DerivedModel model) => null;
Пример #8
0
 public void SetModel(DerivedModel model)
 {
     Model = model;
 }
Пример #9
0
 public void Run()
 {
     var model  = new DerivedModel <DerivedRow>();
     var parser = new DerivedParser <DerivedModel <DerivedRow>, DerivedRow>(model);
 }