示例#1
0
        public void Should_output_the_responses_cookies()
        {
            // Given
            var cookie1 = A.Fake <INancyCookie>();
            var cookie2 = A.Fake <INancyCookie>();
            var r       = new Response();

            r.WithCookie(cookie1).WithCookie(cookie2);
            var nancyContext = new NancyContext {
                Response = r
            };

            A.CallTo(() => cookie1.ToString()).Returns("the first cookie");
            A.CallTo(() => cookie2.ToString()).Returns("the second cookie");

            SetupRequestProcess(nancyContext);

            // When
            var task = this.handler.ProcessRequest(context, ar => { }, new object());

            NancyHandler.EndProcessRequest(task);

            // Then
            A.CallTo(() => this.response.AddHeader("Set-Cookie", "the first cookie")).MustHaveHappened();
            A.CallTo(() => this.response.AddHeader("Set-Cookie", "the second cookie")).MustHaveHappened();
        }
        public async Task Invoke(HttpContext context, ITenantNancyBootstrapperAccessor <TTenant> tenantNancyBootstrapper, ITenantContainerAccessor <TTenant> tenantContainerAccessor, ITenantRequestContainerAccessor <TTenant> tenantRequestContainerAccessor)
        {
            // get the nancy bootstrapper,
            // adjust its request container - give it the current request container to return.
            // get the nancy engine

            //  var tenantContainer = await tenantContainerAccessor.TenantContainer.Value;
            var tenantRequestContainer = await tenantRequestContainerAccessor.TenantRequestContainer.Value;
            var nancyBootstrapper      = await tenantNancyBootstrapper.Bootstrapper.Value;

            if (tenantRequestContainer == null || nancyBootstrapper == null)
            {
                await _next.Invoke(context);

                return;
            }

            // swap out nancy request services.
            ITenantContainerAdaptor old = nancyBootstrapper.RequestContainerAdaptor;

            try
            {
                nancyBootstrapper.RequestContainerAdaptor = tenantRequestContainer.RequestContainer;
                var engine       = nancyBootstrapper.GetEngine();
                var nancyHandler = new NancyHandler(engine);
                await nancyHandler.ProcessRequest(context, NancyPassThroughOptions.PassThroughWhenStatusCodesAre(global::Nancy.HttpStatusCode.NotFound), _next);
            }
            finally
            {
                nancyBootstrapper.RequestContainerAdaptor = old;
            }
        }
示例#3
0
        public void Should_invoke_engine_with_requested_method()
        {
            // Given
            var nancyContext = new NancyContext()
            {
                Response = new Response()
            };

            A.CallTo(() => this.request.HttpMethod).Returns("POST");
            A.CallTo(() => this.engine.HandleRequest(
                         A <Request> .Ignored,
                         A <Func <NancyContext, NancyContext> > .Ignored,
                         A <CancellationToken> .Ignored))
            .Returns(TaskHelpers.GetCompletedTask(nancyContext));

            // When
            var task = this.handler.ProcessRequest(this.context, ar => { }, new object());

            NancyHandler.EndProcessRequest(task);

            // Then
            A.CallTo(() => this.engine.HandleRequest(A <Request>
                                                     .That
                                                     .Matches(x => x.Method.Equals("POST")), A <Func <NancyContext, NancyContext> > .Ignored, A <CancellationToken> .Ignored))
            .MustHaveHappened();
        }
示例#4
0
        public void Should_dispose_the_context()
        {
            // Given
            var disposable   = A.Fake <IDisposable>();
            var nancyContext = new NancyContext()
            {
                Response = new Response()
            };

            nancyContext.Items.Add("Disposable", disposable);
            A.CallTo(() => this.request.HttpMethod).Returns("GET");
            A.CallTo(() => this.engine.HandleRequest(
                         A <Request> .Ignored,
                         A <Func <NancyContext, NancyContext> > .Ignored,
                         A <CancellationToken> .Ignored))
            .Returns(TaskHelpers.GetCompletedTask(nancyContext));

            // When
            var task = this.handler.ProcessRequest(this.context, ar => { }, new object());

            NancyHandler.EndProcessRequest(task);

            // Then
            A.CallTo(() => disposable.Dispose()).MustHaveHappened(Repeated.Exactly.Once);
        }
