Scanner: parallelized processing within artwork association steps
This commit is contained in:
@@ -608,6 +608,93 @@ namespace lms::db::tests
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Artist_findNextRange)
|
||||
{
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
auto range{ Artist::findNextRange(session, ArtistId{}, 0) };
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, ArtistId{});
|
||||
EXPECT_EQ(range.last, ArtistId{});
|
||||
|
||||
range = Artist::findNextRange(session, ArtistId{}, 100);
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, ArtistId{});
|
||||
EXPECT_EQ(range.last, ArtistId{});
|
||||
}
|
||||
|
||||
ScopedArtist artist1{ session, "Artist1" };
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
auto range{ Artist::findNextRange(session, ArtistId{}, 0) };
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, ArtistId{});
|
||||
EXPECT_EQ(range.last, ArtistId{});
|
||||
|
||||
range = Artist::findNextRange(session, ArtistId{}, 1);
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, artist1.getId());
|
||||
EXPECT_EQ(range.last, artist1.getId());
|
||||
|
||||
range = Artist::findNextRange(session, range.last, 1);
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, ArtistId{});
|
||||
EXPECT_EQ(range.last, ArtistId{});
|
||||
|
||||
range = Artist::findNextRange(session, ArtistId{}, 100);
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, artist1.getId());
|
||||
EXPECT_EQ(range.last, artist1.getId());
|
||||
}
|
||||
|
||||
ScopedArtist artist2{ session, "Artist2" };
|
||||
ScopedArtist artist3{ session, "Artist3" };
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
auto range{ Artist::findNextRange(session, ArtistId{}, 2) };
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, artist1.getId());
|
||||
EXPECT_EQ(range.last, artist2.getId());
|
||||
|
||||
range = Artist::findNextRange(session, artist2.getId(), 2);
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, artist3.getId());
|
||||
EXPECT_EQ(range.last, artist3.getId());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Artist_findByRange)
|
||||
{
|
||||
ScopedArtist artist1{ session, "Artist1" };
|
||||
ScopedArtist artist2{ session, "Artist2" };
|
||||
ScopedArtist artist3{ session, "Artist3" };
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
std::size_t count{};
|
||||
Artist::find(session, IdRange<ArtistId>{ .first = artist1.getId(), .last = artist1.getId() }, [&](const db::Artist::pointer& artist) {
|
||||
count++;
|
||||
EXPECT_EQ(artist->getId(), artist1.getId());
|
||||
});
|
||||
EXPECT_EQ(count, 1);
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
std::size_t count{};
|
||||
Artist::find(session, IdRange<ArtistId>{ .first = artist1.getId(), .last = artist3.getId() }, [&](const db::Artist::pointer&) {
|
||||
count++;
|
||||
});
|
||||
EXPECT_EQ(count, 3);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Artist_sortMethod)
|
||||
{
|
||||
ScopedArtist artistA{ session, "artistA" };
|
||||
@@ -817,4 +904,34 @@ namespace lms::db::tests
|
||||
EXPECT_EQ(artists.results[3], artistC.getId());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Artist_updateArtwork)
|
||||
{
|
||||
ScopedArtist artist{ session, "MyArtist" };
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
EXPECT_EQ(artist->getPreferredArtwork(), Artwork::pointer{});
|
||||
}
|
||||
|
||||
ScopedImage image{ session, "/image1.jpg" };
|
||||
ScopedArtwork artwork{ session, image.lockAndGet() };
|
||||
|
||||
{
|
||||
auto transaction{ session.createWriteTransaction() };
|
||||
Artist::updatePreferredArtwork(session, artist->getId(), artwork.getId());
|
||||
}
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
EXPECT_EQ(artist->getPreferredArtwork()->getId(), artwork.getId());
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createWriteTransaction() };
|
||||
Artist::updatePreferredArtwork(session, artist.getId(), ArtworkId{});
|
||||
}
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
EXPECT_EQ(artist->getPreferredArtwork(), Artwork::pointer{});
|
||||
}
|
||||
}
|
||||
} // namespace lms::db::tests
|
||||
|
||||
@@ -173,6 +173,93 @@ namespace lms::db::tests
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Release_findNextRange)
|
||||
{
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
auto range{ Release::findNextRange(session, ReleaseId{}, 0) };
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, ReleaseId{});
|
||||
EXPECT_EQ(range.last, ReleaseId{});
|
||||
|
||||
range = Release::findNextRange(session, ReleaseId{}, 100);
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, ReleaseId{});
|
||||
EXPECT_EQ(range.last, ReleaseId{});
|
||||
}
|
||||
|
||||
ScopedRelease release1{ session, "Artist1" };
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
auto range{ Release::findNextRange(session, ReleaseId{}, 0) };
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, ReleaseId{});
|
||||
EXPECT_EQ(range.last, ReleaseId{});
|
||||
|
||||
range = Release::findNextRange(session, ReleaseId{}, 1);
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, release1.getId());
|
||||
EXPECT_EQ(range.last, release1.getId());
|
||||
|
||||
range = Release::findNextRange(session, range.last, 1);
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, ReleaseId{});
|
||||
EXPECT_EQ(range.last, ReleaseId{});
|
||||
|
||||
range = Release::findNextRange(session, ReleaseId{}, 100);
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, release1.getId());
|
||||
EXPECT_EQ(range.last, release1.getId());
|
||||
}
|
||||
|
||||
ScopedRelease release2{ session, "Artist2" };
|
||||
ScopedRelease release3{ session, "Artist3" };
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
auto range{ Release::findNextRange(session, ReleaseId{}, 2) };
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, release1.getId());
|
||||
EXPECT_EQ(range.last, release2.getId());
|
||||
|
||||
range = Release::findNextRange(session, release2.getId(), 2);
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, release3.getId());
|
||||
EXPECT_EQ(range.last, release3.getId());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Release_findByRange)
|
||||
{
|
||||
ScopedRelease release1{ session, "Artist1" };
|
||||
ScopedRelease release2{ session, "Artist2" };
|
||||
ScopedRelease release3{ session, "Artist3" };
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
std::size_t count{};
|
||||
Release::find(session, IdRange<ReleaseId>{ .first = release1.getId(), .last = release1.getId() }, [&](const db::Release::pointer& release) {
|
||||
count++;
|
||||
EXPECT_EQ(release->getId(), release1.getId());
|
||||
});
|
||||
EXPECT_EQ(count, 1);
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
std::size_t count{};
|
||||
Release::find(session, IdRange<ReleaseId>{ .first = release1.getId(), .last = release3.getId() }, [&](const db::Release::pointer&) {
|
||||
count++;
|
||||
});
|
||||
EXPECT_EQ(count, 3);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Release_singleTrack)
|
||||
{
|
||||
ScopedRelease release{ session, "MyRelease" };
|
||||
@@ -1431,4 +1518,35 @@ namespace lms::db::tests
|
||||
EXPECT_EQ(releases.results[1]->getId(), release1->getId());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Release_updateArtwork)
|
||||
{
|
||||
ScopedRelease release{ session, "MyRelease" };
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
EXPECT_EQ(release->getPreferredArtwork(), Artwork::pointer{});
|
||||
}
|
||||
|
||||
ScopedImage image{ session, "/image1.jpg" };
|
||||
ScopedArtwork artwork{ session, image.lockAndGet() };
|
||||
|
||||
{
|
||||
auto transaction{ session.createWriteTransaction() };
|
||||
Release::updatePreferredArtwork(session, release->getId(), artwork.getId());
|
||||
}
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
EXPECT_EQ(release->getPreferredArtwork()->getId(), artwork.getId());
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createWriteTransaction() };
|
||||
Release::updatePreferredArtwork(session, release.getId(), ArtworkId{});
|
||||
}
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
EXPECT_EQ(release->getPreferredArtwork(), Artwork::pointer{});
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace lms::db::tests
|
||||
@@ -151,6 +151,93 @@ namespace lms::db::tests
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Track_findNextRange)
|
||||
{
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
auto range{ Track::findNextRange(session, TrackId{}, 0) };
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, TrackId{});
|
||||
EXPECT_EQ(range.last, TrackId{});
|
||||
|
||||
range = Track::findNextRange(session, TrackId{}, 100);
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, TrackId{});
|
||||
EXPECT_EQ(range.last, TrackId{});
|
||||
}
|
||||
|
||||
ScopedTrack track1{ session };
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
auto range{ Track::findNextRange(session, TrackId{}, 0) };
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, TrackId{});
|
||||
EXPECT_EQ(range.last, TrackId{});
|
||||
|
||||
range = Track::findNextRange(session, TrackId{}, 1);
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, track1.getId());
|
||||
EXPECT_EQ(range.last, track1.getId());
|
||||
|
||||
range = Track::findNextRange(session, range.last, 1);
|
||||
EXPECT_FALSE(range.isValid());
|
||||
EXPECT_EQ(range.first, TrackId{});
|
||||
EXPECT_EQ(range.last, TrackId{});
|
||||
|
||||
range = Track::findNextRange(session, TrackId{}, 100);
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, track1.getId());
|
||||
EXPECT_EQ(range.last, track1.getId());
|
||||
}
|
||||
|
||||
ScopedTrack track2{ session };
|
||||
ScopedTrack track3{ session };
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
auto range{ Track::findNextRange(session, TrackId{}, 2) };
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, track1.getId());
|
||||
EXPECT_EQ(range.last, track2.getId());
|
||||
|
||||
range = Track::findNextRange(session, track2.getId(), 2);
|
||||
EXPECT_TRUE(range.isValid());
|
||||
EXPECT_EQ(range.first, track3.getId());
|
||||
EXPECT_EQ(range.last, track3.getId());
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Track_findByRange)
|
||||
{
|
||||
ScopedTrack track1{ session };
|
||||
ScopedTrack track2{ session };
|
||||
ScopedTrack track3{ session };
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
std::size_t count{};
|
||||
Track::find(session, IdRange<TrackId>{ .first = track1.getId(), .last = track1.getId() }, [&](const db::Track::pointer& track) {
|
||||
count++;
|
||||
EXPECT_EQ(track->getId(), track1.getId());
|
||||
});
|
||||
EXPECT_EQ(count, 1);
|
||||
}
|
||||
|
||||
{
|
||||
auto transaction{ session.createReadTransaction() };
|
||||
|
||||
std::size_t count{};
|
||||
Track::find(session, IdRange<TrackId>{ .first = track1.getId(), .last = track3.getId() }, [&](const db::Track::pointer&) {
|
||||
count++;
|
||||
});
|
||||
EXPECT_EQ(count, 3);
|
||||
}
|
||||
}
|
||||
|
||||
TEST_F(DatabaseFixture, Track_findAbsoluteFilePath)
|
||||
{
|
||||
ScopedTrack track{ session };
|
||||
|
||||
Reference in New Issue
Block a user