Mercurial > malikania
diff 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 |
line wrap: on
line diff
--- a/tests/libserver/db/account/main.cpp Mon Sep 04 19:41:18 2017 +0200 +++ b/tests/libserver/db/account/main.cpp Tue Sep 05 13:33:57 2017 +0200 @@ -19,29 +19,160 @@ #define BOOST_TEST_MODULE "database account" #include <boost/test/unit_test.hpp> -#include <malikania/server/database_test.hpp> -#include <malikania/server/account_dao_test.hpp> -#include <malikania/server/db/account.hpp> +#include <malikania/server/db/test_database.hpp> namespace mlk { namespace server { -BOOST_AUTO_TEST_SUITE(basic) +class account_fixture { +protected: + std::shared_ptr<test_database> db_{new test_database}; +}; + +BOOST_FIXTURE_TEST_SUITE(basic_suite, account_fixture) + +BOOST_AUTO_TEST_CASE(save) +{ + auto acc = db_->account_draft("nanahara", "dummypassword"); + + // Initial creation must be draft. + BOOST_TEST(acc->is_draft()); + + /* + * Set some fields, the database must not be modified at all but fields + * must be set. + */ + acc->set_email("nanahara@malikania.fr"); + acc->set_firstname("Alexis"); + acc->set_lastname("Dörr"); + + BOOST_TEST(acc->is_draft()); + BOOST_TEST(!acc->is_published()); + BOOST_TEST(acc->email() == "nanahara@malikania.fr"); + BOOST_TEST(acc->firstname() == "Alexis"); + BOOST_TEST(acc->lastname() == "Dörr"); + BOOST_TEST(db_->test_account_dao()->accounts().size() == 0U); + + // Do save, database must be updated and account published. + acc->save(); + + BOOST_TEST(!acc->is_draft()); + BOOST_TEST(acc->is_published()); + BOOST_TEST(acc->email() == "nanahara@malikania.fr"); + BOOST_TEST(acc->firstname() == "Alexis"); + BOOST_TEST(acc->lastname() == "Dörr"); + BOOST_TEST(db_->test_account_dao()->accounts().size() == 1U); +} + +BOOST_AUTO_TEST_CASE(set_password) +{ + auto ac = db_->account_draft("markand", "nopassword"); + + ac->set_password("temporarypassword"); + + BOOST_TEST(db_->test_account_dao()->accounts().size() == 0U); + + ac->save(); + ac->set_password("newpassword"); + + BOOST_TEST(db_->test_account_dao()->accounts().at(ac->id()).password() == "newpassword"); +} BOOST_AUTO_TEST_CASE(set_email) { - auto db = std::make_shared<database_test>(); - auto acc = std::make_shared<account>(db, "nanahara"); + auto ac = db_->account_draft("markand", "nopassword"); + + ac->set_email("fake@malikania.fr"); + + BOOST_TEST(db_->test_account_dao()->accounts().size() == 0U); + + ac->save(); + ac->set_email("markand@malikania.fr"); + + BOOST_TEST(db_->test_account_dao()->accounts().at(ac->id()).email() == "markand@malikania.fr"); +} + +BOOST_AUTO_TEST_CASE(set_firstname) +{ + auto ac = db_->account_draft("markand", "nopassword"); + + ac->set_firstname("Jean"); + + BOOST_TEST(db_->test_account_dao()->accounts().size() == 0U); + + ac->save(); + ac->set_firstname("David"); + + BOOST_TEST(db_->test_account_dao()->accounts().at(ac->id()).firstname() == "David"); +} + +BOOST_AUTO_TEST_CASE(set_lastname) +{ + auto ac = db_->account_draft("markand", "nopassword"); + + ac->set_lastname("Bertrand"); + + BOOST_TEST(db_->test_account_dao()->accounts().size() == 0U); + + ac->save(); + ac->set_lastname("Demelier"); + + BOOST_TEST(db_->test_account_dao()->accounts().at(ac->id()).lastname() == "Demelier"); +} + +BOOST_AUTO_TEST_SUITE(find_by_login) - BOOST_TEST(acc->is_draft()); - acc->set_email("nanahara@malikania.fr"); - BOOST_TEST(acc->is_draft()); - BOOST_TEST(acc->email() == "nanahara@malikania.fr"); - acc->save(); - BOOST_TEST((acc->is_published() && !acc->is_draft())); +BOOST_AUTO_TEST_CASE(simple) +{ + db_->account_draft("markand", "nopassword")->save(); + + auto ac = db_->account_dao()->find_by_login("markand"); + + BOOST_TEST(ac); + BOOST_TEST(ac->is_published()); + BOOST_TEST(ac->login() == "markand"); +} + +BOOST_AUTO_TEST_CASE(not_found) +{ + auto ac = db_->account_dao()->find_by_login("doesnotexist"); + + BOOST_TEST(!ac); +} + +BOOST_AUTO_TEST_CASE(same_instance) +{ + db_->account_draft("markand", "nopassword")->save(); + + auto a1 = db_->account_dao()->find_by_login("markand"); + auto a2 = db_->account_dao()->find_by_login("markand"); + + BOOST_TEST(db_->test_account_dao()->accounts().size() == 1U); + BOOST_TEST(a1 == a2); +} + +BOOST_AUTO_TEST_CASE(new_instance) +{ + db_->account_draft("markand", "nopassword")->save(); + + /* + * Get rid of a1 reference, account::dao is supposed to call + * do_find_by_login again, creating a new pointer to the account. + */ + auto a1 = db_->account_dao()->find_by_login("markand"); + a1 = nullptr; + + auto a2 = db_->account_dao()->find_by_login("markand"); + + BOOST_TEST(db_->test_account_dao()->accounts().size() == 1U); + BOOST_TEST(a1 != a2); } BOOST_AUTO_TEST_SUITE_END() + +BOOST_AUTO_TEST_SUITE_END() + } // !server + } // !mlk