Can now browse by directorie in the Subsonic API, ref #474
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user