fix: Match categories by file without extension

File name comparisons using the markdown table anchor link was broken
because the extension (`.json`) was not stripped from the file name.
spectre-console-remove-di-hacks
Robert Dailey 7 months ago
parent 9f349d674a
commit 02d19c609b

@ -8,6 +8,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased]
### Fixed
- CLI: Some custom formats were not properly categorized when running `list custom-formats`.
## [6.0.1] - 2023-10-02
### Fixed

@ -9,11 +9,13 @@ public class CustomFormatLoader : ICustomFormatLoader
{
private readonly ServiceJsonLoader _loader;
private readonly ICustomFormatCategoryParser _categoryParser;
private readonly IFileSystem _fs;
public CustomFormatLoader(ServiceJsonLoader loader, ICustomFormatCategoryParser categoryParser)
public CustomFormatLoader(ServiceJsonLoader loader, ICustomFormatCategoryParser categoryParser, IFileSystem fs)
{
_loader = loader;
_categoryParser = categoryParser;
_fs = fs;
}
public ICollection<CustomFormatData> LoadAllCustomFormatsAtPaths(
@ -23,8 +25,9 @@ public class CustomFormatLoader : ICustomFormatLoader
var categories = _categoryParser.Parse(collectionOfCustomFormats).AsReadOnly();
return _loader.LoadAllFilesAtPaths<CustomFormatData>(jsonPaths, x => x.Select(cf =>
{
var matchingCategory = categories.FirstOrDefault(
y => y.CfName.EqualsIgnoreCase(cf.Obj.Name) || y.CfAnchor.EqualsIgnoreCase(cf.File.Name));
var matchingCategory = categories.FirstOrDefault(y =>
y.CfName.EqualsIgnoreCase(cf.Obj.Name) ||
y.CfAnchor.EqualsIgnoreCase(_fs.Path.GetFileNameWithoutExtension(cf.File.Name)));
return cf.Obj with
{

@ -1,5 +1,7 @@
using System.IO.Abstractions;
using System.Text.Json;
using Autofac;
using Recyclarr.TestLibrary.Autofac;
using Recyclarr.Tests.TestLibrary;
using Recyclarr.TrashGuide.CustomFormat;
@ -9,6 +11,12 @@ namespace Recyclarr.IntegrationTests;
[Parallelizable(ParallelScope.All)]
public class CustomFormatLoaderIntegrationTest : IntegrationTestFixture
{
protected override void RegisterStubsAndMocks(ContainerBuilder builder)
{
base.RegisterStubsAndMocks(builder);
builder.RegisterMockFor<ICustomFormatCategoryParser>();
}
[Test]
public void Get_custom_format_json_works()
{
@ -26,4 +34,24 @@ public class CustomFormatLoaderIntegrationTest : IntegrationTestFixture
NewCf.Data("second", "2")
}, o => o.Excluding(x => x.Type == typeof(JsonElement)));
}
[Test]
public void Categorize_by_file_name()
{
var categoryParser = Resolve<ICustomFormatCategoryParser>();
categoryParser.Parse(default!).ReturnsForAnyArgs(new[]
{
new CustomFormatCategoryItem("Streaming Services", "iTunes", "iT")
});
Fs.AddFile("it.json", new MockFileData("""{"name":"iT"}"""));
Fs.AddEmptyFile("collection_of_cfs.md");
var sut = Resolve<CustomFormatLoader>();
var dir = Fs.CurrentDirectory();
var results = sut.LoadAllCustomFormatsAtPaths(new[] {dir}, dir.File("collection_of_cfs.md"));
results.Should().ContainSingle().Which.Category.Should().Be("Streaming Services");
}
}

Loading…
Cancel
Save