diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadStationTests/TorrentDownloadStationFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadStationTests/TorrentDownloadStationFixture.cs index 8a022e6c1..2c3897e34 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadStationTests/TorrentDownloadStationFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadStationTests/TorrentDownloadStationFixture.cs @@ -7,6 +7,7 @@ using NUnit.Framework; using NzbDrone.Common.Disk; using NzbDrone.Common.Http; using NzbDrone.Core.Download; +using NzbDrone.Core.Download.Clients; using NzbDrone.Core.Download.Clients.DownloadStation; using NzbDrone.Core.Download.Clients.DownloadStation.Proxies; using NzbDrone.Core.MediaFiles.TorrentInfo; @@ -296,6 +297,17 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests .Returns((path, setttings, serial) => _physicalPath); } + protected void GivenSharedFolder(string share) + { + Mocker.GetMock() + .Setup(s => s.RemapToFullPath(It.IsAny(), It.IsAny(), It.IsAny())) + .Throws(new DownloadClientException("There is no matching shared folder")); + + Mocker.GetMock() + .Setup(s => s.RemapToFullPath(It.Is(x => x.FullPath == share), It.IsAny(), It.IsAny())) + .Returns((path, setttings, serial) => _physicalPath); + } + protected void GivenSerialNumber() { Mocker.GetMock() @@ -495,6 +507,41 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests .Verify(v => v.AddTaskFromUrl(It.IsAny(), null, _settings), Times.Never()); } + [Test] + public void GetStatus_should_map_outputpath_when_using_default() + { + GivenSerialNumber(); + GivenSharedFolder("/somepath"); + + var status = Subject.GetStatus(); + + status.OutputRootFolders.First().Should().Be(_physicalPath); + } + + [Test] + public void GetStatus_should_map_outputpath_when_using_destination() + { + GivenSerialNumber(); + GivenTvDirectory(); + GivenSharedFolder($"/{_musicDirectory}"); + + var status = Subject.GetStatus(); + + status.OutputRootFolders.First().Should().Be(_physicalPath); + } + + [Test] + public void GetStatus_should_map_outputpath_when_using_category() + { + GivenSerialNumber(); + GivenMusicCategory(); + GivenSharedFolder($"/somepath/{_category}"); + + var status = Subject.GetStatus(); + + status.OutputRootFolders.First().Should().Be(_physicalPath); + } + [Test] public void GetItems_should_set_outputPath_to_base_folder_when_single_file_non_finished_tasks() { diff --git a/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadStationTests/UsenetDownloadStationFixture.cs b/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadStationTests/UsenetDownloadStationFixture.cs index d7438f1b6..385aa6fdd 100644 --- a/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadStationTests/UsenetDownloadStationFixture.cs +++ b/src/NzbDrone.Core.Test/Download/DownloadClientTests/DownloadStationTests/UsenetDownloadStationFixture.cs @@ -9,10 +9,10 @@ using NzbDrone.Common.Http; using NzbDrone.Core.Download; using NzbDrone.Core.Download.Clients.DownloadStation; using NzbDrone.Core.Download.Clients.DownloadStation.Proxies; -using NzbDrone.Core.MediaFiles.TorrentInfo; using NzbDrone.Core.Parser.Model; using NzbDrone.Test.Common; using NzbDrone.Core.Organizer; +using NzbDrone.Core.Download.Clients; namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests { @@ -189,6 +189,18 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests .Returns((path, setttings, serial) => _physicalPath); } + protected void GivenSharedFolder(string share) + { + Mocker.GetMock() + .Setup(s => s.RemapToFullPath(It.IsAny(), It.IsAny(), It.IsAny())) + .Throws(new DownloadClientException("There is no matching shared folder")); + + Mocker.GetMock() + .Setup(s => s.RemapToFullPath(It.Is(x => x.FullPath == share), It.IsAny(), It.IsAny())) + .Returns((path, setttings, serial) => _physicalPath); + } + + protected void GivenSerialNumber() { Mocker.GetMock() @@ -373,6 +385,41 @@ namespace NzbDrone.Core.Test.Download.DownloadClientTests.DownloadStationTests Mocker.GetMock() .Verify(v => v.AddTaskFromUrl(It.IsAny(), null, _settings), Times.Never()); } + + [Test] + public void GetStatus_should_map_outputpath_when_using_default() + { + GivenSerialNumber(); + GivenSharedFolder("/somepath"); + + var status = Subject.GetStatus(); + + status.OutputRootFolders.First().Should().Be(_physicalPath); + } + + [Test] + public void GetStatus_should_map_outputpath_when_using_destination() + { + GivenSerialNumber(); + GivenTvDirectory(); + GivenSharedFolder($"/{_musicDirectory}"); + + var status = Subject.GetStatus(); + + status.OutputRootFolders.First().Should().Be(_physicalPath); + } + + [Test] + public void GetStatus_should_map_outputpath_when_using_category() + { + GivenSerialNumber(); + GivenMusicCategory(); + GivenSharedFolder($"/somepath/{_category}"); + + var status = Subject.GetStatus(); + + status.OutputRootFolders.First().Should().Be(_physicalPath); + } [Test] public void GetItems_should_not_map_outputpath_for_queued_or_downloading_tasks() diff --git a/src/NzbDrone.Core/Download/Clients/DownloadStation/TorrentDownloadStation.cs b/src/NzbDrone.Core/Download/Clients/DownloadStation/TorrentDownloadStation.cs index e028d718c..35bfc516d 100644 --- a/src/NzbDrone.Core/Download/Clients/DownloadStation/TorrentDownloadStation.cs +++ b/src/NzbDrone.Core/Download/Clients/DownloadStation/TorrentDownloadStation.cs @@ -113,12 +113,15 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation { try { - var path = GetDownloadDirectory(); + var serialNumber = _serialNumberProvider.GetSerialNumber(Settings); + var sharedFolder = GetDownloadDirectory() ?? GetDefaultDir(); + var outputPath = new OsPath($"/{sharedFolder.TrimStart('/')}"); + var path = _sharedFolderResolver.RemapToFullPath(outputPath, Settings, serialNumber); return new DownloadClientInfo { IsLocalhost = Settings.Host == "127.0.0.1" || Settings.Host == "localhost", - OutputRootFolders = new List { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, new OsPath(path)) } + OutputRootFolders = new List { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, path) } }; } catch (DownloadClientException e) diff --git a/src/NzbDrone.Core/Download/Clients/DownloadStation/UsenetDownloadStation.cs b/src/NzbDrone.Core/Download/Clients/DownloadStation/UsenetDownloadStation.cs index dbe3889a4..7dc638c57 100644 --- a/src/NzbDrone.Core/Download/Clients/DownloadStation/UsenetDownloadStation.cs +++ b/src/NzbDrone.Core/Download/Clients/DownloadStation/UsenetDownloadStation.cs @@ -138,12 +138,15 @@ namespace NzbDrone.Core.Download.Clients.DownloadStation { try { - var path = GetDownloadDirectory(); + var serialNumber = _serialNumberProvider.GetSerialNumber(Settings); + var sharedFolder = GetDownloadDirectory() ?? GetDefaultDir(); + var outputPath = new OsPath($"/{sharedFolder.TrimStart('/')}"); + var path = _sharedFolderResolver.RemapToFullPath(outputPath, Settings, serialNumber); return new DownloadClientInfo { IsLocalhost = Settings.Host == "127.0.0.1" || Settings.Host == "localhost", - OutputRootFolders = new List { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, new OsPath(path)) } + OutputRootFolders = new List { _remotePathMappingService.RemapRemoteToLocal(Settings.Host, path) } }; } catch (DownloadClientException e)