rdt-client/server/RdtClient.Service.Test/Services/TorrentRunnerTest.cs
2026-05-14 16:48:38 -04:00

88 lines
No EOL
3.6 KiB
C#

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<Download>()
};
var torrentDataMock = new Mock<ITorrentData>(MockBehavior.Strict);
torrentDataMock.Setup(m => m.Get()).ReturnsAsync(new List<Torrent>
{
erroredTorrent
});
var torrents = new Torrents(Mock.Of<ILogger<Torrents>>(),
torrentDataMock.Object,
Mock.Of<IDownloads>(),
null!,
null!,
null!,
null!,
null!,
null!,
null!,
null!);
var torrentRunner = new TorrentRunner(Mock.Of<ILogger<TorrentRunner>>(),
torrents,
new Downloads(null!),
new RemoteService(null!, torrents),
Mock.Of<IHttpClientFactory>(),
new RateLimitCoordinator());
await torrentRunner.Tick();
torrentDataMock.Verify(m => m.UpdateComplete(It.IsAny<Guid>(),
It.IsAny<string?>(),
It.IsAny<DateTimeOffset?>(),
It.IsAny<bool>()),
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();
}
}
}