Fixed crash when filtering by release type

This commit is contained in:
emeric
2025-11-10 16:52:43 +01:00
parent 1a2f317ddb
commit c4924d820c
2 changed files with 51 additions and 1 deletions
+2 -1
View File
@@ -50,7 +50,8 @@ namespace lms::db
if (!params.filters.clusters.empty()
|| params.filters.mediaLibrary.isValid()
|| params.filters.label.isValid())
|| params.filters.label.isValid()
|| params.filters.releaseType.isValid())
{
query.join("tracklist_entry t_l_e ON t_l_e.tracklist_id = t_l.id");
query.groupBy("t_l.id");
+49
View File
@@ -19,10 +19,15 @@
#include <list>
#include "database/objects/Release.hpp"
#include "database/objects/TrackList.hpp"
#include "Common.hpp"
namespace lms::db::tests
{
using ScopedReleaseType = ScopedEntity<db::ReleaseType>;
TEST_F(DatabaseFixture, SingleTrackList)
{
{
@@ -184,6 +189,50 @@ namespace lms::db::tests
}
}
TEST_F(DatabaseFixture, TrackList_ReleaseType)
{
ScopedTrackList trackList1{ session, "MytrackList1", TrackListType::PlayList };
ScopedTrackList trackList2{ session, "MytrackList2", TrackListType::PlayList };
ScopedTrack track1{ session };
ScopedTrack track2{ session };
ScopedReleaseType releaseType1{ session, "MyReleaseType1" };
ScopedReleaseType releaseType2{ session, "MyReleaseType2" };
ScopedRelease release1{ session, "MyRelease1" };
ScopedRelease release2{ session, "MyRelease2" };
{
auto transaction{ session.createWriteTransaction() };
session.create<TrackListEntry>(track1.get(), trackList1.get());
release1.get().modify()->addReleaseType(releaseType1.get());
track1.get().modify()->setRelease(release1.get());
session.create<TrackListEntry>(track2.get(), trackList2.get());
release2.get().modify()->addReleaseType(releaseType2.get());
track2.get().modify()->setRelease(release2.get());
}
{
auto transaction{ session.createReadTransaction() };
std::vector<TrackListId> visitedTrackLists;
TrackList::find(session, TrackList::FindParameters{}.setFilters(Filters{}.setReleaseType(releaseType1->getId())), [&](const TrackList::pointer& trackList) {
visitedTrackLists.push_back(trackList->getId());
});
ASSERT_EQ(visitedTrackLists.size(), 1);
EXPECT_EQ(visitedTrackLists[0], trackList1->getId());
}
{
auto transaction{ session.createReadTransaction() };
std::vector<TrackListId> visitedTrackLists;
TrackList::find(session, TrackList::FindParameters{}.setFilters(Filters{}.setReleaseType(releaseType2->getId())), [&](const TrackList::pointer& trackList) {
visitedTrackLists.push_back(trackList->getId());
});
ASSERT_EQ(visitedTrackLists.size(), 1);
EXPECT_EQ(visitedTrackLists[0], trackList2->getId());
}
}
TEST_F(DatabaseFixture, SingleTrackListSingleTrackWithCluster)
{
ScopedTrackList trackList1{ session, "MyTrackList1", TrackListType::PlayList };