public void transforms_given_exception_to_error_response()
        {
            const string title = "Foo title";
            const string message = "Foo message";
            const HttpStatusCode statusCode = HttpStatusCode.NotFound;

            var transformer = new ExceptionTransformer();
            transformer.AddTransformer<ArgumentException>(e =>
            {
                return new ErrorResponse(statusCode, title, e.Message);
            });

            var errorResponse = transformer.Transform(new ArgumentException(message));

            errorResponse.Title.ShouldEqual(title);
            errorResponse.Message.ShouldEqual(message);
            errorResponse.HttpStatusCode.ShouldEqual(statusCode);
        }
        public void Configuration(IAppBuilder appBuilder)
        {
            var config = new HttpConfiguration();

            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "{controller}/{id}",
                defaults: new { controller = "Home", id = RouteParameter.Optional }
                );

            config.Formatters.Clear();
            config.Formatters.Add(new HyperfriendlyJsonMediaTypeFormatter());
            var transformer = new ExceptionTransformer{ DefaultTransformer = e => new ErrorResponse(HttpStatusCode.InternalServerError, "Error!", "Something bad happened!")};
            transformer.AddTransformer<OhNoException>(e => new ErrorResponse(HttpStatusCode.BadRequest, e.Shout, e.Shout + " Something bad happened!"));
            config.Services.Replace(typeof(IExceptionHandler), new HyperfriendlyExceptionHandler(transformer));
            appBuilder.UseWebApi(config);
        }