public async Task SetsContentTypeHeader(JSendExceptionResult result)
        {
            // Exercise system
            var message = await result.ExecuteAsync(new CancellationToken());

            // Verify outcome
            message.Content.Headers.ContentType.MediaType.Should().Be("application/json");
        }
        public async Task SetsStatusCode(JSendExceptionResult result)
        {
            // Exercise system
            var message = await result.ExecuteAsync(new CancellationToken());

            // Verify outcome
            message.StatusCode.Should().Be(result.StatusCode);
        }
        public async Task ResponseIsSerializedIntoBody(JSendExceptionResult result)
        {
            // Fixture setup
            var serializedResponse = JsonConvert.SerializeObject(result.Response);
            // Exercise system
            var httpResponse = await result.ExecuteAsync(new CancellationToken());

            // Verify outcome
            var content = await httpResponse.Content.ReadAsStringAsync();

            content.Should().Be(serializedResponse);
        }
        /// <summary>
        /// Handles an exception by creating a <see cref="JSendExceptionResult"/> with the unhandled exception.
        /// </summary>
        /// <param name="actionExecutedContext">The context for the action.</param>
        /// <param name="cancellationToken">The token to monitor for cancellation requests.</param>
        /// <returns></returns>
        public override async Task OnExceptionAsync(HttpActionExecutedContext actionExecutedContext,
            CancellationToken cancellationToken)
        {
            if (actionExecutedContext == null) throw new ArgumentNullException("actionExecutedContext");

            Contract.Assert(actionExecutedContext.Exception != null);

            var exception = actionExecutedContext.Exception;
            var includeErrorDetail = actionExecutedContext.Request.ShouldIncludeErrorDetail();
            var request = actionExecutedContext.Request;

            var result = new JSendExceptionResult(exception, null, null, null,
                includeErrorDetail, request);

            actionExecutedContext.Response = await result.ExecuteAsync(cancellationToken);
        }
        /// <summary>
        /// Handles an exception by creating a <see cref="JSendExceptionResult"/> with the unhandled exception.
        /// </summary>
        /// <param name="actionExecutedContext">The context for the action.</param>
        /// <param name="cancellationToken">The token to monitor for cancellation requests.</param>
        /// <returns></returns>
        public override async Task OnExceptionAsync(HttpActionExecutedContext actionExecutedContext,
                                                    CancellationToken cancellationToken)
        {
            if (actionExecutedContext == null)
            {
                throw new ArgumentNullException("actionExecutedContext");
            }

            Contract.Assert(actionExecutedContext.Exception != null);

            var exception          = actionExecutedContext.Exception;
            var includeErrorDetail = actionExecutedContext.Request.ShouldIncludeErrorDetail();
            var request            = actionExecutedContext.Request;

            var result = new JSendExceptionResult(exception, null, null, null,
                                                  includeErrorDetail, request);

            actionExecutedContext.Response = await result.ExecuteAsync(cancellationToken);
        }
 public async Task SetsContentTypeHeader(JSendExceptionResult result)
 {
     // Exercise system
     var message = await result.ExecuteAsync(new CancellationToken());
     // Verify outcome
     message.Content.Headers.ContentType.MediaType.Should().Be("application/json");
 }
 public async Task SetsStatusCode(JSendExceptionResult result)
 {
     // Exercise system
     var message = await result.ExecuteAsync(new CancellationToken());
     // Verify outcome
     message.StatusCode.Should().Be(result.StatusCode);
 }
 public async Task ResponseIsSerializedIntoBody(JSendExceptionResult result)
 {
     // Fixture setup
     var serializedResponse = JsonConvert.SerializeObject(result.Response);
     // Exercise system
     var httpResponseMessage = await result.ExecuteAsync(new CancellationToken());
     // Verify outcome
     var content = await httpResponseMessage.Content.ReadAsStringAsync();
     content.Should().Be(serializedResponse);
 }