When an artist is referred to using several names, pick first the one set in the artist info file, and fallback on the most recent release, ref #731
This commit is contained in:
@@ -934,4 +934,43 @@ namespace lms::db::tests
|
||||
EXPECT_EQ(artist->getPreferredArtwork(), Artwork::pointer{});
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Artist_findWithMBIDNameVariants)
|
||||
{
|
||||
ScopedArtist artistA{ session, "ArtistA" };
|
||||
ScopedArtist artistB{ session, "ArtistB" };
|
||||
|
||||
ScopedTrack trackA1{ session };
|
||||
ScopedTrack trackA2{ session };
|
||||
ScopedTrack trackB1{ session };
|
||||
|
||||
{
|
||||
auto transaction{ session.createWriteTransaction() };
|
||||
|
||||
{
|
||||
auto link{ TrackArtistLink::create(session, trackA1.get(), artistA.get(), TrackArtistLinkType::Artist, true) };
|
||||
link.modify()->setArtistName("ArtistA");
|
||||
}
|
||||
{
|
||||
auto link{ TrackArtistLink::create(session, trackA2.get(), artistA.get(), TrackArtistLinkType::Artist, true) };
|
||||
link.modify()->setArtistName("AlternateArtistA");
|
||||
}
|
||||
|
||||
{
|
||||
auto link{ TrackArtistLink::create(session, trackB1.get(), artistB.get(), TrackArtistLinkType::Artist, true) };
|
||||
link.modify()->setArtistName("ArtistB");
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
ArtistId lastRetrievedArtist;
|
||||
const auto results{ Artist::findWithMBIDNameVariants(session, lastRetrievedArtist) };
|
||||
|
||||
ASSERT_EQ(results.results.size(), 1);
|
||||
EXPECT_EQ(results.results[0]->getId(), artistA.getId());
|
||||
EXPECT_EQ(lastRetrievedArtist, artistA.getId());
|
||||
}
|
||||
}
|
||||
} // namespace lms::db::tests
|
||||
|
||||
@@ -18,8 +18,8 @@
|
||||
*/
|
||||
|
||||
#include "Common.hpp"
|
||||
#include "database/Types.hpp"
|
||||
|
||||
#include "database/Types.hpp"
|
||||
#include "database/objects/TrackArtistLink.hpp"
|
||||
|
||||
namespace lms::db::tests
|
||||
@@ -183,4 +183,43 @@ namespace lms::db::tests
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, TrackArtistLink_findWithOriginalDateDesc)
|
||||
{
|
||||
ScopedArtist artist{ session, "MyArtist" };
|
||||
ScopedTrack track1{ session };
|
||||
ScopedTrack track2{ session };
|
||||
|
||||
{
|
||||
auto transaction{ session.createWriteTransaction() };
|
||||
|
||||
{
|
||||
auto link1{ session.create<TrackArtistLink>(track1.get(), artist.get(), TrackArtistLinkType::Artist, false) };
|
||||
link1.modify()->setArtistName("MyArtistOldName");
|
||||
track1.get().modify()->setOriginalDate(core::PartialDateTime{ 1990, 1 });
|
||||
}
|
||||
|
||||
{
|
||||
auto link2{ session.create<TrackArtistLink>(track2.get(), artist.get(), TrackArtistLinkType::Artist, false) };
|
||||
link2.modify()->setArtistName("MyArtistNewName");
|
||||
track2.get().modify()->setOriginalDate(core::PartialDateTime{ 1995, 1 });
|
||||
}
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
TrackArtistLink::FindParameters params;
|
||||
params.setSortMethod(TrackArtistLinkSortMethod::OriginalDateDesc);
|
||||
params.setArtist(artist->getId());
|
||||
|
||||
std::vector<TrackArtistLink::pointer> links;
|
||||
TrackArtistLink::find(session, params, [&](const TrackArtistLink::pointer& link) {
|
||||
links.push_back(link);
|
||||
});
|
||||
ASSERT_EQ(links.size(), 2);
|
||||
EXPECT_EQ(links[0]->getArtistName(), "MyArtistNewName");
|
||||
EXPECT_EQ(links[1]->getArtistName(), "MyArtistOldName");
|
||||
}
|
||||
}
|
||||
} // namespace lms::db::tests
|
||||
Reference in New Issue
Block a user