aboutsummaryrefslogtreecommitdiff
path: root/src/data_test.cpp
blob: 309d44f1b82a8e62e61a48cbf66c59f3bc348e89 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
#include <vector>

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include <mw/error.hpp>
#include <mw/utils.hpp>
#include <mw/test_utils.hpp>

#include "data.hpp"

using ::testing::IsEmpty;

TEST(DataSource, CanGetUser)
{
    ASSIGN_OR_FAIL(std::unique_ptr<DataSourceSQLite> 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<DataSourceSQLite> 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<DataSourceSQLite> 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");
}