文件
csp/backend/tests/problem_http_test.cc

62 行
2.0 KiB
C++

#include <catch2/catch_test_macros.hpp>
#include "csp/app_state.h"
#include "csp/controllers/problem_controller.h"
#include <drogon/HttpRequest.h>
#include <future>
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<drogon::HttpResponsePtr> 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<drogon::HttpResponsePtr> 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);
}