Ejemplo n.º 1
0
        /// <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);
        }
Ejemplo n.º 2
0
        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));
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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();
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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();
        }
Ejemplo n.º 8
0
        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();
        }