using System;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Dispatcher;
using System.Web.Http.ExceptionHandling;
using System.Web.Http.Tracing;
using Owin;
using Umbraco.Web;
using Umbraco.Web.Editors;
using Umbraco.Web.WebApi;
namespace Umbraco.Tests.TestHelpers.ControllerTesting
{
///
/// Startup class for the self-hosted web server works for OWIN and WebAPI
///
public class TestStartup
{
private readonly Func _controllerFactory;
private readonly Action _initialize;
public TestStartup(Action initialize, Func controllerFactory)
{
_controllerFactory = controllerFactory;
_initialize = initialize;
}
public void Configuration(IAppBuilder app)
{
var httpConfig = new HttpConfiguration();
// TODO: Enable this if you can't see the errors produced
//var traceWriter = httpConfig.EnableSystemDiagnosticsTracing();
//traceWriter.IsVerbose = true;
//traceWriter.MinimumLevel = TraceLevel.Debug;
httpConfig.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
// Add in a simple exception tracer so we can see what is causing the 500 Internal Server Error
httpConfig.Services.Add(typeof (IExceptionLogger), new TraceExceptionLogger());
httpConfig.Services.Replace(typeof (IAssembliesResolver), new SpecificAssemblyResolver(new[] { typeof (UsersController).Assembly }));
httpConfig.Services.Replace(typeof (IHttpControllerActivator), new TestControllerActivator(_controllerFactory));
httpConfig.Services.Replace(typeof (IHttpControllerSelector), new NamespaceHttpControllerSelector(httpConfig));
//auth everything
app.AuthenticateEverything();
_initialize(httpConfig);
app.UseWebApi(httpConfig);
}
}
}