diff --git a/NzbDrone.Api/NzbDroneApiModule.cs b/NzbDrone.Api/NzbDroneApiModule.cs index 589d4ffee..fdc2a46f7 100644 --- a/NzbDrone.Api/NzbDroneApiModule.cs +++ b/NzbDrone.Api/NzbDroneApiModule.cs @@ -8,7 +8,6 @@ namespace NzbDrone.Api protected NzbDroneApiModule(string resource) : base("/api/" + resource.Trim('/')) { - Options["/"] = x => new Response(); } } } \ No newline at end of file diff --git a/NzbDrone.Api/NzbDroneRestModule.cs b/NzbDrone.Api/NzbDroneRestModule.cs index e6246a269..4b07c11d1 100644 --- a/NzbDrone.Api/NzbDroneRestModule.cs +++ b/NzbDrone.Api/NzbDroneRestModule.cs @@ -1,6 +1,5 @@ using System; using System.Collections.Generic; -using Nancy.Security; using NzbDrone.Api.REST; using NzbDrone.Api.Validation; using NzbDrone.Core.Datastore; diff --git a/NzbDrone.Api/REST/RestModule.cs b/NzbDrone.Api/REST/RestModule.cs index 9e57625ab..60b279b56 100644 --- a/NzbDrone.Api/REST/RestModule.cs +++ b/NzbDrone.Api/REST/RestModule.cs @@ -145,6 +145,14 @@ namespace NzbDrone.Api.REST var resource = UpdateResource(ReadFromRequest()); return resource.AsResponse(HttpStatusCode.Accepted); }; + + Put[ID_ROUTE] = options => + { + var model = ReadFromRequest(); + model.Id = options.Id; + var resource = UpdateResource(model); + return resource.AsResponse(HttpStatusCode.Accepted); + }; } } @@ -153,6 +161,11 @@ namespace NzbDrone.Api.REST //TODO: handle when request is null var resource = Request.Body.FromJson(); + if (resource == null) + { + throw new BadRequestException("Request body can't be empty"); + } + var errors = SharedValidator.Validate(resource).Errors.ToList(); if (Request.Method.Equals("POST", StringComparison.InvariantCultureIgnoreCase)) diff --git a/NzbDrone.Api/System/SystemModule.cs b/NzbDrone.Api/System/SystemModule.cs index 80a4056bf..b98797bcc 100644 --- a/NzbDrone.Api/System/SystemModule.cs +++ b/NzbDrone.Api/System/SystemModule.cs @@ -1,18 +1,23 @@ using Nancy; +using Nancy.Routing; using NzbDrone.Common; using NzbDrone.Api.Extensions; +using System.Linq; namespace NzbDrone.Api.System { public class SystemModule : NzbDroneApiModule { private readonly IEnvironmentProvider _environmentProvider; + private readonly IRouteCacheProvider _routeCacheProvider; - public SystemModule(IEnvironmentProvider environmentProvider) + public SystemModule(IEnvironmentProvider environmentProvider, IRouteCacheProvider routeCacheProvider) : base("system") { _environmentProvider = environmentProvider; + _routeCacheProvider = routeCacheProvider; Get["/status"] = x => GetStatus(); + Get["/routes"] = x => GetRoutes(); } private Response GetStatus() @@ -29,9 +34,15 @@ namespace NzbDrone.Api.System IsMono = EnvironmentProvider.IsMono, IsProduction = EnvironmentProvider.IsProduction, IsDebug = EnvironmentProvider.IsDebug, - IsLinux = EnvironmentProvider.IsLinux + IsLinux = EnvironmentProvider.IsLinux, }.AsResponse(); } + + + private Response GetRoutes() + { + return _routeCacheProvider.GetCache().Values.AsResponse(); + } } } diff --git a/NzbDrone.Integration.Test/IntegrationTest.cs b/NzbDrone.Integration.Test/IntegrationTest.cs index 0b1223c18..f8881e701 100644 --- a/NzbDrone.Integration.Test/IntegrationTest.cs +++ b/NzbDrone.Integration.Test/IntegrationTest.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using System.IO; using System.Linq; using Moq; @@ -13,6 +14,7 @@ using NzbDrone.Common; using NzbDrone.Common.Composition; using NzbDrone.Core.Configuration; using NzbDrone.Core.Datastore; +using NzbDrone.Core.Jobs; using NzbDrone.Integration.Test.Client; using NzbDrone.Owin; using NzbDrone.Owin.MiddleWare; @@ -85,6 +87,11 @@ namespace NzbDrone.Integration.Test InitDatabase(); + var taskManagerMock = new Mock(); + taskManagerMock.Setup(c => c.GetPending()).Returns(new List()); + + Container.TinyContainer.Register(taskManagerMock.Object); + _bootstrapper = new NancyBootstrapper(Container.TinyContainer);