Mercurial > malikania
view tests/libserver/db/account/main.cpp @ 181:fbfc2555bda5
Common: cleanup
author | David Demelier <markand@malikania.fr> |
---|---|
date | Fri, 12 Oct 2018 20:24:40 +0200 |
parents | be0d90706ded |
children |
line wrap: on
line source
/* * main.cpp -- unit test for database * * Copyright (c) 2013-2018 Alexis Dörr <nanahara@malikania.fr> * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #define BOOST_TEST_MODULE "database account" #include <boost/test/unit_test.hpp> #include <malikania/server/db/broken_database.hpp> #include <malikania/server/db/database_fixture.hpp> namespace mlk { namespace server { /* * Test behaviour with broken implementation. * ------------------------------------------------------------------ */ class broken_fixture { protected: broken_database db_; }; BOOST_FIXTURE_TEST_SUITE(broken_fixture_suite, broken_fixture) BOOST_AUTO_TEST_CASE(save) { account ac(db_, "markand", "nopassword"); try { ac.save(); } catch (...) {} BOOST_TEST(ac.is_draft()); } BOOST_AUTO_TEST_CASE(remove) { db_.set_account_flags(broken_account_dao::allow_flags::publish); account ac(db_, "markand", "nopassword"); ac.save(); try { ac.remove(); } catch (...) {} BOOST_TEST(ac.is_published()); } BOOST_AUTO_TEST_CASE(set_password) { db_.set_account_flags(broken_account_dao::allow_flags::publish); account ac(db_, "markand", "nopassword"); ac.save(); try { ac.set_password("newpassword"); } catch (...) {} BOOST_TEST(ac.get_password() == "nopassword"); } BOOST_AUTO_TEST_CASE(set_email) { db_.set_account_flags(broken_account_dao::allow_flags::publish); account ac(db_, "markand", "nopassword"); ac.save(); try { ac.set_email("markand@malikania.fr"); } catch (...) {} BOOST_TEST(ac.get_email() == ""); } BOOST_AUTO_TEST_CASE(set_firstname) { db_.set_account_flags(broken_account_dao::allow_flags::publish); account ac(db_, "markand", "nopassword"); ac.save(); try { ac.set_firstname("David"); } catch (...) {} BOOST_TEST(ac.get_firstname() == ""); } BOOST_AUTO_TEST_CASE(set_lastname) { db_.set_account_flags(broken_account_dao::allow_flags::publish); account ac(db_, "markand", "nopassword"); ac.save(); try { ac.set_lastname("David"); } catch (...) {} BOOST_TEST(ac.get_lastname() == ""); } BOOST_AUTO_TEST_CASE(add_character) { db_.set_account_flags(broken_account_dao::allow_flags::publish); account ac(db_, "markand", "nopassword"); ac.save(); try { ac.add(character(db_, "erekin", "fire")); } catch (...) {} BOOST_TEST(ac.get_characters().size() == 0U); } BOOST_AUTO_TEST_SUITE_END() /* * Generic tests using all backends. * ------------------------------------------------------------------ */ BOOST_AUTO_TEST_SUITE(generic) void fill(database& db) { account ac(db, "markand", "nopassword"); ac.set_email("markand@malikania.fr"); ac.set_firstname("David"); ac.set_lastname("Demelier"); ac.save(); { character ch(db, "erekin", "blackmage"); ch.set_levels({10U, 7U, 12U, 9U, 8U}); ch.set_factors({20U, 20U, 20U, 20U, 20U}); ch.set_experience({1000U, 2000U, 3000U, 4000U, 5000U}); ac.add(std::move(ch)); } { character ch(db, "luna", "fairy"); ch.set_levels({12U, 6U, 12U, 9U, 8U}); ch.set_factors({20U, 20U, 20U, 20U, 20U}); ch.set_experience({2000U, 3000U, 4000U, 5000U, 6000U}); ac.add(std::move(ch)); } } BOOST_AUTO_TEST_CASE_TEMPLATE(load, Database, database_types) { Database db; fill(db.db()); auto ac = db.db().accounts().find_by_login("markand"); BOOST_TEST(ac->get_login() == "markand"); BOOST_TEST(ac->get_password() == "nopassword"); BOOST_TEST(ac->get_email() == "markand@malikania.fr"); BOOST_TEST(ac->get_firstname() == "David"); BOOST_TEST(ac->get_lastname() == "Demelier"); BOOST_TEST(ac->get_characters().size() == 2U); const auto& characters = ac->get_characters(); const auto erekin = std::find_if(characters.begin(), characters.end(), [] (const auto& c) { return c.get_nickname() == "erekin"; }); BOOST_TEST(erekin->get_nickname() == "erekin"); BOOST_TEST(erekin->get_classname() == "blackmage"); BOOST_TEST(erekin->get_levels()[character::hp] == 10U); BOOST_TEST(erekin->get_levels()[character::force] == 7U); BOOST_TEST(erekin->get_levels()[character::defense] == 12U); BOOST_TEST(erekin->get_levels()[character::agility] == 9U); BOOST_TEST(erekin->get_levels()[character::luck] == 8U); BOOST_TEST(erekin->get_factors()[character::hp] == 20U); BOOST_TEST(erekin->get_factors()[character::force] == 20U); BOOST_TEST(erekin->get_factors()[character::defense] == 20U); BOOST_TEST(erekin->get_factors()[character::agility] == 20U); BOOST_TEST(erekin->get_factors()[character::luck] == 20U); BOOST_TEST(erekin->get_experience()[character::hp] == 1000U); BOOST_TEST(erekin->get_experience()[character::force] == 2000U); BOOST_TEST(erekin->get_experience()[character::defense] == 3000U); BOOST_TEST(erekin->get_experience()[character::agility] == 4000U); BOOST_TEST(erekin->get_experience()[character::luck] == 5000U); const auto luna = std::find_if(characters.begin(), characters.end(), [] (const auto& c) { return c.get_nickname() == "luna"; }); BOOST_TEST(luna->get_nickname() == "luna"); BOOST_TEST(luna->get_classname() == "fairy"); BOOST_TEST(luna->get_levels()[character::hp] == 12U); BOOST_TEST(luna->get_levels()[character::force] == 6U); BOOST_TEST(luna->get_levels()[character::defense] == 12U); BOOST_TEST(luna->get_levels()[character::agility] == 9U); BOOST_TEST(luna->get_levels()[character::luck] == 8U); BOOST_TEST(luna->get_factors()[character::hp] == 20U); BOOST_TEST(luna->get_factors()[character::force] == 20U); BOOST_TEST(luna->get_factors()[character::defense] == 20U); BOOST_TEST(luna->get_factors()[character::agility] == 20U); BOOST_TEST(luna->get_factors()[character::luck] == 20U); BOOST_TEST(luna->get_experience()[character::hp] == 2000U); BOOST_TEST(luna->get_experience()[character::force] == 3000U); BOOST_TEST(luna->get_experience()[character::defense] == 4000U); BOOST_TEST(luna->get_experience()[character::agility] == 5000U); BOOST_TEST(luna->get_experience()[character::luck] == 6000U); } BOOST_AUTO_TEST_CASE_TEMPLATE(set_password, Database, database_types) { Database db; fill(db.db()); db.db().accounts().find_by_login("markand")->set_password("hello"); BOOST_TEST(db.db().accounts().find_by_login("markand")->get_password() == "hello"); } BOOST_AUTO_TEST_CASE_TEMPLATE(set_email, Database, database_types) { Database db; fill(db.db()); db.db().accounts().find_by_login("markand")->set_email("no@spam.org"); BOOST_TEST(db.db().accounts().find_by_login("markand")->get_email() == "no@spam.org"); } BOOST_AUTO_TEST_CASE_TEMPLATE(set_firstname, Database, database_types) { Database db; fill(db.db()); db.db().accounts().find_by_login("markand")->set_firstname("Francis"); BOOST_TEST(db.db().accounts().find_by_login("markand")->get_firstname() == "Francis"); } BOOST_AUTO_TEST_CASE_TEMPLATE(set_lastname, Database, database_types) { Database db; fill(db.db()); db.db().accounts().find_by_login("markand")->set_lastname("Lalanne"); BOOST_TEST(db.db().accounts().find_by_login("markand")->get_lastname() == "Lalanne"); } BOOST_AUTO_TEST_SUITE_END() } // !server } // !mlk