Initial support for multi library, still WIP

This commit is contained in:
emeric
2024-01-25 00:01:11 +01:00
parent f5f577af52
commit 0ed3f1ba79
85 changed files with 3076 additions and 1445 deletions
+33
View File
@@ -148,6 +148,39 @@ TEST_F(DatabaseFixture, Artist_singleTrack)
}
}
TEST_F(DatabaseFixture, Artist_singleTrack_mediaLibrary)
{
ScopedTrack track{ session, "MyTrack" };
ScopedArtist artist{ session, "MyArtist" };
ScopedMediaLibrary library{ session };
ScopedMediaLibrary otherLibrary{ session };
{
auto transaction{ session.createWriteTransaction() };
track.get().modify()->setName("MyTrackName");
TrackArtistLink::create(session, track.get(), artist.get(), TrackArtistLinkType::Artist);
track.get().modify()->setMediaLibrary(library.get());
}
{
auto transaction{ session.createReadTransaction() };
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setTrack(track->getId())) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results.front(), artist.getId());
}
{
auto transaction{ session.createReadTransaction() };
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setMediaLibrary(library->getId())) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results.front(), artist.getId());
}
{
auto transaction{ session.createReadTransaction() };
auto artists{ Artist::findIds(session, Artist::FindParameters{}.setMediaLibrary(otherLibrary->getId())) };
EXPECT_EQ(artists.results.size(), 0);
}
}
TEST_F(DatabaseFixture, Artist_singleTracktMultiRoles)
{
ScopedTrack track{ session, "MyTrack" };
+65 -63
View File
@@ -28,6 +28,7 @@
#include "database/Cluster.hpp"
#include "database/Db.hpp"
#include "database/Listen.hpp"
#include "database/MediaLibrary.hpp"
#include "database/Release.hpp"
#include "database/ScanSettings.hpp"
#include "database/Session.hpp"
@@ -42,65 +43,66 @@
template <typename T>
class [[nodiscard]] ScopedEntity
{
public:
using IdType = typename T::IdType;
public:
using IdType = typename T::IdType;
template <typename... Args>
ScopedEntity(Database::Session& session, Args&& ...args)
: _session {session}
{
auto transaction {_session.createWriteTransaction()};
template <typename... Args>
ScopedEntity(Database::Session& session, Args&& ...args)
: _session{ session }
{
auto transaction{ _session.createWriteTransaction() };
auto entity {_session.create<T>(std::forward<Args>(args)...)};
EXPECT_TRUE(entity);
_id = entity->getId();
}
auto entity{ _session.create<T>(std::forward<Args>(args)...) };
EXPECT_TRUE(entity);
_id = entity->getId();
}
~ScopedEntity()
{
auto transaction {_session.createWriteTransaction()};
~ScopedEntity()
{
auto transaction{ _session.createWriteTransaction() };
auto entity {T::find(_session, _id)};
// could not be here due to "on delete cascade" constraints...
if (entity)
entity.remove();
}
auto entity{ T::find(_session, _id) };
// could not be here due to "on delete cascade" constraints...
if (entity)
entity.remove();
}
ScopedEntity(const ScopedEntity&) = delete;
ScopedEntity(ScopedEntity&&) = delete;
ScopedEntity& operator=(const ScopedEntity&) = delete;
ScopedEntity& operator=(ScopedEntity&&) = delete;
ScopedEntity(const ScopedEntity&) = delete;
ScopedEntity(ScopedEntity&&) = delete;
ScopedEntity& operator=(const ScopedEntity&) = delete;
ScopedEntity& operator=(ScopedEntity&&) = delete;
typename T::pointer lockAndGet()
{
auto transaction {_session.createReadTransaction()};
return get();
}
typename T::pointer lockAndGet()
{
auto transaction{ _session.createReadTransaction() };
return get();
}
typename T::pointer get()
{
_session.checkReadTransaction();
typename T::pointer get()
{
_session.checkReadTransaction();
auto entity {T::find(_session, _id)};
EXPECT_TRUE(entity);
return entity;
}
auto entity{ T::find(_session, _id) };
EXPECT_TRUE(entity);
return entity;
}
typename T::pointer operator->()
{
return get();
}
typename T::pointer operator->()
{
return get();
}
IdType getId() const { return _id; }
IdType getId() const { return _id; }
private:
Database::Session& _session;
IdType _id {};
private:
Database::Session& _session;
IdType _id{};
};
using ScopedArtist = ScopedEntity<Database::Artist>;
using ScopedCluster = ScopedEntity<Database::Cluster>;
using ScopedClusterType = ScopedEntity<Database::ClusterType>;
using ScopedMediaLibrary = ScopedEntity<Database::MediaLibrary>;
using ScopedRelease = ScopedEntity<Database::Release>;
using ScopedTrack = ScopedEntity<Database::Track>;
using ScopedTrackList = ScopedEntity<Database::TrackList>;
@@ -108,47 +110,47 @@ using ScopedUser = ScopedEntity<Database::User>;
class ScopedFileDeleter final
{
public:
ScopedFileDeleter(const std::filesystem::path& path) : _path {path} {}
~ScopedFileDeleter() { std::filesystem::remove(_path); }
public:
ScopedFileDeleter(const std::filesystem::path& path) : _path{ path } {}
~ScopedFileDeleter() { std::filesystem::remove(_path); }
ScopedFileDeleter(const ScopedFileDeleter&) = delete;
ScopedFileDeleter(ScopedFileDeleter&&) = delete;
ScopedFileDeleter operator=(const ScopedFileDeleter&) = delete;
ScopedFileDeleter operator=(ScopedFileDeleter&&) = delete;
private:
ScopedFileDeleter(const ScopedFileDeleter&) = delete;
ScopedFileDeleter(ScopedFileDeleter&&) = delete;
ScopedFileDeleter operator=(const ScopedFileDeleter&) = delete;
ScopedFileDeleter operator=(ScopedFileDeleter&&) = delete;
private:
const std::filesystem::path _path;
const std::filesystem::path _path;
};
class TmpDatabase final
{
public:
TmpDatabase ();
public:
TmpDatabase();
Database::Db& getDb();
Database::Db& getDb();
private:
const std::filesystem::path _tmpFile;
ScopedFileDeleter _fileDeleter;
Database::Db _db;
private:
const std::filesystem::path _tmpFile;
ScopedFileDeleter _fileDeleter;
Database::Db _db;
};
class DatabaseFixture : public ::testing::Test
{
public:
~DatabaseFixture();
~DatabaseFixture();
public:
static void SetUpTestCase();
static void TearDownTestCase();
private:
void testDatabaseEmpty();
void testDatabaseEmpty();
static inline std::unique_ptr<TmpDatabase> _tmpDb {};
static inline std::unique_ptr<TmpDatabase> _tmpDb{};
public:
Database::Session session {_tmpDb->getDb()};
Database::Session session{ _tmpDb->getDb() };
};
+502 -62
View File
@@ -153,7 +153,11 @@ TEST_F(DatabaseFixture, Listen_getTopArtists)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getTopArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
const auto artists{ Listen::getTopArtists(session, params) };
EXPECT_EQ(artists.results.size(), 0);
EXPECT_EQ(artists.moreResults, false);
}
@@ -171,22 +175,36 @@ TEST_F(DatabaseFixture, Listen_getTopArtists)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getTopArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto artists{ Listen::getTopArtists(session, params) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results[0], artist1->getId());
}
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getTopArtists(session, user->getId(), ScrobblingBackend::ListenBrainz, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::ListenBrainz);
auto artists{ Listen::getTopArtists(session, params) };
ASSERT_EQ(artists.results.size(), 0);
}
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getTopArtists(session, user->getId(), ScrobblingBackend::Internal, {}, TrackArtistLinkType::Producer) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::ListenBrainz);
params.setLinkType(TrackArtistLinkType::Producer);
auto artists{ Listen::getTopArtists(session, params) };
EXPECT_EQ(artists.results.size(), 0);
}
{
ScopedClusterType clusterType{ session, "MyType" };
ScopedCluster cluster{ session, clusterType.lockAndGet(), "MyCluster" };
@@ -194,7 +212,12 @@ TEST_F(DatabaseFixture, Listen_getTopArtists)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getTopArtists(session, user->getId(), ScrobblingBackend::Internal, {cluster->getId()}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({cluster->getId()});
auto artists{ Listen::getTopArtists(session, params) };
EXPECT_EQ(artists.results.size(), 0);
}
}
@@ -218,7 +241,11 @@ TEST_F(DatabaseFixture, Listen_getTopArtists_multi)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getTopArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto artists{ Listen::getTopArtists(session, params) };
EXPECT_EQ(artists.results.size(), 0);
}
@@ -226,16 +253,25 @@ TEST_F(DatabaseFixture, Listen_getTopArtists_multi)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getTopArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto artists{ Listen::getTopArtists(session, params) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results[0], artist1->getId());
}
ScopedListen listen2{ session, user.lockAndGet(), track2.lockAndGet(), ScrobblingBackend::Internal, dateTime.addSecs(2) };
ScopedListen listen3{ session, user.lockAndGet(), track2.lockAndGet(), ScrobblingBackend::Internal, dateTime.addSecs(3) };
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getTopArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto artists{ Listen::getTopArtists(session, params) };
ASSERT_EQ(artists.results.size(), 2);
EXPECT_EQ(artists.results[0], artist2->getId());
EXPECT_EQ(artists.results[1], artist1->getId());
@@ -243,7 +279,12 @@ TEST_F(DatabaseFixture, Listen_getTopArtists_multi)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getTopArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt, Range {0, 1}) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setRange(Range {0, 1});
auto artists{ Listen::getTopArtists(session, params) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.moreResults, true);
EXPECT_EQ(artists.results[0], artist2->getId());
@@ -268,7 +309,12 @@ TEST_F(DatabaseFixture, Listen_getTopArtists_cluster)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getTopArtists(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto artists{ Listen::getTopArtists(session, params) };
ASSERT_EQ(artists.results.size(), 0);
}
{
@@ -278,12 +324,83 @@ TEST_F(DatabaseFixture, Listen_getTopArtists_cluster)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getTopArtists(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto artists{ Listen::getTopArtists(session, params) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results[0], artist.getId());
}
}
TEST_F(DatabaseFixture, Listen_getTopArtists_mediaLibrary)
{
ScopedTrack track{ session, "MyTrack" };
ScopedArtist artist{ session, "MyArtist" };
ScopedUser user{ session, "MyUser" };
const Wt::WDateTime dateTime1{ Wt::WDate{2000, 1, 2}, Wt::WTime{12,0, 1} };
ScopedListen listen{ session, user.lockAndGet(), track.lockAndGet(), ScrobblingBackend::Internal, dateTime1 };
ScopedMediaLibrary library{ session };
ScopedMediaLibrary otherLibrary{ session };
{
auto transaction{ session.createReadTransaction() };
Listen::ArtistStatsFindParameters params;
params.setUser(user.getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setMediaLibrary(library.getId());
const auto artists{ Listen::getTopArtists(session, params) };
EXPECT_EQ(artists.results.size(), 0);
EXPECT_EQ(artists.moreResults, false);
}
{
auto transaction{ session.createWriteTransaction() };
TrackArtistLink::create(session, track.get(), artist.get(), TrackArtistLinkType::Artist);
track.get().modify()->setMediaLibrary(library.get());
}
{
auto transaction{ session.createReadTransaction() };
Listen::ArtistStatsFindParameters params;
params.setUser(user.getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto artists{ Listen::getTopArtists(session, params) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results[0], artist->getId());
}
{
auto transaction{ session.createReadTransaction() };
Listen::ArtistStatsFindParameters params;
params.setUser(user.getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setMediaLibrary(library.getId());
auto artists{ Listen::getTopArtists(session, params) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results[0], artist->getId());
}
{
auto transaction{ session.createReadTransaction() };
Listen::ArtistStatsFindParameters params;
params.setUser(user.getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setMediaLibrary(otherLibrary.getId());
auto artists{ Listen::getTopArtists(session, params) };
EXPECT_EQ(artists.results.size(), 0);
}
}
TEST_F(DatabaseFixture, Listen_getTopReleases)
{
ScopedTrack track{ session, "MyTrack" };
@@ -298,7 +415,11 @@ TEST_F(DatabaseFixture, Listen_getTopReleases)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getTopReleases(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto releases{ Listen::getTopReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
EXPECT_EQ(releases.results.size(), 0);
}
@@ -308,7 +429,11 @@ TEST_F(DatabaseFixture, Listen_getTopReleases)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getTopReleases(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto releases{ Listen::getTopReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results[0], release.getId());
@@ -316,7 +441,11 @@ TEST_F(DatabaseFixture, Listen_getTopReleases)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getTopReleases(session, user->getId(), ScrobblingBackend::ListenBrainz, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::ListenBrainz);
auto releases{ Listen::getTopReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
EXPECT_EQ(releases.results.size(), 0);
}
@@ -341,7 +470,11 @@ TEST_F(DatabaseFixture, Listen_getTopReleases_multi)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getTopReleases(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto releases{ Listen::getTopReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results[0], release1.getId());
@@ -351,7 +484,11 @@ TEST_F(DatabaseFixture, Listen_getTopReleases_multi)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getTopReleases(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto releases{ Listen::getTopReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
ASSERT_EQ(releases.results.size(), 2);
EXPECT_EQ(releases.results[0], release2.getId());
@@ -362,7 +499,11 @@ TEST_F(DatabaseFixture, Listen_getTopReleases_multi)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getTopReleases(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto releases{ Listen::getTopReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
ASSERT_EQ(releases.results.size(), 2);
EXPECT_EQ(releases.results[0], release1.getId());
@@ -388,7 +529,12 @@ TEST_F(DatabaseFixture, Listen_getTopReleases_cluster)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getTopReleases(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto releases{ Listen::getTopReleases(session, params) };
EXPECT_EQ(releases.results.size(), 0);
}
{
@@ -399,12 +545,74 @@ TEST_F(DatabaseFixture, Listen_getTopReleases_cluster)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getTopReleases(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto releases{ Listen::getTopReleases(session, params) };
EXPECT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results[0], release.getId());
}
}
TEST_F(DatabaseFixture, Listen_getTopReleases_mediaLibrary)
{
ScopedTrack track{ session, "MyTrack" };
ScopedUser user{ session, "MyUser" };
const Wt::WDateTime dateTime{ Wt::WDate{2000, 1, 2}, Wt::WTime{12,0, 1} };
ScopedRelease release{ session, "MyRelease" };
ScopedMediaLibrary library{ session };
ScopedMediaLibrary otherLibrary{ session };
{
auto transaction{ session.createWriteTransaction() };
track.get().modify()->setRelease(release.get());
track.get().modify()->setMediaLibrary(library.get());
}
{
auto transaction{ session.createReadTransaction() };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setMediaLibrary(library.getId());
auto releases{ Listen::getTopReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
EXPECT_EQ(releases.results.size(), 0);
}
ScopedListen listen{ session, user.lockAndGet(), track.lockAndGet(), ScrobblingBackend::Internal, dateTime };
{
auto transaction{ session.createReadTransaction() };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setMediaLibrary(library.getId());
auto releases{ Listen::getTopReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results[0], release.getId());
}
{
auto transaction{ session.createReadTransaction() };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setMediaLibrary(otherLibrary.getId());
auto releases{ Listen::getTopReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
EXPECT_EQ(releases.results.size(), 0);
}
}
TEST_F(DatabaseFixture, Listen_getTopTracks)
{
ScopedTrack track{ session, "MyTrack" };
@@ -414,7 +622,11 @@ TEST_F(DatabaseFixture, Listen_getTopTracks)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getTopTracks(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 0);
}
@@ -424,7 +636,11 @@ TEST_F(DatabaseFixture, Listen_getTopTracks)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getTopTracks(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 1);
EXPECT_EQ(tracks.results[0], track.getId());
@@ -432,13 +648,16 @@ TEST_F(DatabaseFixture, Listen_getTopTracks)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getTopTracks(session, user->getId(), ScrobblingBackend::ListenBrainz, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::ListenBrainz);
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
EXPECT_EQ(tracks.results.size(), 0);
}
}
TEST_F(DatabaseFixture, Listen_getTopTracks_artist)
{
ScopedTrack track{ session, "MyTrack" };
@@ -449,7 +668,12 @@ TEST_F(DatabaseFixture, Listen_getTopTracks_artist)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getTopTracks(session, user->getId(), artist->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setArtist(artist->getId());
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 0);
}
@@ -459,8 +683,12 @@ TEST_F(DatabaseFixture, Listen_getTopTracks_artist)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getTopTracks(session, user->getId(), artist->getId(), ScrobblingBackend::Internal, {}) };
EXPECT_EQ(tracks.moreResults, false);
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setArtist(artist->getId());
auto tracks{ Listen::getTopTracks(session, params) };
ASSERT_EQ(tracks.results.size(), 0);
}
@@ -472,7 +700,12 @@ TEST_F(DatabaseFixture, Listen_getTopTracks_artist)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getTopTracks(session, user->getId(), artist->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setArtist(artist->getId());
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 1);
EXPECT_EQ(tracks.results[0], track.getId());
@@ -490,7 +723,11 @@ TEST_F(DatabaseFixture, Listen_getTopTrack_multi)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getTopTracks(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 1);
EXPECT_EQ(tracks.results[0], track1.getId());
@@ -500,7 +737,11 @@ TEST_F(DatabaseFixture, Listen_getTopTrack_multi)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getTopTracks(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 2);
EXPECT_EQ(tracks.results[0], track2.getId());
@@ -511,7 +752,11 @@ TEST_F(DatabaseFixture, Listen_getTopTrack_multi)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getTopTracks(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 2);
EXPECT_EQ(tracks.results[0], track1.getId());
@@ -531,7 +776,12 @@ TEST_F(DatabaseFixture, Listen_getTopTracks_cluster)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getTopTracks(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.results.size(), 0);
}
{
@@ -542,12 +792,72 @@ TEST_F(DatabaseFixture, Listen_getTopTracks_cluster)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getTopTracks(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.results.size(), 1);
EXPECT_EQ(tracks.results[0], track.getId());
}
}
TEST_F(DatabaseFixture, Listen_getTopTracks_mediaLibrary)
{
ScopedTrack track{ session, "MyTrack" };
ScopedUser user{ session, "MyUser" };
const Wt::WDateTime dateTime{ Wt::WDate{2000, 1, 2}, Wt::WTime{12,0, 1} };
ScopedMediaLibrary library{ session };
ScopedMediaLibrary otherLibrary{ session };
{
auto transaction{ session.createReadTransaction() };
Listen::StatsFindParameters params;
params.setUser(user.getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setMediaLibrary(library.getId());
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 0);
}
{
auto transaction{ session.createWriteTransaction() };
track.get().modify()->setMediaLibrary(library.get());
}
ScopedListen listen{ session, user.lockAndGet(), track.lockAndGet(), ScrobblingBackend::Internal, dateTime };
{
auto transaction{ session.createReadTransaction() };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setMediaLibrary(library.getId());
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 1);
EXPECT_EQ(tracks.results[0], track.getId());
}
{
auto transaction{ session.createReadTransaction() };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setMediaLibrary(otherLibrary.getId());
auto tracks{ Listen::getTopTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
EXPECT_EQ(tracks.results.size(), 0);
}
}
TEST_F(DatabaseFixture, Listen_getRecentArtists)
{
ScopedTrack track{ session, "MyTrack" };
@@ -562,7 +872,11 @@ TEST_F(DatabaseFixture, Listen_getRecentArtists)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getRecentArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto artists{ Listen::getRecentArtists(session, params) };
EXPECT_EQ(artists.results.size(), 0);
EXPECT_EQ(artists.moreResults, false);
}
@@ -573,20 +887,33 @@ TEST_F(DatabaseFixture, Listen_getRecentArtists)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getRecentArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto artists{ Listen::getRecentArtists(session, params) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results[0], artist->getId());
}
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getRecentArtists(session, user->getId(), ScrobblingBackend::ListenBrainz, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::ListenBrainz);
auto artists{ Listen::getRecentArtists(session, params) };
ASSERT_EQ(artists.results.size(), 0);
}
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getRecentArtists(session, user->getId(), ScrobblingBackend::Internal, {}, TrackArtistLinkType::Producer) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setLinkType(TrackArtistLinkType::Producer);
auto artists{ Listen::getRecentArtists(session, params) };
EXPECT_EQ(artists.results.size(), 0);
}
{
@@ -596,7 +923,12 @@ TEST_F(DatabaseFixture, Listen_getRecentArtists)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getRecentArtists(session, user->getId(), ScrobblingBackend::Internal, {cluster->getId()}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({cluster->getId()});
auto artists{ Listen::getRecentArtists(session, params) };
EXPECT_EQ(artists.results.size(), 0);
}
}
@@ -620,7 +952,11 @@ TEST_F(DatabaseFixture, Listen_getRecentArtists_multi)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getRecentArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto artists{ Listen::getRecentArtists(session, params) };
EXPECT_EQ(artists.results.size(), 0);
}
@@ -628,7 +964,11 @@ TEST_F(DatabaseFixture, Listen_getRecentArtists_multi)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getRecentArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto artists{ Listen::getRecentArtists(session, params) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results[0], artist1->getId());
}
@@ -636,7 +976,11 @@ TEST_F(DatabaseFixture, Listen_getRecentArtists_multi)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getRecentArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto artists{ Listen::getRecentArtists(session, params) };
ASSERT_EQ(artists.results.size(), 2);
EXPECT_EQ(artists.results[0], artist2->getId());
EXPECT_EQ(artists.results[1], artist1->getId());
@@ -645,7 +989,12 @@ TEST_F(DatabaseFixture, Listen_getRecentArtists_multi)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getRecentArtists(session, user->getId(), ScrobblingBackend::Internal, {}, std::nullopt, Range {0, 1}) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setRange(Range{ 0, 1 });
auto artists{ Listen::getRecentArtists(session, params) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.moreResults, true);
EXPECT_EQ(artists.results[0], artist2->getId());
@@ -670,7 +1019,12 @@ TEST_F(DatabaseFixture, Listen_getRecentArtists_cluster)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getRecentArtists(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto artists{ Listen::getRecentArtists(session, params) };
ASSERT_EQ(artists.results.size(), 0);
}
{
@@ -680,7 +1034,12 @@ TEST_F(DatabaseFixture, Listen_getRecentArtists_cluster)
{
auto transaction{ session.createReadTransaction() };
auto artists{ Listen::getRecentArtists(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}, std::nullopt) };
Listen::ArtistStatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto artists{ Listen::getRecentArtists(session, params) };
ASSERT_EQ(artists.results.size(), 1);
EXPECT_EQ(artists.results[0], artist.getId());
}
@@ -700,7 +1059,11 @@ TEST_F(DatabaseFixture, Listen_getRecentReleases)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getRecentReleases(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto releases{ Listen::getRecentReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
ASSERT_EQ(releases.results.size(), 0);
}
@@ -711,7 +1074,11 @@ TEST_F(DatabaseFixture, Listen_getRecentReleases)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getRecentReleases(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto releases{ Listen::getRecentReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results[0], release.getId());
@@ -719,7 +1086,11 @@ TEST_F(DatabaseFixture, Listen_getRecentReleases)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getRecentReleases(session, user->getId(), ScrobblingBackend::ListenBrainz, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::ListenBrainz);
auto releases{ Listen::getRecentReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
EXPECT_EQ(releases.results.size(), 0);
}
@@ -798,7 +1169,11 @@ TEST_F(DatabaseFixture, Listen_getRecentReleases_multi)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getRecentReleases(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto releases{ Listen::getRecentReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results[0], release2.getId());
@@ -808,7 +1183,11 @@ TEST_F(DatabaseFixture, Listen_getRecentReleases_multi)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getRecentReleases(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto releases{ Listen::getRecentReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
ASSERT_EQ(releases.results.size(), 2);
EXPECT_EQ(releases.results[0], release1.getId());
@@ -819,7 +1198,11 @@ TEST_F(DatabaseFixture, Listen_getRecentReleases_multi)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getRecentReleases(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto releases{ Listen::getRecentReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
ASSERT_EQ(releases.results.size(), 2);
EXPECT_EQ(releases.results[0], release2.getId());
@@ -830,7 +1213,11 @@ TEST_F(DatabaseFixture, Listen_getRecentReleases_multi)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getRecentReleases(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto releases{ Listen::getRecentReleases(session, params) };
EXPECT_EQ(releases.moreResults, false);
ASSERT_EQ(releases.results.size(), 2);
EXPECT_EQ(releases.results[0], release2.getId());
@@ -853,7 +1240,12 @@ TEST_F(DatabaseFixture, Listen_getRecentReleases_cluster)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getRecentReleases(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto releases{ Listen::getRecentReleases(session, params) };
EXPECT_EQ(releases.results.size(), 0);
}
@@ -863,7 +1255,12 @@ TEST_F(DatabaseFixture, Listen_getRecentReleases_cluster)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getRecentReleases(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto releases{ Listen::getRecentReleases(session, params) };
EXPECT_EQ(releases.results.size(), 0);
}
@@ -874,7 +1271,12 @@ TEST_F(DatabaseFixture, Listen_getRecentReleases_cluster)
{
auto transaction{ session.createReadTransaction() };
auto releases{ Listen::getRecentReleases(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto releases{ Listen::getRecentReleases(session, params) };
EXPECT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results[0], release.getId());
}
@@ -888,7 +1290,11 @@ TEST_F(DatabaseFixture, Listen_getRecentTracks)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getRecentTracks(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto tracks{ Listen::getRecentTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 0);
}
@@ -899,7 +1305,11 @@ TEST_F(DatabaseFixture, Listen_getRecentTracks)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getRecentTracks(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto tracks{ Listen::getRecentTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 1);
EXPECT_EQ(tracks.results[0], track.getId());
@@ -908,7 +1318,11 @@ TEST_F(DatabaseFixture, Listen_getRecentTracks)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getRecentTracks(session, user->getId(), ScrobblingBackend::ListenBrainz, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::ListenBrainz);
auto tracks{ Listen::getRecentTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
EXPECT_EQ(tracks.results.size(), 0);
}
@@ -1054,7 +1468,11 @@ TEST_F(DatabaseFixture, Listen_getRecentTracks_multi)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getRecentTracks(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto tracks{ Listen::getRecentTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 1);
EXPECT_EQ(tracks.results[0], track2.getId());
@@ -1064,7 +1482,11 @@ TEST_F(DatabaseFixture, Listen_getRecentTracks_multi)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getRecentTracks(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto tracks{ Listen::getRecentTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 2);
EXPECT_EQ(tracks.results[0], track1.getId());
@@ -1075,7 +1497,11 @@ TEST_F(DatabaseFixture, Listen_getRecentTracks_multi)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getRecentTracks(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto tracks{ Listen::getRecentTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 2);
EXPECT_EQ(tracks.results[0], track2.getId());
@@ -1086,7 +1512,11 @@ TEST_F(DatabaseFixture, Listen_getRecentTracks_multi)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getRecentTracks(session, user->getId(), ScrobblingBackend::Internal, {}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
auto tracks{ Listen::getRecentTracks(session, params) };
EXPECT_EQ(tracks.moreResults, false);
ASSERT_EQ(tracks.results.size(), 2);
EXPECT_EQ(tracks.results[0], track2.getId());
@@ -1106,7 +1536,12 @@ TEST_F(DatabaseFixture, Listen_getRecentTracks_cluster)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getRecentTracks(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto tracks{ Listen::getRecentTracks(session, params) };
EXPECT_EQ(tracks.results.size(), 0);
}
{
@@ -1117,7 +1552,12 @@ TEST_F(DatabaseFixture, Listen_getRecentTracks_cluster)
{
auto transaction{ session.createReadTransaction() };
auto tracks{ Listen::getRecentTracks(session, user->getId(), ScrobblingBackend::Internal, {cluster.getId()}) };
Listen::StatsFindParameters params;
params.setUser(user->getId());
params.setScrobblingBackend(ScrobblingBackend::Internal);
params.setClusters({ cluster.getId() });
auto tracks{ Listen::getRecentTracks(session, params) };
EXPECT_EQ(tracks.results.size(), 1);
EXPECT_EQ(tracks.results[0], track.getId());
}
+26
View File
@@ -133,6 +133,32 @@ TEST_F(DatabaseFixture, Release_singleTrack)
}
}
TEST_F(DatabaseFixture, Release_singleTrack_mediaLibrary)
{
ScopedTrack track{ session, "MyTrack" };
ScopedRelease release{ session, "MyRelease" };
ScopedMediaLibrary library{ session };
ScopedMediaLibrary otherLibrary{ session };
{
auto transaction{ session.createWriteTransaction() };
track.get().modify()->setRelease(release.get());
track.get().modify()->setMediaLibrary(library.get());
}
{
auto transaction{ session.createReadTransaction() };
auto releases{ Release::findIds(session, Release::FindParameters{}.setMediaLibrary(library->getId())) };
ASSERT_EQ(releases.results.size(), 1);
EXPECT_EQ(releases.results.front(), release.getId());
}
{
auto transaction{ session.createReadTransaction() };
auto releases{ Release::findIds(session, Release::FindParameters{}.setMediaLibrary(otherLibrary->getId())) };
EXPECT_EQ(releases.results.size(), 0);
}
}
TEST_F(DatabaseFixture, Release_findByNameAndPath)
{
ScopedRelease release1{ session, "MyRelease" };
+51
View File
@@ -63,6 +63,57 @@ TEST_F(DatabaseFixture, Track)
}
}
TEST_F(DatabaseFixture, Track_MediaLibrary)
{
ScopedTrack track{ session, "MyTrackFile" };
ScopedMediaLibrary library{ session };
ScopedMediaLibrary otherLibrary{ session };
{
auto transaction{ session.createWriteTransaction() };
track.get().modify()->setMediaLibrary(library.get());
}
{
auto transaction{ session.createWriteTransaction() };
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setMediaLibrary(library->getId()))};
ASSERT_EQ(tracks.results.size(), 1);
EXPECT_EQ(tracks.results.front(), track.getId());
}
{
auto transaction{ session.createWriteTransaction() };
const auto tracks{ Track::findIds(session, Track::FindParameters{}.setMediaLibrary(otherLibrary->getId()))};
EXPECT_EQ(tracks.results.size(), 0);
}
}
TEST_F(DatabaseFixture, Track_noMediaLibrary)
{
ScopedTrack track{ session, "MyTrackFile" };
{
auto transaction{ session.createReadTransaction() };
MediaLibrary::pointer mediaLibrary{ track->getMediaLibrary() };
EXPECT_EQ(mediaLibrary, MediaLibrary::pointer{});
EXPECT_FALSE(mediaLibrary);
EXPECT_TRUE(!mediaLibrary);
}
}
TEST_F(DatabaseFixture, TrackNotExists)
{
auto transaction{ session.createReadTransaction() };
EXPECT_FALSE(Track::exists(session, TrackId{ 42 }));
EXPECT_EQ(Track::find(session, TrackId{ 42 }), Track::pointer{});
EXPECT_FALSE(Track::find(session, TrackId{ 42 }));
EXPECT_EQ(Track::find(session, Track::FindParameters{}).results.size(), 0);
{
auto track{ Track::find(session, TrackId{ 42 }) };
EXPECT_TRUE(!track);
EXPECT_FALSE(track);
}
}
TEST_F(DatabaseFixture, MultipleTracks)
{
ScopedTrack track1{ session, "MyTrackFile1" };