From 8c4fb75b0d1f1b68cf394ce9fe16a9e6b6bf99c9 Mon Sep 17 00:00:00 2001 From: Wieczorek Bartosz Date: Sat, 18 Mar 2017 19:53:15 +0100 Subject: [PATCH] trying to prepare enviroment for testing --- src/app/main.cpp | 20 +++++++++++------- src/eedb/EEDB.cpp | 8 +++---- src/eedb/EEDB.hpp | 1 - src/eedb/Session.cpp | 17 ++++++--------- src/eedb/Session.hpp | 21 ++++++++++++------- src/eedb/auth/PgUserAuth.cpp | 9 ++------ src/eedb/widgets/AuthWidget.cpp | 10 ++++++--- src/eedb/widgets/AuthWidget.hpp | 8 +++---- .../widgets/{Theme.cpp => BootstrapTheme.cpp} | 2 +- src/eedb/widgets/BootstrapTheme.hpp | 14 +++++++++++++ src/eedb/widgets/HomePage.cpp | 2 +- src/eedb/widgets/Theme.hpp | 8 ------- tests/CMakeLists.txt | 2 ++ tests/unit/CMakeLists.txt | 1 + tests/unit/test_eedb_application.cpp | 19 ++++++++++------- tests/utils/CMakeLists.txt | 1 + 16 files changed, 78 insertions(+), 65 deletions(-) rename src/eedb/widgets/{Theme.cpp => BootstrapTheme.cpp} (86%) create mode 100644 src/eedb/widgets/BootstrapTheme.hpp diff --git a/src/app/main.cpp b/src/app/main.cpp index bb3bf6f..c03095c 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -9,7 +9,6 @@ #include #include -#include #include #include @@ -21,23 +20,28 @@ class WContainerWidget; Wt::WApplication * createApplication(const Wt::WEnvironment & env) { using std::move; using std::make_unique; + using std::unique_ptr; auto dbConfig = make_unique< eedb::db::PgConfig >(env); auto dbConnection = make_unique< eedb::db::PgConnection >(move(dbConfig)); - auto userDatabase = make_unique< eedb::auth::PgUserAuth >(*dbConnection, env); - auto session = make_unique< eedb::Session >(move(dbConnection), env, move(userDatabase)); - auto theme = make_unique< eedb::BootstrapTheme >(); + auto session = unique_ptr< eedb::Session >(make_unique< eedb::WebSession >(move(dbConnection), env)); auto authPageFactory = [_session = session.get()]()->eedb::AuthPage * { - auto services = eedb::auth::Services(); - return new eedb::AuthPage(services, *_session); + using namespace eedb; + using namespace eedb::auth; + + auto userDatabase = make_unique< PgUserAuth >(_session->db(), _session->enviroment()); + auto services = Services(); + auto & login = _session->login(); + + return new AuthPage(services, move(userDatabase), login); }; - + auto homePageFactory = [_session = session.get()]()->eedb::HomePage * { return new eedb::Home(*_session); }; - return new eedb::EEDB{std::move(session), std::move(theme), authPageFactory, homePageFactory}; + return new eedb::EEDB{std::move(session), authPageFactory, homePageFactory}; } int main(int argc, char ** argv) { diff --git a/src/eedb/EEDB.cpp b/src/eedb/EEDB.cpp index c40272b..56260d8 100644 --- a/src/eedb/EEDB.cpp +++ b/src/eedb/EEDB.cpp @@ -25,17 +25,15 @@ #include #include +#include using std::move; namespace eedb { -EEDB::EEDB(std::unique_ptr< eedb::Session > session, - std::unique_ptr< Theme > theme, - AuthPageFactory authPageFactory, - HomePageFactory homePageFactory) +EEDB::EEDB(std::unique_ptr session, AuthPageFactory authPageFactory, HomePageFactory homePageFactory) : Wt::WApplication(session->enviroment()), _session(move(session)), - _theme(move(theme)), + _theme(std::make_unique< eedb::BootstrapTheme >()), _authPageFactory(move(authPageFactory)), _authPage(nullptr), _homePageFactory(move(homePageFactory)), diff --git a/src/eedb/EEDB.hpp b/src/eedb/EEDB.hpp index a81ec6d..5584fe6 100644 --- a/src/eedb/EEDB.hpp +++ b/src/eedb/EEDB.hpp @@ -20,7 +20,6 @@ class EEDB : public Wt::WApplication { public: enum class LoginState { weak, strong }; EEDB(std::unique_ptr< eedb::Session > session, - std::unique_ptr< Theme > theme, AuthPageFactory authPageFactory, HomePageFactory homePageFactory); diff --git a/src/eedb/Session.cpp b/src/eedb/Session.cpp index 27c5e3a..dd4c9ee 100644 --- a/src/eedb/Session.cpp +++ b/src/eedb/Session.cpp @@ -4,24 +4,19 @@ #include namespace eedb { -Session::Session(std::unique_ptr< eedb::db::PgConnection > dbConnection, - const Wt::WEnvironment & env, - std::unique_ptr< eedb::auth::PgUserAuth > usrDatabase) - : _dbConnection(std::move(dbConnection)), _env(env), _userDatabase(std::move(usrDatabase)) {} +WebSession::WebSession(std::unique_ptr< eedb::db::PgConnection > dbConnection, + const Wt::WEnvironment & env) + : _dbConnection(std::move(dbConnection)), _env(env) {} -db::PgConnection & Session::db() { +db::PgConnection & WebSession::db() { return *_dbConnection; } -const Wt::WEnvironment & Session::enviroment() { +const Wt::WEnvironment & WebSession::enviroment() { return _env; } -Wt::Auth::AbstractUserDatabase & Session::userDatabase() { - return *_userDatabase; -} - -Wt::Auth::Login & Session::login() { +Wt::Auth::Login & WebSession::login() { return _login; } } diff --git a/src/eedb/Session.hpp b/src/eedb/Session.hpp index 239c796..1cfda3b 100644 --- a/src/eedb/Session.hpp +++ b/src/eedb/Session.hpp @@ -18,18 +18,23 @@ namespace eedb { class Session { public: - Session(std::unique_ptr< eedb::db::PgConnection > dbConnection, - const Wt::WEnvironment & env, - std::unique_ptr< eedb::auth::PgUserAuth > usrDatabase); + virtual ~Session() = default; - eedb::db::PgConnection & db(); - const Wt::WEnvironment & enviroment(); - Wt::Auth::AbstractUserDatabase & userDatabase(); - Wt::Auth::Login & login(); + virtual eedb::db::PgConnection & db() = 0; + virtual const Wt::WEnvironment & enviroment() = 0; + virtual Wt::Auth::Login & login() = 0; +}; + +class WebSession final : public Session { + public: + WebSession(std::unique_ptr< eedb::db::PgConnection > dbConnection, const Wt::WEnvironment & env); + + eedb::db::PgConnection & db() override; + const Wt::WEnvironment & enviroment() override; + Wt::Auth::Login & login() override; private: std::unique_ptr< eedb::db::PgConnection > _dbConnection; - std::unique_ptr< eedb::auth::PgUserAuth > _userDatabase; Wt::Auth::Login _login; const Wt::WEnvironment & _env; }; diff --git a/src/eedb/auth/PgUserAuth.cpp b/src/eedb/auth/PgUserAuth.cpp index e8a117c..9860040 100644 --- a/src/eedb/auth/PgUserAuth.cpp +++ b/src/eedb/auth/PgUserAuth.cpp @@ -161,11 +161,7 @@ void PgUserAuth::setIdentity(const User & user, const std::string & provider, co db(update(t_identity) // .set(t_identity.identity = identity.toUTF8()) // - .where(t_identity.auth_info_id == - select(t_info.id) // - .from(t_info) // - .where(t_info.user_uid == uid) and - provider_eq)); + .where(t_identity.auth_info_id == select(t_info.id).from(t_info).where(t_info.user_uid == uid) and provider_eq)); } Wt::WString PgUserAuth::identity(const User & user, const std::string & provider) const { @@ -186,8 +182,7 @@ void PgUserAuth::removeIdentity(const User & user, const std::string & provider) const auto id_eq = t_identity.id == std::atoi(user.id().c_str()); const auto provider_eq = t_identity.provider == provider; - db(remove_from(t_identity) // - .where(id_eq and provider_eq)); + db(remove_from(t_identity).where(id_eq and provider_eq)); } User PgUserAuth::registerNew() { diff --git a/src/eedb/widgets/AuthWidget.cpp b/src/eedb/widgets/AuthWidget.cpp index 03dd81d..4decca6 100644 --- a/src/eedb/widgets/AuthWidget.cpp +++ b/src/eedb/widgets/AuthWidget.cpp @@ -1,10 +1,14 @@ -#include + #include #include +#include + namespace eedb { -AuthPage::AuthPage(const auth::Services & baseAuth, Session & session) - : Wt::Auth::AuthWidget(*baseAuth.authService(), session.userDatabase(), session.login(), nullptr) { +AuthPage::AuthPage(const auth::Services & baseAuth, + std::unique_ptr< Wt::Auth::AbstractUserDatabase > userDatabase, + Wt::Auth::Login & _login) + : Wt::Auth::AuthWidget(*baseAuth.authService(), *userDatabase.get(), _login, nullptr), _userDatabase(std::move(userDatabase)) { this->model()->addPasswordAuth(eedb::auth::Services::passwordService()); this->model()->addOAuth(eedb::auth::Services::oAuthServices()); this->setRegistrationEnabled(true); diff --git a/src/eedb/widgets/AuthWidget.hpp b/src/eedb/widgets/AuthWidget.hpp index 311f6d3..8cd2d45 100644 --- a/src/eedb/widgets/AuthWidget.hpp +++ b/src/eedb/widgets/AuthWidget.hpp @@ -3,10 +3,6 @@ #include -namespace eedb { -class Session; -} - namespace Wt { class WContainerWidget; } @@ -25,7 +21,7 @@ class AuthPage : public Wt::Auth::AuthWidget { using _base = Wt::Auth::AuthWidget; public: - AuthPage(const eedb::auth::Services & baseAuth, Session & session); + AuthPage(const eedb::auth::Services & baseAuth, std::unique_ptr< Wt::Auth::AbstractUserDatabase > userDatabase, Wt::Auth::Login & session); Wt::Signal<> & needVerification() { return _onNeedEmailVerification; @@ -44,6 +40,8 @@ class AuthPage : public Wt::Auth::AuthWidget { } private: + std::unique_ptr< Wt::Auth::AbstractUserDatabase > _userDatabase; + Wt::Signal<> _onNeedEmailVerification; Wt::Signal<> _onUserWeakLogin; Wt::Signal<> _onUserStrongLogin; diff --git a/src/eedb/widgets/Theme.cpp b/src/eedb/widgets/BootstrapTheme.cpp similarity index 86% rename from src/eedb/widgets/Theme.cpp rename to src/eedb/widgets/BootstrapTheme.cpp index 7062ebd..9743c60 100644 --- a/src/eedb/widgets/Theme.cpp +++ b/src/eedb/widgets/BootstrapTheme.cpp @@ -1,4 +1,4 @@ -#include +#include #include diff --git a/src/eedb/widgets/BootstrapTheme.hpp b/src/eedb/widgets/BootstrapTheme.hpp new file mode 100644 index 0000000..afc6bc3 --- /dev/null +++ b/src/eedb/widgets/BootstrapTheme.hpp @@ -0,0 +1,14 @@ +#pragma once + +#include + +namespace eedb { +class BootstrapTheme final : public Theme { + public: + BootstrapTheme() = default; + BootstrapTheme(Theme &&) {} + BootstrapTheme(const Theme &) {} + + Wt::WTheme * create() const override; +}; +} diff --git a/src/eedb/widgets/HomePage.cpp b/src/eedb/widgets/HomePage.cpp index d319c6e..43715bf 100644 --- a/src/eedb/widgets/HomePage.cpp +++ b/src/eedb/widgets/HomePage.cpp @@ -39,7 +39,7 @@ auto make_tree() { return tree; } -eedb::Home::Home(eedb::Session & session) : _session(session) {} +eedb::Home::Home(Session & session) : _session(session) {} void Home::show(Wt::WContainerWidget * container) { // Create a navigation bar with a link to a web page. diff --git a/src/eedb/widgets/Theme.hpp b/src/eedb/widgets/Theme.hpp index b57f097..032ffe0 100644 --- a/src/eedb/widgets/Theme.hpp +++ b/src/eedb/widgets/Theme.hpp @@ -15,12 +15,4 @@ class Theme { virtual Wt::WTheme * create() const = 0; }; -class BootstrapTheme final : public Theme { - public: - BootstrapTheme() = default; - BootstrapTheme(Theme &&) {} - BootstrapTheme(const Theme &) {} - - Wt::WTheme * create() const override; -}; } diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt index 1694a5c..20eaa57 100644 --- a/tests/CMakeLists.txt +++ b/tests/CMakeLists.txt @@ -1,2 +1,4 @@ project(eedb_tests) +add_subdirectory(utils) +add_subdirectory(mocks) add_subdirectory(unit) diff --git a/tests/unit/CMakeLists.txt b/tests/unit/CMakeLists.txt index 0d07d71..3f971ef 100644 --- a/tests/unit/CMakeLists.txt +++ b/tests/unit/CMakeLists.txt @@ -5,6 +5,7 @@ project(Tests LANGUAGES CXX) include_directories( . ) include_directories( ${eedb_app_SOURCE_DIR} ) include_directories( ../../share ) +include_directories( ../ ) include_directories( ${gtest_SOURCE_DIR}/include) include_directories( ${gmock_SOURCE_DIR}/include) diff --git a/tests/unit/test_eedb_application.cpp b/tests/unit/test_eedb_application.cpp index d87b516..fd2bfba 100644 --- a/tests/unit/test_eedb_application.cpp +++ b/tests/unit/test_eedb_application.cpp @@ -1,23 +1,28 @@ -#include -#include #include +#include "mocks/widgets/AuthWidgetMock.hpp" +#include + +#include + +#include + class EedbApplicationTest : public testing::Test { public: EedbApplicationTest() { using std::move; using std::make_unique; - auto env = Wt::Test::WTestEnvironment(); + Wt::Test::WTestEnvironment env; - auto authPageFactory = []() -> eedb::AuthPage * { return nullptr; }; + // auto authPageFactory = []() -> eedb::AuthPage * { return nullptr; }; - auto homePageFactory = []() -> eedb::HomePage * { return nullptr; }; + // auto homePageFactory = []() -> eedb::HomePage * { return nullptr; }; - sut = make_unique< eedb::EEDB >(nullptr, nullptr, authPageFactory, homePageFactory); + // sut = make_unique< eedb::EEDB >(nullptr, nullptr, authPageFactory, homePageFactory); } protected: - std::unique_ptr< eedb::EEDB > sut; +// std::unique_ptr< eedb::EEDB > sut; }; TEST_F(EedbApplicationTest, createAuthPage) {} diff --git a/tests/utils/CMakeLists.txt b/tests/utils/CMakeLists.txt index e69de29..e139f43 100644 --- a/tests/utils/CMakeLists.txt +++ b/tests/utils/CMakeLists.txt @@ -0,0 +1 @@ +include_directories( . )