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.
refit
Robert Dailey 4 weeks ago
parent cf9eeec476
commit c6fe122d84

@ -9,6 +9,15 @@ public class NamingFormatLookup
IReadOnlyDictionary<string, string> guideFormats,
string? configFormatKey,
string errorDescription)
{
return ObtainFormat(guideFormats, configFormatKey, null, errorDescription);
}
public string? ObtainFormat(
IReadOnlyDictionary<string, string> 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<string> {lowerKey};
if (keySuffix is not null)
{
// Put the more specific key first
keys.Insert(0, lowerKey + keySuffix);
}
foreach (var k in keys)
{

@ -13,6 +13,7 @@ public class SonarrMediaNamingConfigPhase : ServiceBasedMediaNamingConfigPhase<S
{
var guideData = guide.GetSonarrNamingData();
var configData = config.MediaNaming;
var keySuffix = ":4";
return Task.FromResult<MediaNamingDto>(new SonarrMediaNamingDto
{
@ -21,14 +22,17 @@ public class SonarrMediaNamingConfigPhase : ServiceBasedMediaNamingConfigPhase<S
StandardEpisodeFormat = lookup.ObtainFormat(
guideData.Episodes.Standard,
configData.Episodes?.Standard,
keySuffix,
"Standard Episode Format"),
DailyEpisodeFormat = lookup.ObtainFormat(
guideData.Episodes.Daily,
configData.Episodes?.Daily,
keySuffix,
"Daily Episode Format"),
AnimeEpisodeFormat = lookup.ObtainFormat(
guideData.Episodes.Anime,
configData.Episodes?.Anime,
keySuffix,
"Anime Episode Format"),
RenameEpisodes = configData.Episodes?.Rename
});

@ -1,6 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
</packageSources>
</configuration>

@ -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)]

@ -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)]

@ -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)]

@ -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
Loading…
Cancel
Save