From c6fe122d846414883e35cb05b86bb953bdad91ff Mon Sep 17 00:00:00 2001 From: Robert Dailey Date: Sun, 7 Apr 2024 09:24:38 -0500 Subject: [PATCH] fix: Media naming works again for Sonarr v4 The removal of Sonarr v3 support (commit d45563cf) introduced a bug resulting in media naming no longer working due to the `:4` key suffix not being checked anymore. Additionally, there were some tests under `src/tests/` that needed to be moved to `tests/`. One of these tests in particular helped identify this bug. Those tests have been moved to the appropriate location. --- .../Config/NamingFormatLookup.cs | 14 +++++ .../Config/SonarrMediaNamingConfigPhase.cs | 4 ++ src/nuget.config | 6 -- .../MediaNamingConfigPhaseIntegrationTest.cs | 2 +- .../Config/NamingFormatLookupTest.cs | 2 +- .../RadarrMediaNamingConfigPhaseTest.cs | 2 +- .../SonarrMediaNamingConfigPhaseTest.cs | 56 +------------------ 7 files changed, 22 insertions(+), 64 deletions(-) delete mode 100644 src/nuget.config rename {src/tests/Recyclarr.Cli.IntegrationTests/Pipelines => tests/Recyclarr.Cli.IntegrationTests}/MediaNamingConfigPhaseIntegrationTest.cs (93%) rename {src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases => tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming}/Config/NamingFormatLookupTest.cs (88%) rename {src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases => tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming}/Config/RadarrMediaNamingConfigPhaseTest.cs (95%) rename {src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases => tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming}/Config/SonarrMediaNamingConfigPhaseTest.cs (70%) diff --git a/src/Recyclarr.Cli/Pipelines/MediaNaming/PipelinePhases/Config/NamingFormatLookup.cs b/src/Recyclarr.Cli/Pipelines/MediaNaming/PipelinePhases/Config/NamingFormatLookup.cs index b1dee59c..e8df30d1 100644 --- a/src/Recyclarr.Cli/Pipelines/MediaNaming/PipelinePhases/Config/NamingFormatLookup.cs +++ b/src/Recyclarr.Cli/Pipelines/MediaNaming/PipelinePhases/Config/NamingFormatLookup.cs @@ -9,6 +9,15 @@ public class NamingFormatLookup IReadOnlyDictionary guideFormats, string? configFormatKey, string errorDescription) + { + return ObtainFormat(guideFormats, configFormatKey, null, errorDescription); + } + + public string? ObtainFormat( + IReadOnlyDictionary guideFormats, + string? configFormatKey, + string? keySuffix, + string errorDescription) { if (configFormatKey is null) { @@ -20,6 +29,11 @@ public class NamingFormatLookup var lowerKey = configFormatKey.ToLowerInvariant(); var keys = new List {lowerKey}; + if (keySuffix is not null) + { + // Put the more specific key first + keys.Insert(0, lowerKey + keySuffix); + } foreach (var k in keys) { diff --git a/src/Recyclarr.Cli/Pipelines/MediaNaming/PipelinePhases/Config/SonarrMediaNamingConfigPhase.cs b/src/Recyclarr.Cli/Pipelines/MediaNaming/PipelinePhases/Config/SonarrMediaNamingConfigPhase.cs index 0b1e37c1..35cb164d 100644 --- a/src/Recyclarr.Cli/Pipelines/MediaNaming/PipelinePhases/Config/SonarrMediaNamingConfigPhase.cs +++ b/src/Recyclarr.Cli/Pipelines/MediaNaming/PipelinePhases/Config/SonarrMediaNamingConfigPhase.cs @@ -13,6 +13,7 @@ public class SonarrMediaNamingConfigPhase : ServiceBasedMediaNamingConfigPhase(new SonarrMediaNamingDto { @@ -21,14 +22,17 @@ public class SonarrMediaNamingConfigPhase : ServiceBasedMediaNamingConfigPhase - - - - - \ No newline at end of file diff --git a/src/tests/Recyclarr.Cli.IntegrationTests/Pipelines/MediaNamingConfigPhaseIntegrationTest.cs b/tests/Recyclarr.Cli.IntegrationTests/MediaNamingConfigPhaseIntegrationTest.cs similarity index 93% rename from src/tests/Recyclarr.Cli.IntegrationTests/Pipelines/MediaNamingConfigPhaseIntegrationTest.cs rename to tests/Recyclarr.Cli.IntegrationTests/MediaNamingConfigPhaseIntegrationTest.cs index d3391511..c1ec0943 100644 --- a/src/tests/Recyclarr.Cli.IntegrationTests/Pipelines/MediaNamingConfigPhaseIntegrationTest.cs +++ b/tests/Recyclarr.Cli.IntegrationTests/MediaNamingConfigPhaseIntegrationTest.cs @@ -4,7 +4,7 @@ using Recyclarr.Cli.Pipelines.MediaNaming.PipelinePhases; using Recyclarr.Common; using Recyclarr.Config.Models; -namespace Recyclarr.Cli.IntegrationTests.Pipelines; +namespace Recyclarr.Cli.IntegrationTests; [TestFixture] [Parallelizable(ParallelScope.All)] diff --git a/src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases/Config/NamingFormatLookupTest.cs b/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/Config/NamingFormatLookupTest.cs similarity index 88% rename from src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases/Config/NamingFormatLookupTest.cs rename to tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/Config/NamingFormatLookupTest.cs index 4c6b5154..bde02578 100644 --- a/src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases/Config/NamingFormatLookupTest.cs +++ b/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/Config/NamingFormatLookupTest.cs @@ -1,6 +1,6 @@ using Recyclarr.Cli.Pipelines.MediaNaming.PipelinePhases.Config; -namespace Recyclarr.Cli.Tests.Pipelines.MediaNaming.PipelinePhases.Config; +namespace Recyclarr.Cli.Tests.Pipelines.MediaNaming.Config; [TestFixture] [Parallelizable(ParallelScope.All)] diff --git a/src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases/Config/RadarrMediaNamingConfigPhaseTest.cs b/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/Config/RadarrMediaNamingConfigPhaseTest.cs similarity index 95% rename from src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases/Config/RadarrMediaNamingConfigPhaseTest.cs rename to tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/Config/RadarrMediaNamingConfigPhaseTest.cs index 91fee91d..8e8a0fbc 100644 --- a/src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases/Config/RadarrMediaNamingConfigPhaseTest.cs +++ b/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/Config/RadarrMediaNamingConfigPhaseTest.cs @@ -3,7 +3,7 @@ using Recyclarr.Config.Models; using Recyclarr.ServarrApi.MediaNaming; using Recyclarr.TrashGuide.MediaNaming; -namespace Recyclarr.Cli.Tests.Pipelines.MediaNaming.PipelinePhases.Config; +namespace Recyclarr.Cli.Tests.Pipelines.MediaNaming.Config; [TestFixture] [Parallelizable(ParallelScope.All)] diff --git a/src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases/Config/SonarrMediaNamingConfigPhaseTest.cs b/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/Config/SonarrMediaNamingConfigPhaseTest.cs similarity index 70% rename from src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases/Config/SonarrMediaNamingConfigPhaseTest.cs rename to tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/Config/SonarrMediaNamingConfigPhaseTest.cs index 527cc107..46ae12e7 100644 --- a/src/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/PipelinePhases/Config/SonarrMediaNamingConfigPhaseTest.cs +++ b/tests/Recyclarr.Cli.Tests/Pipelines/MediaNaming/Config/SonarrMediaNamingConfigPhaseTest.cs @@ -5,7 +5,7 @@ using Recyclarr.Config.Models; using Recyclarr.ServarrApi.MediaNaming; using Recyclarr.TrashGuide.MediaNaming; -namespace Recyclarr.Cli.Tests.Pipelines.MediaNaming.PipelinePhases.Config; +namespace Recyclarr.Cli.Tests.Pipelines.MediaNaming.Config; [TestFixture] [Parallelizable(ParallelScope.All)] @@ -45,61 +45,12 @@ public class SonarrMediaNamingConfigPhaseTest } }; - [Test, AutoMockData] - public async Task Sonarr_v3_naming( - [Frozen] ISonarrCapabilityFetcher capabilities, - [Frozen] IMediaNamingGuideService guide, - SonarrMediaNamingConfigPhase sut) - { - capabilities.GetCapabilities(default!).ReturnsForAnyArgs(new SonarrCapabilities - { - SupportsCustomFormats = false - }); - - guide.GetSonarrNamingData().Returns(SonarrNamingData); - - var config = new SonarrConfiguration - { - InstanceName = "sonarr", - MediaNaming = new SonarrMediaNamingConfig - { - Season = "default", - Series = "plex", - Episodes = new SonarrEpisodeNamingConfig - { - Rename = true, - Standard = "default", - Daily = "default", - Anime = "default" - } - } - }; - - var result = await sut.ProcessNaming(config, guide, new NamingFormatLookup()); - - result.Should().NotBeNull(); - result.Should().BeEquivalentTo(new SonarrMediaNamingDto - { - RenameEpisodes = true, - SeasonFolderFormat = "season_default", - SeriesFolderFormat = "series_plex", - StandardEpisodeFormat = "episodes_standard_default_3", - DailyEpisodeFormat = "episodes_daily_default_3", - AnimeEpisodeFormat = "episodes_anime_default_3" - }); - } - [Test, AutoMockData] public async Task Sonarr_v4_naming( [Frozen] ISonarrCapabilityFetcher capabilities, [Frozen] IMediaNamingGuideService guide, SonarrMediaNamingConfigPhase sut) { - capabilities.GetCapabilities(default!).ReturnsForAnyArgs(new SonarrCapabilities - { - SupportsCustomFormats = true - }); - guide.GetSonarrNamingData().Returns(SonarrNamingData); var config = new SonarrConfiguration @@ -139,11 +90,6 @@ public class SonarrMediaNamingConfigPhaseTest [Frozen] IMediaNamingGuideService guide, SonarrMediaNamingConfigPhase sut) { - capabilities.GetCapabilities(default!).ReturnsForAnyArgs(new SonarrCapabilities - { - SupportsCustomFormats = true - }); - guide.GetSonarrNamingData().Returns(SonarrNamingData); var config = new SonarrConfiguration