#include #include #include #include #include #include #include #include #include #include #include constexpr eedb::user_audit t_user_audit; constexpr eedb::user_action t_user_action; constexpr eedb::auth_identity t_auth_identity; constexpr eedb::auth_info t_auth_info; constexpr eedb::auth_token t_auth_token; namespace { class UserMock : public eedb::User { public: MOCK_CONST_METHOD0(uid, int()); const eedb::UserConfig & config() const override {} eedb::AuthTokens & authTokens() const override {} void logout() override {} eedb::AuthIdentities & authIdentities() const {} int64_t _uid; // User interface public: eedb::AuthInfo & authInfo() const override {} }; } // namespace class PgAuthTokensTest : public DbTestBase< PgAuthTokensTest > { public: PgAuthTokensTest() { using namespace testing; db().native()->start_transaction(); authInfoId = db()(sqlpp::postgresql::insert_into(t_auth_info) .set( // t_auth_info.password_hash = "$2y$07$RyytUhDhLDbAPjf0b0r2Y.dsg.FlQ7L.xzWHMmoelI81u0MfBrW7q", t_auth_info.password_method = "bcrypt", t_auth_info.password_salt = "OM/Z1c4WBFXvwkxh", t_auth_info.email = "none@eedb.pl", // t_auth_info.status = 0) .returning(t_auth_info.id)) .front() .id; ON_CALL(user, uid()).WillByDefault(testing::Return(authInfoId)); sut = std::make_unique< eedb::PgAuthTokens >(db(), &user); } void createToken(std::string hash, eedb::AuthTokenRole role) { db()(sqlpp::postgresql::insert_into(t_auth_token) // .set( // t_auth_token.value = hash, // t_auth_token.auth_info_id = authInfoId, // t_auth_token.role = static_cast< int16_t >(role), // t_auth_token.expires = std::chrono::system_clock::now() + std::chrono::hours{1})); } ~PgAuthTokensTest() { db().native()->rollback_transaction(false); } protected: UserMock user; int64_t authInfoId{0}; std::unique_ptr< eedb::PgAuthTokens > sut; }; template <> std::unique_ptr< PgTestDatabasePrepare > DbTestBase< PgAuthTokensTest >::_test_db = {}; using namespace sqlpp; using namespace eedb; TEST_F(PgAuthTokensTest, authTokenFound) { createToken("token", AuthTokenRole::Auth); EXPECT_TRUE(sut->find("token")); } TEST_F(PgAuthTokensTest, emailTokenFound) { createToken("emailtoken", AuthTokenRole::EmailToken); EXPECT_TRUE(sut->find(AuthTokenRole::EmailToken)); } TEST_F(PgAuthTokensTest, tokenNotFound) { EXPECT_FALSE(sut->find("token")); } TEST_F(PgAuthTokensTest, addMultipleAuthTokens) { sut->addToken("authtoken1", eedb::AuthTokenRole::Auth); sut->addToken("authtoken2", eedb::AuthTokenRole::Auth); EXPECT_TRUE(sut->find("authtoken1")); EXPECT_TRUE(sut->find("authtoken2")); } TEST_F(PgAuthTokensTest, removeToken) { sut->addToken("authtoken1", eedb::AuthTokenRole::Auth); sut->addToken("authtoken2", eedb::AuthTokenRole::Auth); sut->removeToken("authtoken1"); EXPECT_FALSE(sut->find("authtoken1")); }