using Recyclarr.TrashLib.Compatibility.Sonarr; using Recyclarr.TrashLib.Config; using Recyclarr.TrashLib.ExceptionTypes; using Recyclarr.TrashLib.TestLibrary; namespace Recyclarr.TrashLib.Tests.Compatibility.Sonarr; [TestFixture] [Parallelizable(ParallelScope.All)] public class SonarrCapabilityEnforcerTest { [Test, AutoMockData] public void Minimum_version_not_met( [Frozen] ISonarrCapabilityFetcher fetcher, SonarrCapabilityEnforcer sut) { var config = NewConfig.Sonarr(); var min = SonarrCapabilities.MinimumVersion; fetcher.GetCapabilities(default!).ReturnsForAnyArgs(new SonarrCapabilities { Version = new Version(min.Major, min.Minor, min.Build, min.Revision - 1) }); var act = () => sut.Check(config); act.Should().ThrowAsync().WithMessage("*minimum*"); } [Test, AutoMockData] public void Release_profiles_not_allowed_in_v4( [Frozen] ISonarrCapabilityFetcher fetcher, SonarrCapabilityEnforcer sut) { var config = NewConfig.Sonarr() with { ReleaseProfiles = new List { new() } }; fetcher.GetCapabilities(default!).ReturnsForAnyArgs(new SonarrCapabilities { SupportsCustomFormats = true }); var act = () => sut.Check(config); act.Should().ThrowAsync().WithMessage("*v3*"); } [Test, AutoMockData] public void Custom_formats_not_allowed_in_v3( [Frozen] ISonarrCapabilityFetcher fetcher, SonarrCapabilityEnforcer sut) { var config = NewConfig.Sonarr() with { CustomFormats = new List { new() } }; fetcher.GetCapabilities(default!).ReturnsForAnyArgs(new SonarrCapabilities { SupportsCustomFormats = false }); var act = () => sut.Check(config); act.Should().ThrowAsync().WithMessage("*custom formats*v4*"); } [Test, AutoMockData] public void Qualities_not_allowed_in_v3( [Frozen] ISonarrCapabilityFetcher fetcher, SonarrCapabilityEnforcer sut) { var config = NewConfig.Sonarr() with { QualityProfiles = new[] { new QualityProfileConfig { Qualities = new[] { new QualityProfileQualityConfig() } } } }; fetcher.GetCapabilities(default!).ReturnsForAnyArgs(new SonarrCapabilities { SupportsCustomFormats = false }); var act = () => sut.Check(config); act.Should().ThrowAsync().WithMessage("*qualities*v4*"); } }