From 2779829820939d2cc5c82b2fa98205cc0f57b39b Mon Sep 17 00:00:00 2001 From: Jay Harris Date: Tue, 4 Nov 2014 14:32:11 -0500 Subject: [PATCH] Pass NancyContext down to ValidationAdapters --- .../DataAnnotationsValidatorFixture.cs | 27 ++++++++++------- .../DefaultValidatableObjectAdapterFixture.cs | 8 ++--- .../PropertyValidatorFixture.cs | 30 +++++++++++-------- .../DataAnnotationsValidator.cs | 4 +-- .../DataAnnotationsValidatorAdapter.cs | 7 +++-- .../DefaultValidatableObjectAdapter.cs | 3 +- .../IDataAnnotationsValidatorAdapter.cs | 3 +- .../IPropertyValidator.cs | 3 +- .../IValidatableObjectAdapter.cs | 3 +- .../PropertyValidator.cs | 5 ++-- 10 files changed, 55 insertions(+), 38 deletions(-) diff --git a/src/Nancy.Validation.DataAnnotatioins.Tests/DataAnnotationsValidatorFixture.cs b/src/Nancy.Validation.DataAnnotatioins.Tests/DataAnnotationsValidatorFixture.cs index 611e0942c3..4167a6b142 100644 --- a/src/Nancy.Validation.DataAnnotatioins.Tests/DataAnnotationsValidatorFixture.cs +++ b/src/Nancy.Validation.DataAnnotatioins.Tests/DataAnnotationsValidatorFixture.cs @@ -40,9 +40,10 @@ public void Should_get_property_validators_from_factory() { // Given var instance = new ModelUnderTest(); + var context = new NancyContext(); // When - this.validator.Validate(instance, new NancyContext()); + this.validator.Validate(instance, context); // Then A.CallTo(() => this.validatorFactory.GetValidators(typeof(ModelUnderTest))).MustHaveHappened(); @@ -53,13 +54,14 @@ public void Should_invoke_all_validators_returned_by_factory_with_instance_being { // Given var instance = new ModelUnderTest(); + var context = new NancyContext(); // When - this.validator.Validate(instance, new NancyContext()); + this.validator.Validate(instance, context); // Then - A.CallTo(() => this.propertyValidator1.Validate(instance)).MustHaveHappened(); - A.CallTo(() => this.propertyValidator2.Validate(instance)).MustHaveHappened(); + A.CallTo(() => this.propertyValidator1.Validate(instance, context)).MustHaveHappened(); + A.CallTo(() => this.propertyValidator2.Validate(instance, context)).MustHaveHappened(); } [Fact] @@ -67,12 +69,13 @@ public void Should_invoke_validatable_object_adapter_with_instance_being_validat { // Given var instance = new ModelUnderTest(); + var context = new NancyContext(); // When - this.validator.Validate(instance, new NancyContext()); + this.validator.Validate(instance, context); // Then - A.CallTo(() => this.validatableObjectAdapter.Validate(instance)).MustHaveHappened(); + A.CallTo(() => this.validatableObjectAdapter.Validate(instance, context)).MustHaveHappened(); } [Fact] @@ -80,16 +83,17 @@ public void Should_contain_validation_results_from_all_validators() { // Given var instance = new ModelUnderTest(); + var context = new NancyContext(); var result1 = new ModelValidationError("Foo", string.Empty); var result2 = new ModelValidationError("Bar", string.Empty); var result3 = new ModelValidationError("Baz", string.Empty); - A.CallTo(() => this.propertyValidator1.Validate(instance)).Returns(new[] { result1 }); - A.CallTo(() => this.propertyValidator2.Validate(instance)).Returns(new[] { result2, result3 }); + A.CallTo(() => this.propertyValidator1.Validate(instance, context)).Returns(new[] { result1 }); + A.CallTo(() => this.propertyValidator2.Validate(instance, context)).Returns(new[] { result2, result3 }); // When - var results = this.validator.Validate(instance, new NancyContext()); + var results = this.validator.Validate(instance, context); // Then results.Errors.Count().ShouldEqual(3); @@ -101,11 +105,12 @@ public void Should_contain_validation_result_from_validatable_object_adapter() // Given var instance = new ModelUnderTest(); var result = new ModelValidationError("Foo", string.Empty); + var context = new NancyContext(); - A.CallTo(() => this.validatableObjectAdapter.Validate(instance)).Returns(new[] { result }); + A.CallTo(() => this.validatableObjectAdapter.Validate(instance, context)).Returns(new[] { result }); // When - var results = this.validator.Validate(instance, new NancyContext()); + var results = this.validator.Validate(instance, context); // Then results.Errors.Count().ShouldEqual(1); diff --git a/src/Nancy.Validation.DataAnnotatioins.Tests/DefaultValidatableObjectAdapterFixture.cs b/src/Nancy.Validation.DataAnnotatioins.Tests/DefaultValidatableObjectAdapterFixture.cs index 566dbd21af..92ba3b75ef 100644 --- a/src/Nancy.Validation.DataAnnotatioins.Tests/DefaultValidatableObjectAdapterFixture.cs +++ b/src/Nancy.Validation.DataAnnotatioins.Tests/DefaultValidatableObjectAdapterFixture.cs @@ -25,7 +25,7 @@ public void Should_invoke_validate_on_instance() var instance = new ModelUnderTest(); // When - this.validator.Validate(instance); + this.validator.Validate(instance, new NancyContext()); // Then instance.ValidatedWasInvoked.ShouldBeTrue(); @@ -38,7 +38,7 @@ public void Should_invoke_validate_with_instance() var instance = new ModelUnderTest(); // When - this.validator.Validate(instance); + this.validator.Validate(instance, new NancyContext()); // Then instance.InstanceBeingValidated.ShouldBeSameAs(instance); @@ -57,7 +57,7 @@ public void Should_return_validation_error_for_all_validation_results() }; // When - var results = this.validator.Validate(instance); + var results = this.validator.Validate(instance, new NancyContext()); // Then results.Count().ShouldEqual(2); @@ -70,7 +70,7 @@ public void Should_not_return_errors_if_model_not_implements_IValidatableObject( var instance = new ModelNotImplementingIValidatableObject(); // When - var result = this.validator.Validate(instance); + var result = this.validator.Validate(instance, new NancyContext()); // Then result.Count().ShouldEqual(0); diff --git a/src/Nancy.Validation.DataAnnotatioins.Tests/PropertyValidatorFixture.cs b/src/Nancy.Validation.DataAnnotatioins.Tests/PropertyValidatorFixture.cs index 440f772201..c1deb9069b 100644 --- a/src/Nancy.Validation.DataAnnotatioins.Tests/PropertyValidatorFixture.cs +++ b/src/Nancy.Validation.DataAnnotatioins.Tests/PropertyValidatorFixture.cs @@ -28,7 +28,7 @@ public PropertyValidatorFixture() this.error1 = new ModelValidationError("error1", string.Empty); - A.CallTo(() => this.adapter1.Validate(A._, A._, A._)) + A.CallTo(() => this.adapter1.Validate(A._, A._, A._, A._)) .Returns(new[] {this.error1}); this.adapter2 = @@ -37,7 +37,7 @@ public PropertyValidatorFixture() this.error2 = new ModelValidationError("error2", string.Empty); - A.CallTo(() => this.adapter2.Validate(A._, A._, A._)) + A.CallTo(() => this.adapter2.Validate(A._, A._, A._, A._)) .Returns(new[] { this.error2 }); this.mappings = @@ -65,12 +65,14 @@ public PropertyValidatorFixture() public void Should_call_validate_on_each_validator_for_each_attribute_when_validate_is_invoked() { // Given + var context = new NancyContext(); + // When - this.validator.Validate(null); + this.validator.Validate(null, context); // Then - A.CallTo(() => this.adapter1.Validate(A._, A._, A._)).MustHaveHappened(); - A.CallTo(() => this.adapter2.Validate(A._, A._, A._)).MustHaveHappened(); + A.CallTo(() => this.adapter1.Validate(A._, A._, A._, A._)).MustHaveHappened(); + A.CallTo(() => this.adapter2.Validate(A._, A._, A._, A._)).MustHaveHappened(); } [Fact] @@ -78,12 +80,13 @@ public void Should_pass_instance_to_validator_when_validate_is_invoked() { // Given var instance = new Model(); + var context = new NancyContext(); // When - this.validator.Validate(instance); + this.validator.Validate(instance, context); // Then - A.CallTo(() => this.adapter1.Validate(instance, A._, A._)).MustHaveHappened(); + A.CallTo(() => this.adapter1.Validate(instance, A._, A._, context)).MustHaveHappened(); } [Fact] @@ -91,12 +94,13 @@ public void Should_pass_attribute_to_validator_when_validate_is_invoked() { // Given var instance = new Model(); + var context = new NancyContext(); // When - this.validator.Validate(instance); + this.validator.Validate(instance, context); // Then - A.CallTo(() => this.adapter1.Validate(A._, this.mappings.Keys.First(), A._)).MustHaveHappened(); + A.CallTo(() => this.adapter1.Validate(A._, this.mappings.Keys.First(), A._, A._)).MustHaveHappened(); } [Fact] @@ -104,12 +108,13 @@ public void Should_pass_descriptor_to_validator_when_validate_is_invoked() { // Given var instance = new Model(); + var context = new NancyContext(); // When - this.validator.Validate(instance); + this.validator.Validate(instance, context); // Then - A.CallTo(() => this.adapter1.Validate(A._, A._, this.descriptor)).MustHaveHappened(); + A.CallTo(() => this.adapter1.Validate(A._, A._, this.descriptor, A._)).MustHaveHappened(); } [Fact] @@ -117,9 +122,10 @@ public void Should_return_an_aggregated_list_of_model_validation_errors_from_all { // Given var instance = new Model(); + var context = new NancyContext(); // When - var results = this.validator.Validate(instance); + var results = this.validator.Validate(instance, context); // Then results.Contains(this.error1).ShouldBeTrue(); diff --git a/src/Nancy.Validation.DataAnnotations/DataAnnotationsValidator.cs b/src/Nancy.Validation.DataAnnotations/DataAnnotationsValidator.cs index 074b6522ff..2a590ef08b 100644 --- a/src/Nancy.Validation.DataAnnotations/DataAnnotationsValidator.cs +++ b/src/Nancy.Validation.DataAnnotations/DataAnnotationsValidator.cs @@ -54,12 +54,12 @@ public ModelValidationResult Validate(object instance, NancyContext context) foreach (var validator in this.validators) { var results = - validator.Validate(instance); + validator.Validate(instance, context); errors.AddRange(results); } - errors.AddRange(this.validatableObjectAdapter.Validate(instance)); + errors.AddRange(this.validatableObjectAdapter.Validate(instance, context)); return new ModelValidationResult(errors); } diff --git a/src/Nancy.Validation.DataAnnotations/DataAnnotationsValidatorAdapter.cs b/src/Nancy.Validation.DataAnnotations/DataAnnotationsValidatorAdapter.cs index 7698f1cb5f..8f3c123f92 100644 --- a/src/Nancy.Validation.DataAnnotations/DataAnnotationsValidatorAdapter.cs +++ b/src/Nancy.Validation.DataAnnotations/DataAnnotationsValidatorAdapter.cs @@ -47,10 +47,11 @@ public virtual IEnumerable GetRules(ValidationAttribute att /// The instance that should be validated. /// The that should be handled. /// A instance for the property that is being validated. + /// The of the current request. /// An of instances. - public virtual IEnumerable Validate(object instance, ValidationAttribute attribute, PropertyDescriptor descriptor) + public virtual IEnumerable Validate(object instance, ValidationAttribute attribute, PropertyDescriptor descriptor, NancyContext context) { - var context = + var validationContext = new ValidationContext(instance, null, null) { MemberName = descriptor == null ? null : descriptor.Name @@ -62,7 +63,7 @@ public virtual IEnumerable Validate(object instance, Valid } var result = - attribute.GetValidationResult(instance, context); + attribute.GetValidationResult(instance, validationContext); if (result != null) { diff --git a/src/Nancy.Validation.DataAnnotations/DefaultValidatableObjectAdapter.cs b/src/Nancy.Validation.DataAnnotations/DefaultValidatableObjectAdapter.cs index 4326a0db0d..eb0db7354b 100644 --- a/src/Nancy.Validation.DataAnnotations/DefaultValidatableObjectAdapter.cs +++ b/src/Nancy.Validation.DataAnnotations/DefaultValidatableObjectAdapter.cs @@ -13,8 +13,9 @@ public class DefaultValidatableObjectAdapter : IValidatableObjectAdapter /// Validates the specified instance. /// /// The instance. + /// /// An instance, containing objects. - public IEnumerable Validate(object instance) + public IEnumerable Validate(object instance, NancyContext context1) { var validateable = instance as IValidatableObject; diff --git a/src/Nancy.Validation.DataAnnotations/IDataAnnotationsValidatorAdapter.cs b/src/Nancy.Validation.DataAnnotations/IDataAnnotationsValidatorAdapter.cs index f9162d361c..2339fdb670 100644 --- a/src/Nancy.Validation.DataAnnotations/IDataAnnotationsValidatorAdapter.cs +++ b/src/Nancy.Validation.DataAnnotations/IDataAnnotationsValidatorAdapter.cs @@ -31,7 +31,8 @@ public interface IDataAnnotationsValidatorAdapter /// The instance that should be validated. /// The that should be handled. /// A instance for the property that is being validated. + /// The of the current request. /// An of instances. - IEnumerable Validate(object instance, ValidationAttribute attribute, PropertyDescriptor descriptor); + IEnumerable Validate(object instance, ValidationAttribute attribute, PropertyDescriptor descriptor, NancyContext context); } } \ No newline at end of file diff --git a/src/Nancy.Validation.DataAnnotations/IPropertyValidator.cs b/src/Nancy.Validation.DataAnnotations/IPropertyValidator.cs index 0c4a639243..f772a4f578 100644 --- a/src/Nancy.Validation.DataAnnotations/IPropertyValidator.cs +++ b/src/Nancy.Validation.DataAnnotations/IPropertyValidator.cs @@ -30,7 +30,8 @@ public interface IPropertyValidator /// Gets the validation result for the specified . /// /// The instance that should be validated. + /// The of the current request. /// An instance, containing objects. - IEnumerable Validate(object instance); + IEnumerable Validate(object instance, NancyContext context); } } \ No newline at end of file diff --git a/src/Nancy.Validation.DataAnnotations/IValidatableObjectAdapter.cs b/src/Nancy.Validation.DataAnnotations/IValidatableObjectAdapter.cs index 7e1bb7ae29..36564a2f3e 100644 --- a/src/Nancy.Validation.DataAnnotations/IValidatableObjectAdapter.cs +++ b/src/Nancy.Validation.DataAnnotations/IValidatableObjectAdapter.cs @@ -12,7 +12,8 @@ public interface IValidatableObjectAdapter /// Validates the given instance. /// /// The instance. + /// The of the current request. /// An of instances. - IEnumerable Validate(object instance); + IEnumerable Validate(object instance, NancyContext context); } } \ No newline at end of file diff --git a/src/Nancy.Validation.DataAnnotations/PropertyValidator.cs b/src/Nancy.Validation.DataAnnotations/PropertyValidator.cs index 156207d91e..f661f9ddfb 100644 --- a/src/Nancy.Validation.DataAnnotations/PropertyValidator.cs +++ b/src/Nancy.Validation.DataAnnotations/PropertyValidator.cs @@ -48,8 +48,9 @@ public IEnumerable GetRules() /// Gets the validation result for the specified . /// /// The instance that should be validated. + /// The of the current request. /// An instance, containing objects. - public IEnumerable Validate(object instance) + public IEnumerable Validate(object instance, NancyContext context) { var errors = new List(); @@ -59,7 +60,7 @@ public IEnumerable Validate(object instance) foreach (var adapter in attributeAdapter.Value) { var results = - adapter.Validate(instance, attributeAdapter.Key, this.Descriptor); + adapter.Validate(instance, attributeAdapter.Key, this.Descriptor, context); errors.AddRange(results); }