#include #include "csp/app_state.h" #include "csp/controllers/me_controller.h" #include "csp/services/auth_service.h" #include "csp/services/problem_service.h" #include #include namespace { drogon::HttpResponsePtr CallProfile(csp::controllers::MeController& ctl, const std::string& token) { auto req = drogon::HttpRequest::newHttpRequest(); req->setMethod(drogon::Get); req->addHeader("Authorization", "Bearer " + token); std::promise p; ctl.profile(req, [&p](const drogon::HttpResponsePtr& resp) { p.set_value(resp); }); return p.get_future().get(); } drogon::HttpResponsePtr CallListWrongBook(csp::controllers::MeController& ctl, const std::string& token) { auto req = drogon::HttpRequest::newHttpRequest(); req->setMethod(drogon::Get); req->addHeader("Authorization", "Bearer " + token); std::promise p; ctl.listWrongBook(req, [&p](const drogon::HttpResponsePtr& resp) { p.set_value(resp); }); return p.get_future().get(); } drogon::HttpResponsePtr CallPatchWrongBook(csp::controllers::MeController& ctl, const std::string& token, int64_t problem_id, const std::string& note) { Json::Value body; body["note"] = note; auto req = drogon::HttpRequest::newHttpJsonRequest(body); req->setMethod(drogon::Patch); req->addHeader("Authorization", "Bearer " + token); std::promise p; ctl.upsertWrongBookNote(req, [&p](const drogon::HttpResponsePtr& resp) { p.set_value(resp); }, problem_id); return p.get_future().get(); } drogon::HttpResponsePtr CallDeleteWrongBook(csp::controllers::MeController& ctl, const std::string& token, int64_t problem_id) { auto req = drogon::HttpRequest::newHttpRequest(); req->setMethod(drogon::Delete); req->addHeader("Authorization", "Bearer " + token); std::promise p; ctl.deleteWrongBookItem(req, [&p](const drogon::HttpResponsePtr& resp) { p.set_value(resp); }, problem_id); return p.get_future().get(); } } // namespace TEST_CASE("me controller profile and wrong-book") { csp::AppState::Instance().Init(":memory:"); csp::services::AuthService auth(csp::AppState::Instance().db()); const auto login = auth.Register("me_http_user", "password123"); csp::services::ProblemService problems(csp::AppState::Instance().db()); const auto list = problems.List(csp::services::ProblemQuery{}); REQUIRE_FALSE(list.items.empty()); const int64_t problem_id = list.items.front().id; csp::controllers::MeController ctl; auto profile = CallProfile(ctl, login.token); REQUIRE(profile->statusCode() == drogon::k200OK); auto profile_json = profile->jsonObject(); REQUIRE(profile_json != nullptr); REQUIRE((*profile_json)["ok"].asBool()); auto patch = CallPatchWrongBook(ctl, login.token, problem_id, "复盘记录"); REQUIRE(patch->statusCode() == drogon::k200OK); auto list_resp = CallListWrongBook(ctl, login.token); REQUIRE(list_resp->statusCode() == drogon::k200OK); auto list_json = list_resp->jsonObject(); REQUIRE(list_json != nullptr); REQUIRE((*list_json)["data"].isArray()); REQUIRE((*list_json)["data"].size() >= 1); auto del = CallDeleteWrongBook(ctl, login.token, problem_id); REQUIRE(del->statusCode() == drogon::k200OK); }