public static ValidationResult CustomValidationMethod(ValTestClass_With_IValidatableObject instance, ValidationContext context)
        {
            bool   fail    = context.Items.ContainsKey(AttributeFailure) ? (bool)context.Items[AttributeFailure] : false;
            string message = context.Items.ContainsKey(AttributeFailureMessage) ? (string)context.Items[AttributeFailureMessage] : "CustomValidationMethod Failed";

            return(fail ? new ValidationResult(message) : ValidationResult.Success);
        }
        public void Validator_Fails_With_IValidatableObject_Errors()
        {
            ICollection <ValidationResult> injectedResults = new Collection <ValidationResult>
            {
                new ValidationResult("Error"),
                new ValidationResult("Another Error")
            };

            ValTestClass_With_IValidatableObject entity = new ValTestClass_With_IValidatableObject(injectedResults);
            ValidationContext context = new ValidationContext(entity, null, null);

            ExceptionHelper.ExpectValidationException(() => { Validator.ValidateObject(entity, context); }, "Error", null, entity);
        }
        public void Validator_Returns_Errors_From_IValidatableObject()
        {
            ICollection <ValidationResult> injectedResults = new Collection <ValidationResult>
            {
                new ValidationResult("Error")
            };

            ValTestClass_With_IValidatableObject entity = new ValTestClass_With_IValidatableObject(injectedResults);
            ValidationContext context = new ValidationContext(entity, null, null);

            ICollection <ValidationResult> results = new Collection <ValidationResult>();
            bool isValid = Validator.TryValidateObject(entity, context, results);

            Assert.IsFalse(isValid, "isValid should be false since the object returns validation results");
            Assert.AreEqual(1, results.Count, "There should be 1 result returned");
        }
        public void Validator_Does_Not_Invoke_IValidatableObject_With_Entity_Attribute_Failure()
        {
            ValTestClass_With_IValidatableObject entity = new ValTestClass_With_IValidatableObject("IValidatableObject should not be called when an entity attribute validation fails");

            Dictionary <object, object> items = new Dictionary <object, object>();

            items.Add(ValTestClass_With_IValidatableObject.AttributeFailure, true);
            items.Add(ValTestClass_With_IValidatableObject.AttributeFailureMessage, "Attribute failure");

            ValidationContext context = new ValidationContext(entity, null, items);

            ICollection <ValidationResult> results = new Collection <ValidationResult>();
            bool isValid = Validator.TryValidateObject(entity, context, results);

            Assert.IsFalse(isValid, "isValid should be false since the object returns validation results");
            Assert.AreEqual(1, results.Count, "There should be 1 result returned");
            Assert.AreEqual("Attribute failure", results.First().ErrorMessage);
        }
        public static ValidationResult CustomValidationMethod(ValTestClass_With_IValidatableObject instance, ValidationContext context) {
            bool fail = context.Items.ContainsKey(AttributeFailure) ? (bool)context.Items[AttributeFailure] : false;
            string message = context.Items.ContainsKey(AttributeFailureMessage) ? (string)context.Items[AttributeFailureMessage] : "CustomValidationMethod Failed";

            return fail ? new ValidationResult(message) : ValidationResult.Success;
        }
        public void Validator_Does_Not_Invoke_IValidatableObject_With_Entity_Attribute_Failure() {
            ValTestClass_With_IValidatableObject entity = new ValTestClass_With_IValidatableObject("IValidatableObject should not be called when an entity attribute validation fails");

            Dictionary<object, object> items = new Dictionary<object, object>();
            items.Add(ValTestClass_With_IValidatableObject.AttributeFailure, true);
            items.Add(ValTestClass_With_IValidatableObject.AttributeFailureMessage, "Attribute failure");

            ValidationContext context = new ValidationContext(entity, null, items);

            ICollection<ValidationResult> results = new Collection<ValidationResult>();
            bool isValid = Validator.TryValidateObject(entity, context, results);

            Assert.IsFalse(isValid, "isValid should be false since the object returns validation results");
            Assert.AreEqual(1, results.Count, "There should be 1 result returned");
            Assert.AreEqual("Attribute failure", results.First().ErrorMessage);
        }
        public void Validator_Fails_With_IValidatableObject_Errors() {
            ICollection<ValidationResult> injectedResults = new Collection<ValidationResult>
            {
                new ValidationResult("Error"),
                new ValidationResult("Another Error")
            };

            ValTestClass_With_IValidatableObject entity = new ValTestClass_With_IValidatableObject(injectedResults);
            ValidationContext context = new ValidationContext(entity, null, null);

            ExceptionHelper.ExpectValidationException(() => { Validator.ValidateObject(entity, context); }, "Error", null, entity);
        }
        public void Validator_Filters_Out_Success_Results_From_IValidatableObject() {
            ICollection<ValidationResult> injectedResults = new Collection<ValidationResult>
            {
                new ValidationResult("Error"),
                ValidationResult.Success
            };

            ValTestClass_With_IValidatableObject entity = new ValTestClass_With_IValidatableObject(injectedResults);
            ValidationContext context = new ValidationContext(entity, null, null);

            ICollection<ValidationResult> results = new Collection<ValidationResult>();
            bool isValid = Validator.TryValidateObject(entity, context, results);

            Assert.IsFalse(isValid, "isValid should be false since the object returns validation results");
            Assert.AreEqual(1, results.Count, "There should be 1 result returned since the ValidationResult.Success item should be filtered out");
        }