public void ValidationVisitor_ValidateComplexTypesIfChildValidationFailsSetToTrue_AddsModelLevelErrors()
        {
            // Arrange
            var testContext = ModelBindingTestHelper.GetTestContext();
            var modelState  = testContext.ModelState;
            var model       = new ModelLevelErrorTest();
            var controller  = CreateController(testContext, testContext.MetadataProvider);

            controller.ObjectValidator = new CustomObjectValidator(testContext.MetadataProvider, TestModelValidatorProvider.CreateDefaultProvider().ValidatorProviders)
            {
                ValidateComplexTypesIfChildValidationFails = true
            };

            // Act
            var result = controller.TryValidateModel(model);

            // Assert
            Assert.False(result);
            Assert.False(modelState.IsValid);
            var modelStateErrors = GetModelStateErrors(modelState);

            Assert.Equal(2, modelStateErrors.Count);
            AssertErrorEquals("Property", modelStateErrors["Message"]);
            AssertErrorEquals("Model", modelStateErrors[""]);
        }
Пример #2
0
        public void ValidationVisitor_ValidateComplexTypesIfChildValidationFailsSetToFalse_DoesNotAddModelLevelErrors()
        {
            // Arrange
            var testContext = ModelBindingTestHelper.GetTestContext();
            var modelState  = testContext.ModelState;
            var model       = new ModelLevelErrorTest();
            var controller  = CreateController(testContext, testContext.MetadataProvider, o => o.ValidateComplexTypesIfChildValidationFails = false);

            // Act
            var result = controller.TryValidateModel(model);

            // Assert
            Assert.False(result);
            Assert.False(modelState.IsValid);
            var modelStateErrors = GetModelStateErrors(modelState);

            Assert.Single(modelStateErrors); // single error from the required attribute
            AssertErrorEquals("Property", modelStateErrors.Single().Value);
        }