diff --git a/server/RdtClient.Service.Test/Services/TorrentRunnerTest.cs b/server/RdtClient.Service.Test/Services/TorrentRunnerTest.cs new file mode 100644 index 0000000..af1da08 --- /dev/null +++ b/server/RdtClient.Service.Test/Services/TorrentRunnerTest.cs @@ -0,0 +1,88 @@ +using Microsoft.Extensions.Logging; +using Moq; +using RdtClient.Data.Data; +using RdtClient.Data.Enums; +using RdtClient.Data.Models.Data; +using RdtClient.Service.Helpers; +using RdtClient.Service.Services; + +namespace RdtClient.Service.Test.Services; + +public class TorrentRunnerTest +{ + [Fact] + public async Task Tick_ShouldNotRequeueCompletedErrorTorrent() + { + var originalApiKey = Settings.Get.Provider.ApiKey; + var originalProvider = Settings.Get.Provider.Provider; + var originalMaxParallelDownloads = Settings.Get.Provider.MaxParallelDownloads; + var originalDownloadPath = Settings.Get.DownloadClient.DownloadPath; + + TorrentRunner.ActiveDownloadClients.Clear(); + TorrentRunner.ActiveUnpackClients.Clear(); + + try + { + Settings.Get.Provider.ApiKey = "test-api-key"; + Settings.Get.Provider.Provider = Provider.RealDebrid; + Settings.Get.Provider.MaxParallelDownloads = 1; + Settings.Get.DownloadClient.DownloadPath = "/downloads"; + + var erroredTorrent = new Torrent + { + TorrentId = Guid.NewGuid(), + Hash = "hash-1", + RdName = "Torrent 1", + FileOrMagnet = "magnet:?xt=urn:btih:hash-1", + Type = DownloadType.Torrent, + RdStatus = TorrentStatus.Queued, + DeleteOnError = 10, + Error = "Could not add to provider: Infringing file", + Completed = DateTimeOffset.UtcNow.AddMinutes(-5), + Downloads = new List() + }; + + var torrentDataMock = new Mock(MockBehavior.Strict); + torrentDataMock.Setup(m => m.Get()).ReturnsAsync(new List + { + erroredTorrent + }); + + var torrents = new Torrents(Mock.Of>(), + torrentDataMock.Object, + Mock.Of(), + null!, + null!, + null!, + null!, + null!, + null!, + null!, + null!); + + var torrentRunner = new TorrentRunner(Mock.Of>(), + torrents, + new Downloads(null!), + new RemoteService(null!, torrents), + Mock.Of(), + new RateLimitCoordinator()); + + await torrentRunner.Tick(); + + torrentDataMock.Verify(m => m.UpdateComplete(It.IsAny(), + It.IsAny(), + It.IsAny(), + It.IsAny()), + Times.Never); + } + finally + { + Settings.Get.Provider.ApiKey = originalApiKey; + Settings.Get.Provider.Provider = originalProvider; + Settings.Get.Provider.MaxParallelDownloads = originalMaxParallelDownloads; + Settings.Get.DownloadClient.DownloadPath = originalDownloadPath; + TorrentRunner.ActiveDownloadClients.Clear(); + TorrentRunner.ActiveUnpackClients.Clear(); + } + } +} \ No newline at end of file diff --git a/server/RdtClient.Service/Services/TorrentRunner.cs b/server/RdtClient.Service/Services/TorrentRunner.cs index bb9da16..761057b 100644 --- a/server/RdtClient.Service/Services/TorrentRunner.cs +++ b/server/RdtClient.Service/Services/TorrentRunner.cs @@ -367,7 +367,7 @@ public class TorrentRunner( } // Process torrents in DebridQueue - var torrentsToAddToProvider = allTorrents.Where(m => m.RdId == null && m.RdAdded == null && m.FileOrMagnet != null && m.RdStatus == TorrentStatus.Queued) + var torrentsToAddToProvider = allTorrents.Where(m => m.Completed == null && m.Error == null && m.RdId == null && m.RdAdded == null && m.FileOrMagnet != null && m.RdStatus == TorrentStatus.Queued) .ToList(); if (torrentsToAddToProvider.Count != 0)