Mercurial > malikania
comparison tests/libserver/db/account/main.cpp @ 107:6f4965c26ceb
Server: add basic accounts tests, #682
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 05 Sep 2017 13:33:57 +0200 |
parents | 41e5722da2ae |
children | 90c51ffdbbce |
comparison
equal
deleted
inserted
replaced
106:f8c6d2244795 | 107:6f4965c26ceb |
---|---|
17 */ | 17 */ |
18 | 18 |
19 #define BOOST_TEST_MODULE "database account" | 19 #define BOOST_TEST_MODULE "database account" |
20 #include <boost/test/unit_test.hpp> | 20 #include <boost/test/unit_test.hpp> |
21 | 21 |
22 #include <malikania/server/database_test.hpp> | 22 #include <malikania/server/db/test_database.hpp> |
23 #include <malikania/server/account_dao_test.hpp> | |
24 #include <malikania/server/db/account.hpp> | |
25 | 23 |
26 namespace mlk { | 24 namespace mlk { |
27 | 25 |
28 namespace server { | 26 namespace server { |
29 | 27 |
30 BOOST_AUTO_TEST_SUITE(basic) | 28 class account_fixture { |
29 protected: | |
30 std::shared_ptr<test_database> db_{new test_database}; | |
31 }; | |
32 | |
33 BOOST_FIXTURE_TEST_SUITE(basic_suite, account_fixture) | |
34 | |
35 BOOST_AUTO_TEST_CASE(save) | |
36 { | |
37 auto acc = db_->account_draft("nanahara", "dummypassword"); | |
38 | |
39 // Initial creation must be draft. | |
40 BOOST_TEST(acc->is_draft()); | |
41 | |
42 /* | |
43 * Set some fields, the database must not be modified at all but fields | |
44 * must be set. | |
45 */ | |
46 acc->set_email("nanahara@malikania.fr"); | |
47 acc->set_firstname("Alexis"); | |
48 acc->set_lastname("Dörr"); | |
49 | |
50 BOOST_TEST(acc->is_draft()); | |
51 BOOST_TEST(!acc->is_published()); | |
52 BOOST_TEST(acc->email() == "nanahara@malikania.fr"); | |
53 BOOST_TEST(acc->firstname() == "Alexis"); | |
54 BOOST_TEST(acc->lastname() == "Dörr"); | |
55 BOOST_TEST(db_->test_account_dao()->accounts().size() == 0U); | |
56 | |
57 // Do save, database must be updated and account published. | |
58 acc->save(); | |
59 | |
60 BOOST_TEST(!acc->is_draft()); | |
61 BOOST_TEST(acc->is_published()); | |
62 BOOST_TEST(acc->email() == "nanahara@malikania.fr"); | |
63 BOOST_TEST(acc->firstname() == "Alexis"); | |
64 BOOST_TEST(acc->lastname() == "Dörr"); | |
65 BOOST_TEST(db_->test_account_dao()->accounts().size() == 1U); | |
66 } | |
67 | |
68 BOOST_AUTO_TEST_CASE(set_password) | |
69 { | |
70 auto ac = db_->account_draft("markand", "nopassword"); | |
71 | |
72 ac->set_password("temporarypassword"); | |
73 | |
74 BOOST_TEST(db_->test_account_dao()->accounts().size() == 0U); | |
75 | |
76 ac->save(); | |
77 ac->set_password("newpassword"); | |
78 | |
79 BOOST_TEST(db_->test_account_dao()->accounts().at(ac->id()).password() == "newpassword"); | |
80 } | |
31 | 81 |
32 BOOST_AUTO_TEST_CASE(set_email) | 82 BOOST_AUTO_TEST_CASE(set_email) |
33 { | 83 { |
34 auto db = std::make_shared<database_test>(); | 84 auto ac = db_->account_draft("markand", "nopassword"); |
35 auto acc = std::make_shared<account>(db, "nanahara"); | |
36 | 85 |
37 BOOST_TEST(acc->is_draft()); | 86 ac->set_email("fake@malikania.fr"); |
38 acc->set_email("nanahara@malikania.fr"); | 87 |
39 BOOST_TEST(acc->is_draft()); | 88 BOOST_TEST(db_->test_account_dao()->accounts().size() == 0U); |
40 BOOST_TEST(acc->email() == "nanahara@malikania.fr"); | 89 |
41 acc->save(); | 90 ac->save(); |
42 BOOST_TEST((acc->is_published() && !acc->is_draft())); | 91 ac->set_email("markand@malikania.fr"); |
92 | |
93 BOOST_TEST(db_->test_account_dao()->accounts().at(ac->id()).email() == "markand@malikania.fr"); | |
94 } | |
95 | |
96 BOOST_AUTO_TEST_CASE(set_firstname) | |
97 { | |
98 auto ac = db_->account_draft("markand", "nopassword"); | |
99 | |
100 ac->set_firstname("Jean"); | |
101 | |
102 BOOST_TEST(db_->test_account_dao()->accounts().size() == 0U); | |
103 | |
104 ac->save(); | |
105 ac->set_firstname("David"); | |
106 | |
107 BOOST_TEST(db_->test_account_dao()->accounts().at(ac->id()).firstname() == "David"); | |
108 } | |
109 | |
110 BOOST_AUTO_TEST_CASE(set_lastname) | |
111 { | |
112 auto ac = db_->account_draft("markand", "nopassword"); | |
113 | |
114 ac->set_lastname("Bertrand"); | |
115 | |
116 BOOST_TEST(db_->test_account_dao()->accounts().size() == 0U); | |
117 | |
118 ac->save(); | |
119 ac->set_lastname("Demelier"); | |
120 | |
121 BOOST_TEST(db_->test_account_dao()->accounts().at(ac->id()).lastname() == "Demelier"); | |
122 } | |
123 | |
124 BOOST_AUTO_TEST_SUITE(find_by_login) | |
125 | |
126 BOOST_AUTO_TEST_CASE(simple) | |
127 { | |
128 db_->account_draft("markand", "nopassword")->save(); | |
129 | |
130 auto ac = db_->account_dao()->find_by_login("markand"); | |
131 | |
132 BOOST_TEST(ac); | |
133 BOOST_TEST(ac->is_published()); | |
134 BOOST_TEST(ac->login() == "markand"); | |
135 } | |
136 | |
137 BOOST_AUTO_TEST_CASE(not_found) | |
138 { | |
139 auto ac = db_->account_dao()->find_by_login("doesnotexist"); | |
140 | |
141 BOOST_TEST(!ac); | |
142 } | |
143 | |
144 BOOST_AUTO_TEST_CASE(same_instance) | |
145 { | |
146 db_->account_draft("markand", "nopassword")->save(); | |
147 | |
148 auto a1 = db_->account_dao()->find_by_login("markand"); | |
149 auto a2 = db_->account_dao()->find_by_login("markand"); | |
150 | |
151 BOOST_TEST(db_->test_account_dao()->accounts().size() == 1U); | |
152 BOOST_TEST(a1 == a2); | |
153 } | |
154 | |
155 BOOST_AUTO_TEST_CASE(new_instance) | |
156 { | |
157 db_->account_draft("markand", "nopassword")->save(); | |
158 | |
159 /* | |
160 * Get rid of a1 reference, account::dao is supposed to call | |
161 * do_find_by_login again, creating a new pointer to the account. | |
162 */ | |
163 auto a1 = db_->account_dao()->find_by_login("markand"); | |
164 a1 = nullptr; | |
165 | |
166 auto a2 = db_->account_dao()->find_by_login("markand"); | |
167 | |
168 BOOST_TEST(db_->test_account_dao()->accounts().size() == 1U); | |
169 BOOST_TEST(a1 != a2); | |
43 } | 170 } |
44 | 171 |
45 BOOST_AUTO_TEST_SUITE_END() | 172 BOOST_AUTO_TEST_SUITE_END() |
173 | |
174 BOOST_AUTO_TEST_SUITE_END() | |
175 | |
46 } // !server | 176 } // !server |
177 | |
47 } // !mlk | 178 } // !mlk |