#include #include #include #include #include #include #include "data.hpp" using ::testing::IsEmpty; TEST(DataSource, CanGetUser) { ASSIGN_OR_FAIL(std::unique_ptr data, DataSourceSQLite::newFromMemory()); User u; u.openid_uid = "aaa"; u.name = "bbb"; EXPECT_TRUE(data->addUser(std::move(u)).has_value()); ASSIGN_OR_FAIL(auto user_maybe, data->userByOpenIDUID("aaa")); EXPECT_TRUE(user_maybe.has_value()); EXPECT_EQ(user_maybe->name, "bbb"); ASSIGN_OR_FAIL(user_maybe, data->userByOpenIDUID("bbb")); EXPECT_FALSE(user_maybe.has_value()); } TEST(DataSource, WontAddDuplicateUser) { ASSIGN_OR_FAIL(std::unique_ptr data, DataSourceSQLite::newFromMemory()); User u0; u0.openid_uid = "aaa"; u0.name = "bbb"; User u1; u1.openid_uid = "aaa"; u1.name = "ccc"; User u2; u2.openid_uid = "ddd"; u2.name = "bbb"; EXPECT_TRUE(data->addUser(std::move(u0)).has_value()); EXPECT_FALSE(data->addUser(std::move(u1)).has_value()); EXPECT_FALSE(data->addUser(std::move(u2)).has_value()); } TEST(DataSource, CanAddLink) { ASSIGN_OR_FAIL(std::unique_ptr data, DataSourceSQLite::newFromMemory()); User u; u.openid_uid = "aaa"; u.name = "bbb"; EXPECT_TRUE(data->addUser(std::move(u)).has_value()); LinkItem l0; l0.owner_id = 1; l0.parent_id = std::nullopt; l0.name = "aaa"; l0.url = "bbb"; l0.description = "ccc"; l0.visibility = LinkItem::PUBLIC; LinkItem l1; l1.owner_id = 1; l1.parent_id = 1; l1.name = "ddd"; l1.url = "eee"; l1.description = "fff"; l1.visibility = LinkItem::PRIVATE; ASSIGN_OR_FAIL(int64_t l0id, data->addLink(std::move(l0))); EXPECT_EQ(l0id, 1); ASSIGN_OR_FAIL(int64_t l1id, data->addLink(std::move(l1))); EXPECT_EQ(l1id, 2); ASSIGN_OR_FAIL(auto ls, data->itemsTopLevelByUser(1)); ASSERT_EQ(ls.size(), 1); EXPECT_EQ(ls[0].name, "aaa"); ASSIGN_OR_FAIL(ls, data->itemsByParent(1)); ASSERT_EQ(ls.size(), 1); EXPECT_EQ(ls[0].name, "ddd"); }