feat: rebuild CSP practice workflow, UX and automation
这个提交包含在:
@@ -0,0 +1,61 @@
|
||||
#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);
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户