#include #include "csp/app_state.h" #include "csp/controllers/auth_controller.h" #include #include namespace { drogon::HttpResponsePtr Call( void (csp::controllers::AuthController::*fn)( const drogon::HttpRequestPtr&, std::function&&), const Json::Value& body) { auto req = drogon::HttpRequest::newHttpJsonRequest(body); req->setMethod(drogon::Post); std::promise p; csp::controllers::AuthController ctl; (ctl.*fn)(req, [&p](const drogon::HttpResponsePtr& resp) { p.set_value(resp); }); return p.get_future().get(); } } // namespace TEST_CASE("auth controller: register + login") { csp::AppState::Instance().Init(":memory:"); Json::Value reg; reg["username"] = "bob"; reg["password"] = "password123"; auto regResp = Call(&csp::controllers::AuthController::registerUser, reg); REQUIRE(regResp != nullptr); REQUIRE(regResp->statusCode() == drogon::k200OK); auto j1 = regResp->jsonObject(); REQUIRE(j1 != nullptr); REQUIRE((*j1)["ok"].asBool() == true); REQUIRE((*j1)["token"].asString().size() > 10); Json::Value login; login["username"] = "bob"; login["password"] = "password123"; auto loginResp = Call(&csp::controllers::AuthController::login, login); REQUIRE(loginResp != nullptr); REQUIRE(loginResp->statusCode() == drogon::k200OK); auto j2 = loginResp->jsonObject(); REQUIRE(j2 != nullptr); REQUIRE((*j2)["ok"].asBool() == true); REQUIRE((*j2)["token"].asString().size() > 10); }