trying to prepare enviroment for testing

This commit is contained in:
Wieczorek Bartosz 2017-03-18 19:53:15 +01:00
parent 69753f239b
commit 8c4fb75b0d
16 changed files with 78 additions and 65 deletions

View File

@ -9,7 +9,6 @@
#include <eedb/widgets/AuthWidget.hpp>
#include <eedb/widgets/HomePage.hpp>
#include <eedb/widgets/Theme.hpp>
#include <Wt/WApplication>
#include <Wt/WServer>
@ -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) {

View File

@ -25,17 +25,15 @@
#include <Wt/WText>
#include <Wt/WTextArea>
#include <eedb/widgets/BootstrapTheme.hpp>
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> 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)),

View File

@ -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);

View File

@ -4,24 +4,19 @@
#include <eedb/db/connection.hpp>
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;
}
}

View File

@ -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;
};

View File

@ -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() {

View File

@ -1,10 +1,14 @@
#include <eedb/Session.hpp>
#include <eedb/auth/Services.hpp>
#include <eedb/widgets/AuthWidget.hpp>
#include <Wt/Auth/AbstractUserDatabase>
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);

View File

@ -3,10 +3,6 @@
#include <Wt/WSignal>
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;

View File

@ -1,4 +1,4 @@
#include <eedb/widgets/Theme.hpp>
#include <eedb/widgets/BootstrapTheme.hpp>
#include <Wt/WBootstrapTheme>

View File

@ -0,0 +1,14 @@
#pragma once
#include <eedb/widgets/Theme.hpp>
namespace eedb {
class BootstrapTheme final : public Theme {
public:
BootstrapTheme() = default;
BootstrapTheme(Theme &&) {}
BootstrapTheme(const Theme &) {}
Wt::WTheme * create() const override;
};
}

View File

@ -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.

View File

@ -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;
};
}

View File

@ -1,2 +1,4 @@
project(eedb_tests)
add_subdirectory(utils)
add_subdirectory(mocks)
add_subdirectory(unit)

View File

@ -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)

View File

@ -1,23 +1,28 @@
#include <Wt/Test/WTestEnvironment>
#include <eedb/EEDB.hpp>
#include <gmock/gmock.h>
#include "mocks/widgets/AuthWidgetMock.hpp"
#include <Wt/Test/WTestEnvironment>
#include <eedb/EEDB.hpp>
#include <eedb/Session.hpp>
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) {}

View File

@ -0,0 +1 @@
include_directories( . )