示例#5
0
        public void Should_dispose_the_context()
        {
            // Given
            var disposable   = A.Fake <IDisposable>();
            var nancyContext = new NancyContext()
            {
                Response = new Response()
            };

            nancyContext.Items.Add("Disposable", disposable);
            A.CallTo(() => this.request.HttpMethod).Returns("GET");
            A.CallTo(() => this.engine.HandleRequest(
                         A <Request> .Ignored,
                         A <Action <NancyContext> > .Ignored,
                         A <Action <Exception> > .Ignored))
            .Invokes(f => ((Action <NancyContext>)f.Arguments[1]).Invoke(nancyContext));

            // When
            var task = this.handler.ProcessRequest(this.context, ar => { }, new object());

            NancyHandler.EndProcessRequest(task);

            // Then
            A.CallTo(() => disposable.Dispose()).MustHaveHappened(Repeated.Exactly.Once);
        }
示例#6
0
        public void Should_invoke_engine_with_requested_method()
        {
            // Given
            var nancyContext = new NancyContext()
            {
                Response = new Response()
            };

            A.CallTo(() => this.request.HttpMethod).Returns("POST");
            A.CallTo(() => this.engine.HandleRequest(
                         A <Request> .Ignored,
                         A <Action <NancyContext> > .Ignored,
                         A <Action <Exception> > .Ignored))
            .Invokes(f => ((Action <NancyContext>)f.Arguments[1]).Invoke(nancyContext));

            // When
            var task = this.handler.ProcessRequest(this.context, ar => { }, new object());

            NancyHandler.EndProcessRequest(task);

            // Then
            A.CallTo(() => this.engine.HandleRequest(A <Request>
                                                     .That
                                                     .Matches(x => x.Method.Equals("POST")), A <Action <NancyContext> > .Ignored, A <Action <Exception> > .Ignored))
            .MustHaveHappened();
        }
示例#7
0
        public NancyHandlerFixture()
        {
            this.context = A.Fake<HttpContextBase>();
            this.request = A.Fake<HttpRequestBase>();
            this.response = A.Fake<HttpResponseBase>();
            this.engine = A.Fake<INancyEngine>();
            this.handler = new NancyHandler(engine);
            this.formData = new NameValueCollection();

            A.CallTo(() => this.request.Form).ReturnsLazily(() => this.formData);
            A.CallTo(() => this.request.Url).Returns(new Uri("http://www.foo.com"));
            A.CallTo(() => this.request.InputStream).Returns(new MemoryStream());
            A.CallTo(() => this.request.Headers).Returns(new NameValueCollection());
            A.CallTo(() => this.request.AppRelativeCurrentExecutionFilePath).Returns("~/foo");

            A.CallTo(() => this.context.Request).Returns(this.request);
            A.CallTo(() => this.context.Response).Returns(this.response);
            A.CallTo(() => this.response.OutputStream).Returns(new MemoryStream());
        }
        public NancyHandlerFixture()
        {
            this.context  = A.Fake <HttpContextBase>();
            this.request  = A.Fake <HttpRequestBase>();
            this.response = A.Fake <HttpResponseBase>();
            this.engine   = A.Fake <INancyEngine>();
            this.handler  = new NancyHandler(engine);
            this.formData = new NameValueCollection();

            A.CallTo(() => this.request.Form).ReturnsLazily(() => this.formData);
            A.CallTo(() => this.request.Url).Returns(new Uri("http://www.foo.com"));
            A.CallTo(() => this.request.InputStream).Returns(new MemoryStream());
            A.CallTo(() => this.request.Headers).Returns(new NameValueCollection());
            A.CallTo(() => this.request.AppRelativeCurrentExecutionFilePath).Returns("~/foo");

            A.CallTo(() => this.context.Request).Returns(this.request);
            A.CallTo(() => this.context.Response).Returns(this.response);
            A.CallTo(() => this.response.OutputStream).Returns(new MemoryStream());
        }