#include #include "csp/app_state.h" #include "csp/controllers/import_controller.h" #include #include namespace { drogon::HttpResponsePtr CallLatest(csp::controllers::ImportController& ctl) { auto req = drogon::HttpRequest::newHttpRequest(); req->setMethod(drogon::Get); std::promise p; ctl.latestJob(req, [&p](const drogon::HttpResponsePtr& resp) { p.set_value(resp); }); return p.get_future().get(); } drogon::HttpResponsePtr CallItems(csp::controllers::ImportController& ctl, int64_t job_id) { auto req = drogon::HttpRequest::newHttpRequest(); req->setMethod(drogon::Get); req->setParameter("page", "1"); req->setParameter("page_size", "20"); std::promise p; ctl.jobItems(req, [&p](const drogon::HttpResponsePtr& resp) { p.set_value(resp); }, job_id); return p.get_future().get(); } } // namespace TEST_CASE("import controller latest and items") { csp::AppState::Instance().Init(":memory:"); auto& db = csp::AppState::Instance().db(); db.Exec( "INSERT INTO import_jobs(status,trigger,total_count,processed_count,success_count," "failed_count,options_json,last_error,started_at,finished_at,updated_at,created_at)" "VALUES('success','auto',2,2,2,0,'{\"workers\":3}','',100,120,120,90);"); db.Exec( "INSERT INTO import_job_items(job_id,source_path,status,title,difficulty,problem_id," "error_text,started_at,finished_at,updated_at,created_at)" "VALUES(1,'CSP-J/2024/Round2/B.pdf','success','B',3,7,'',101,110,120,100);"); csp::controllers::ImportController ctl; auto latest = CallLatest(ctl); REQUIRE(latest->statusCode() == drogon::k200OK); auto latest_json = latest->jsonObject(); REQUIRE(latest_json != nullptr); REQUIRE((*latest_json)["ok"].asBool()); REQUIRE((*latest_json)["data"]["job"]["id"].asInt64() == 1); auto items = CallItems(ctl, 1); REQUIRE(items->statusCode() == drogon::k200OK); auto items_json = items->jsonObject(); REQUIRE(items_json != nullptr); REQUIRE((*items_json)["ok"].asBool()); REQUIRE((*items_json)["data"]["items"].isArray()); REQUIRE((*items_json)["data"]["items"].size() == 1); }