diff --git a/src/libs/database/impl/objects/TrackList.cpp b/src/libs/database/impl/objects/TrackList.cpp index a32efa7a..5ef0393c 100644 --- a/src/libs/database/impl/objects/TrackList.cpp +++ b/src/libs/database/impl/objects/TrackList.cpp @@ -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"); diff --git a/src/libs/database/test/TrackList.cpp b/src/libs/database/test/TrackList.cpp index 36aaacf4..33320ebb 100644 --- a/src/libs/database/test/TrackList.cpp +++ b/src/libs/database/test/TrackList.cpp @@ -19,10 +19,15 @@ #include +#include "database/objects/Release.hpp" +#include "database/objects/TrackList.hpp" + #include "Common.hpp" namespace lms::db::tests { + using ScopedReleaseType = ScopedEntity; + 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(track1.get(), trackList1.get()); + release1.get().modify()->addReleaseType(releaseType1.get()); + track1.get().modify()->setRelease(release1.get()); + + session.create(track2.get(), trackList2.get()); + release2.get().modify()->addReleaseType(releaseType2.get()); + track2.get().modify()->setRelease(release2.get()); + } + + { + auto transaction{ session.createReadTransaction() }; + std::vector 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 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 };