/// <summary> /// Bind the incoming request to an existing instance /// </summary> /// <typeparam name="TModel">Model type</typeparam> /// <param name="module">Current module</param> /// <param name="instance">The class instance to bind properties to</param> /// <param name="configuration">The <see cref="BindingConfig"/> that should be applied during binding.</param> /// <param name="blacklistedProperties">Property names to blacklist from binding</param> public static TModel BindTo <TModel>(this NancyModule module, TModel instance, BindingConfig configuration, params string[] blacklistedProperties) { dynamic adapter = new DynamicModelBinderAdapter(module.ModelBinderLocator, module.Context, instance, configuration, blacklistedProperties); return(adapter); }
public void Should_throw_if_locator_does_not_return_binder() { var fakeLocator = A.Fake <IModelBinderLocator>(); A.CallTo(() => fakeLocator.GetBinderForType(A <Type> .Ignored)).Returns(null); dynamic adapter = new DynamicModelBinderAdapter(fakeLocator, new NancyContext()); var result = Record.Exception(() => (Model)adapter); result.ShouldBeOfType(typeof(ModelBindingException)); }
public void Should_pass_type_to_locator_when_cast_explicitly() { var fakeModelBinder = A.Fake <IModelBinder>(); var returnModel = new Model(); A.CallTo(() => fakeModelBinder.Bind(null, null, null)).WithAnyArguments().Returns(returnModel); var fakeLocator = A.Fake <IModelBinderLocator>(); A.CallTo(() => fakeLocator.GetBinderForType(A <Type> .Ignored)).Returns(fakeModelBinder); dynamic adapter = new DynamicModelBinderAdapter(fakeLocator, new NancyContext()); var result = (Model)adapter; A.CallTo(() => fakeLocator.GetBinderForType(typeof(Model))).MustHaveHappened(Repeated.Exactly.Once); }
public void Should_return_object_from_binder_if_binder_doesnt_return_null() { var fakeModelBinder = A.Fake <IModelBinder>(); var returnModel = new Model(); A.CallTo(() => fakeModelBinder.Bind(null, null, null)).WithAnyArguments().Returns(returnModel); var fakeLocator = A.Fake <IModelBinderLocator>(); A.CallTo(() => fakeLocator.GetBinderForType(A <Type> .Ignored)).Returns(fakeModelBinder); dynamic adapter = new DynamicModelBinderAdapter(fakeLocator, new NancyContext()); Model result = adapter; result.ShouldNotBeNull(); result.ShouldBeSameAs(returnModel); }
public void Should_pass_type_to_locator_when_cast_explicitly() { // Given var fakeModelBinder = A.Fake <IModelBinder>(); var returnModel = new Model(); A.CallTo(() => fakeModelBinder.Bind(null, null, null, null)).WithAnyArguments().Returns(returnModel); var fakeLocator = A.Fake <IModelBinderLocator>(); A.CallTo(() => fakeLocator.GetBinderForType(A <Type> .Ignored, A <NancyContext> .Ignored)).Returns(fakeModelBinder); dynamic adapter = new DynamicModelBinderAdapter(fakeLocator, new NancyContext(), null, A.Dummy <BindingConfig>()); // When var result = (Model)adapter; // Then A.CallTo(() => fakeLocator.GetBinderForType(typeof(Model), A <NancyContext> .Ignored)).MustHaveHappenedOnceExactly(); }
public void Should_invoke_binder_with_context() { // Given var context = new NancyContext(); var fakeModelBinder = A.Fake <IModelBinder>(); var returnModel = new Model(); A.CallTo(() => fakeModelBinder.Bind(null, null, null, null)).WithAnyArguments().Returns(returnModel); var fakeLocator = A.Fake <IModelBinderLocator>(); A.CallTo(() => fakeLocator.GetBinderForType(A <Type> .Ignored, context)).Returns(fakeModelBinder); dynamic adapter = new DynamicModelBinderAdapter(fakeLocator, context, null, A.Dummy <BindingConfig>()); // When Model result = adapter; // Then A.CallTo(() => fakeLocator.GetBinderForType(A <Type> .Ignored, context)).MustHaveHappened(Repeated.Exactly.Once); }
public void Should_pass_type_to_binder() { // Given var context = new NancyContext(); var fakeModelBinder = A.Fake <IModelBinder>(); var returnModel = new Model(); A.CallTo(() => fakeModelBinder.Bind(null, null, null, null)).WithAnyArguments().Returns(returnModel); var fakeLocator = A.Fake <IModelBinderLocator>(); A.CallTo(() => fakeLocator.GetBinderForType(A <Type> .Ignored, A <NancyContext> .Ignored)).Returns(fakeModelBinder); dynamic adapter = new DynamicModelBinderAdapter(fakeLocator, context, null, A.Dummy <BindingConfig>()); // When Model result = adapter; // Then A.CallTo(() => fakeModelBinder.Bind(A <NancyContext> ._, typeof(Model), A <object> ._, A <BindingConfig> ._, A <string[]> ._)).MustHaveHappened(); }
public void Should_pass_binding_configuration_to_binder() { // Given var context = new NancyContext(); var instance = new Model(); var config = BindingConfig.Default; var blacklist = new[] { "foo", "bar" }; var fakeModelBinder = A.Fake <IModelBinder>(); var returnModel = new Model(); A.CallTo(() => fakeModelBinder.Bind(null, null, null, null)).WithAnyArguments().Returns(returnModel); var fakeLocator = A.Fake <IModelBinderLocator>(); A.CallTo(() => fakeLocator.GetBinderForType(A <Type> .Ignored, A <NancyContext> .Ignored)).Returns(fakeModelBinder); dynamic adapter = new DynamicModelBinderAdapter(fakeLocator, context, instance, config, blacklist); // When Model result = adapter; // Then A.CallTo(() => fakeModelBinder.Bind(A <NancyContext> ._, A <Type> ._, A <object> ._, A <BindingConfig> ._, blacklist)).MustHaveHappened(); }