public void Should_be_able_to_bind_interfaces()
        {
            var binder        = new InterfaceModelBinder();
            var locator       = new DefaultModelBinderLocator(new IModelBinder[] { binder }, this.defaultBinder);
            var locatedBinder = locator.GetBinderForType(typeof(Concrete), A <NancyContext> .Ignored);

            var result = locatedBinder.Bind(null, typeof(Concrete)) as IAmAnInterface;

            result.ShouldNotBeNull();
        }
        public void Should_return_a_binder_that_returns_true_for_canbind()
        {
            var fakeBinder = A.Fake <IModelBinder>();

            A.CallTo(() => fakeBinder.CanBind(A <Type> .Ignored)).Returns(true);
            var locator = new DefaultModelBinderLocator(new IModelBinder[] { fakeBinder }, this.defaultBinder);

            var result = locator.GetBinderForType(typeof(Model), A <NancyContext> .Ignored);

            result.ShouldBeSameAs(fakeBinder);
        }
        public void Should_return_default_binder_if_no_specific_binder_exists()
        {
            var fakeBinder = A.Fake <IModelBinder>();

            A.CallTo(() => fakeBinder.CanBind(A <Type> .Ignored)).Returns(false);
            var locator = new DefaultModelBinderLocator(new IModelBinder[] { fakeBinder }, this.defaultBinder);

            var result = locator.GetBinderForType(typeof(Model), A <NancyContext> .Ignored);

            result.ShouldBeSameAs(this.defaultBinder);
        }
        public void Should_be_able_to_bind_interfaces_using_module_extensions()
        {
            var binder  = new InterfaceModelBinder();
            var locator = new DefaultModelBinderLocator(new IModelBinder[] { binder }, this.defaultBinder);
            var module  = new TestBindingModule();

            module.Context = new NancyContext()
            {
                Request = new FakeRequest("GET", "/")
            };
            module.ModelBinderLocator = locator;

            var result  = module.TestBindInterface();
            var result2 = module.TestBindConcrete();

            result.ShouldNotBeNull();
            result2.ShouldNotBeNull();
        }