From 4c5c9f3431b5cc6ef002e302cc62a1ff93c4b99c Mon Sep 17 00:00:00 2001 From: emeric Date: Fri, 12 Sep 2025 09:01:45 +0200 Subject: [PATCH] Added unit tests for custom ALBUMARTISTSSORT tag support, ref #734 --- src/libs/metadata/test/AudioFileParser.cpp | 66 +++++++++++++++++++++- src/libs/metadata/test/TestTagReader.hpp | 3 +- 2 files changed, 66 insertions(+), 3 deletions(-) diff --git a/src/libs/metadata/test/AudioFileParser.cpp b/src/libs/metadata/test/AudioFileParser.cpp index 2b72d83e..c98b179c 100644 --- a/src/libs/metadata/test/AudioFileParser.cpp +++ b/src/libs/metadata/test/AudioFileParser.cpp @@ -160,10 +160,10 @@ namespace lms::metadata::tests EXPECT_EQ(release.artistDisplayName, "MyAlbumArtist1 & MyAlbumArtist2"); ASSERT_EQ(release.artists.size(), 2); EXPECT_EQ(release.artists[0].name, "MyAlbumArtist1"); - EXPECT_EQ(release.artists[0].sortName, "MyAlbumArtist1SortName"); + EXPECT_EQ(release.artists[0].sortName, "MyAlbumArtists1SortName"); EXPECT_EQ(release.artists[0].mbid, core::UUID::fromString("6fbf097c-1487-43e8-874b-50dd074398a7")); EXPECT_EQ(release.artists[1].name, "MyAlbumArtist2"); - EXPECT_EQ(release.artists[1].sortName, "MyAlbumArtist2SortName"); + EXPECT_EQ(release.artists[1].sortName, "MyAlbumArtists2SortName"); EXPECT_EQ(release.artists[1].mbid, core::UUID::fromString("5ed3d6b3-2aed-4a03-828c-3c4d4f7406e1")); EXPECT_TRUE(release.isCompilation); EXPECT_EQ(release.barcode, "MyBarcode"); @@ -797,6 +797,68 @@ namespace lms::metadata::tests } } + TEST(AudioFileParser, albumartist_sortNameFallback) + { + { + const TestTagReader testTags{ + { + { TagType::Album, { "MyAlbum" } }, + { TagType::AlbumArtist, { "MyArtist" } }, + { TagType::AlbumArtistSortOrder, { "MyArtistSortName" } }, + // No ArtistSortOrder + } + }; + std::unique_ptr track{ TestAudioFileParser{}.parseMetaData(testTags) }; + + ASSERT_TRUE(track->medium.has_value()); + ASSERT_TRUE(track->medium->release.has_value()); + + const auto& artists{ track->medium->release->artists }; + ASSERT_EQ(artists.size(), 1); + EXPECT_EQ(artists[0].sortName, "MyArtistSortName"); + } + + { + const TestTagReader testTags{ + { + { TagType::Album, { "MyAlbum" } }, + { TagType::AlbumArtist, { "MyArtist" } }, + { TagType::AlbumArtistsSortOrder, { "MyArtistSortName" } }, + // No ArtistSortOrder + } + }; + std::unique_ptr track{ TestAudioFileParser{}.parseMetaData(testTags) }; + + ASSERT_TRUE(track->medium.has_value()); + ASSERT_TRUE(track->medium->release.has_value()); + + const auto& artists{ track->medium->release->artists }; + ASSERT_EQ(artists.size(), 1); + EXPECT_EQ(artists[0].sortName, "MyArtistSortName"); + } + + { + const TestTagReader testTags{ + { + { TagType::Album, { "MyAlbum" } }, + + { TagType::AlbumArtist, { "MyArtist" } }, + { TagType::AlbumArtistSortOrder, { "MyArtistSortNameNotUsed" } }, + { TagType::AlbumArtistsSortOrder, { "MyArtistSortName" } }, + // No ArtistSortOrder + } + }; + std::unique_ptr track{ TestAudioFileParser{}.parseMetaData(testTags) }; + + ASSERT_TRUE(track->medium.has_value()); + ASSERT_TRUE(track->medium->release.has_value()); + + const auto& artists{ track->medium->release->artists }; + ASSERT_EQ(artists.size(), 1); + EXPECT_EQ(artists[0].sortName, "MyArtistSortName"); + } + } + TEST(AudioFileParser, advisory) { auto doTest = [](std::string_view value, std::optional expectedValue) { diff --git a/src/libs/metadata/test/TestTagReader.hpp b/src/libs/metadata/test/TestTagReader.hpp index 12aa2efe..32f47f39 100644 --- a/src/libs/metadata/test/TestTagReader.hpp +++ b/src/libs/metadata/test/TestTagReader.hpp @@ -120,7 +120,8 @@ namespace lms::metadata::tests { TagType::ArtistsSortOrder, { "MyArtists1SortName", "MyArtists2SortName" } }, { TagType::AlbumArtist, { "MyAlbumArtist1 & MyAlbumArtist2" } }, { TagType::AlbumArtists, { "MyAlbumArtist1", "MyAlbumArtist2" } }, - { TagType::AlbumArtistsSortOrder, { "MyAlbumArtist1SortName", "MyAlbumArtist2SortName" } }, + { TagType::AlbumArtistSortOrder, { "MyAlbumArtist1SortName", "MyAlbumArtist2SortName" } }, + { TagType::AlbumArtistsSortOrder, { "MyAlbumArtists1SortName", "MyAlbumArtists2SortName" } }, { TagType::AlbumComment, { "MyAlbumComment" } }, { TagType::Barcode, { "MyBarcode" } }, { TagType::Comment, { "Comment1", "Comment2" } },