feat: rebuild CSP practice workflow, UX and automation

这个提交包含在:
Codex CLI
2026-02-13 15:49:05 +08:00
父节点 d33deed4c5
当前提交 e2ab522b78
修改 105 个文件,包含 15669 行新增428 行删除

查看文件

@@ -0,0 +1,18 @@
#include <catch2/catch_test_macros.hpp>
#include "csp/db/sqlite_db.h"
#include "csp/services/kb_service.h"
TEST_CASE("kb service list/detail") {
auto db = csp::db::SqliteDb::OpenMemory();
csp::db::ApplyMigrations(db);
csp::db::SeedDemoData(db);
csp::services::KbService svc(db);
const auto rows = svc.ListArticles();
REQUIRE(rows.size() >= 2);
const auto detail = svc.GetBySlug(rows.front().slug);
REQUIRE(detail.has_value());
REQUIRE(detail->article.slug == rows.front().slug);
}