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