Can now browse by directorie in the Subsonic API, ref #474

This commit is contained in:
emeric
2024-07-13 14:22:19 +02:00
parent 9292b05732
commit 980709dbcf
20 changed files with 613 additions and 224 deletions
+104 -4
View File
@@ -107,23 +107,35 @@ namespace lms::db::tests
{
auto transaction{ session.createReadTransaction() };
auto dir{ child->getParent() };
auto dir{ child->getParentDirectory() };
EXPECT_EQ(dir, Directory::pointer{});
}
{
auto transaction{ session.createWriteTransaction() };
child.get().modify()->setParent(parent.lockAndGet());
child.get().modify()->setParent(parent.get());
}
{
auto transaction{ session.createReadTransaction() };
auto dir{ child->getParent() };
auto dir{ child->getParentDirectory() };
ASSERT_NE(dir, Directory::pointer{});
EXPECT_EQ(dir->getId(), parent.getId());
}
{
auto transaction{ session.createReadTransaction() };
Directory::pointer foundDir;
Directory::find(session, Directory::FindParameters{}.setParentDirectory(parent->getId()), [&](const Directory::pointer& dir) {
ASSERT_EQ(foundDir, Directory::pointer{});
foundDir = dir;
});
ASSERT_NE(foundDir, Directory::pointer{});
EXPECT_EQ(foundDir->getId(), child.getId());
}
}
TEST_F(DatabaseFixture, Directory_orphaned)
@@ -141,7 +153,7 @@ namespace lms::db::tests
{
auto transaction{ session.createWriteTransaction() };
child.get().modify()->setParent(parent.lockAndGet());
child.get().modify()->setParent(parent.get());
}
{
@@ -152,4 +164,92 @@ namespace lms::db::tests
EXPECT_EQ(directories.front(), child.getId());
}
}
TEST_F(DatabaseFixture, Directory_findRootDirectories)
{
ScopedDirectory parent1{ session, "/root1" };
ScopedDirectory child{ session, "/root1/child" };
ScopedDirectory parent2{ session, "/root2" };
{
auto transaction{ session.createWriteTransaction() };
child.get().modify()->setParent(parent1.get());
}
{
auto transaction{ session.createReadTransaction() };
const auto directories{ Directory::findRootDirectories(session).results };
ASSERT_EQ(directories.size(), 2);
EXPECT_EQ(directories[0]->getId(), parent1.getId());
EXPECT_EQ(directories[1]->getId(), parent2.getId());
}
}
TEST_F(DatabaseFixture, Directory_findNonTrackDirectories)
{
ScopedDirectory parent{ session, "/root" };
ScopedDirectory child1{ session, "/root/child1" };
ScopedDirectory child2{ session, "/root/child2" };
ScopedTrack track{ session };
{
auto transaction{ session.createWriteTransaction() };
child1.get().modify()->setParent(parent.get());
child2.get().modify()->setParent(parent.get());
}
{
auto transaction{ session.createReadTransaction() };
Directory::FindParameters params;
params.setWithNoTrack(true);
auto res{ Directory::find(session, params).results };
ASSERT_EQ(res.size(), 3);
EXPECT_EQ(res[0]->getId(), parent.getId());
EXPECT_EQ(res[1]->getId(), child1.getId());
EXPECT_EQ(res[2]->getId(), child2.getId());
}
{
auto transaction{ session.createWriteTransaction() };
track.get().modify()->setDirectory(child2.get());
}
{
auto transaction{ session.createReadTransaction() };
Directory::FindParameters params;
params.setWithNoTrack(true);
auto res{ Directory::find(session, params).results };
ASSERT_EQ(res.size(), 2);
EXPECT_EQ(res[0]->getId(), parent.getId());
EXPECT_EQ(res[1]->getId(), child1.getId());
}
}
TEST_F(DatabaseFixture, Directory_findWithKeywords)
{
ScopedDirectory parent{ session, "/root" };
ScopedDirectory child1{ session, "/root/foo" };
ScopedDirectory child2{ session, "/root/bar/foo" };
{
auto transaction{ session.createReadTransaction() };
Directory::FindParameters params;
params.setKeywords({ "foo" });
auto res{ Directory::find(session, params).results };
ASSERT_EQ(res.size(), 2);
EXPECT_EQ(res[0]->getId(), child1.getId());
EXPECT_EQ(res[1]->getId(), child2.getId());
}
}
} // namespace lms::db::tests