#include #include "csp/app_state.h" #include "csp/controllers/problem_controller.h" #include #include namespace { drogon::HttpResponsePtr CallList(csp::controllers::ProblemController& ctl, const std::string& page_size = "", const std::string& tags = "") { auto req = drogon::HttpRequest::newHttpRequest(); req->setMethod(drogon::Get); if (!page_size.empty()) req->setParameter("page_size", page_size); if (!tags.empty()) req->setParameter("tags", tags); std::promise p; ctl.list(req, [&p](const drogon::HttpResponsePtr& resp) { p.set_value(resp); }); return p.get_future().get(); } drogon::HttpResponsePtr CallGet(csp::controllers::ProblemController& ctl, int64_t problem_id) { auto req = drogon::HttpRequest::newHttpRequest(); req->setMethod(drogon::Get); std::promise p; ctl.getById(req, [&p](const drogon::HttpResponsePtr& resp) { p.set_value(resp); }, problem_id); return p.get_future().get(); } } // namespace TEST_CASE("problem controller list/get") { csp::AppState::Instance().Init(":memory:"); csp::controllers::ProblemController ctl; auto list_resp = CallList(ctl, "1"); REQUIRE(list_resp->statusCode() == drogon::k200OK); auto list_json = list_resp->jsonObject(); REQUIRE(list_json != nullptr); REQUIRE((*list_json)["ok"].asBool()); REQUIRE((*list_json)["data"]["items"].isArray()); REQUIRE((*list_json)["data"]["items"].size() == 1); REQUIRE((*list_json)["data"]["total_count"].asInt() >= 1); const int64_t problem_id = (*list_json)["data"]["items"][0]["id"].asInt64(); auto get_resp = CallGet(ctl, problem_id); REQUIRE(get_resp->statusCode() == drogon::k200OK); auto get_json = get_resp->jsonObject(); REQUIRE(get_json != nullptr); REQUIRE((*get_json)["data"]["id"].asInt64() == problem_id); }