using Common.Configuration.ContentBlocker; using Common.Configuration.DownloadCleaner; using Common.Configuration.QueueCleaner; using Infrastructure.Interceptors; using Infrastructure.Verticals.ContentBlocker; using Infrastructure.Verticals.DownloadClient; using Infrastructure.Verticals.Files; using Infrastructure.Verticals.ItemStriker; using Infrastructure.Verticals.Notifications; using Microsoft.Extensions.Caching.Memory; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using NSubstitute; namespace Infrastructure.Tests.Verticals.DownloadClient; public class DownloadServiceFixture : IDisposable { public ILogger Logger { get; set; } public IMemoryCache Cache { get; set; } public IStriker Striker { get; set; } public DownloadServiceFixture() { Logger = Substitute.For>(); Cache = Substitute.For(); Striker = Substitute.For(); } public TestDownloadService CreateSut( QueueCleanerConfig? queueCleanerConfig = null, ContentBlockerConfig? contentBlockerConfig = null ) { queueCleanerConfig ??= new QueueCleanerConfig { Enabled = true, RunSequentially = true, StalledResetStrikesOnProgress = true, StalledMaxStrikes = 3 }; var queueCleanerOptions = Substitute.For>(); queueCleanerOptions.Value.Returns(queueCleanerConfig); contentBlockerConfig ??= new ContentBlockerConfig { Enabled = true }; var contentBlockerOptions = Substitute.For>(); contentBlockerOptions.Value.Returns(contentBlockerConfig); var downloadCleanerOptions = Substitute.For>(); downloadCleanerOptions.Value.Returns(new DownloadCleanerConfig()); var filenameEvaluator = Substitute.For(); var notifier = Substitute.For(); var dryRunInterceptor = Substitute.For(); var hardlinkFileService = Substitute.For(); return new TestDownloadService( Logger, queueCleanerOptions, contentBlockerOptions, downloadCleanerOptions, Cache, filenameEvaluator, Striker, notifier, dryRunInterceptor, hardlinkFileService ); } public void Dispose() { // Cleanup if needed } }