feat: 完成源晶权限与经验系统并优化 me/admin 交互
这个提交包含在:
@@ -0,0 +1,41 @@
|
||||
#include <catch2/catch_test_macros.hpp>
|
||||
|
||||
#include "csp/db/sqlite_db.h"
|
||||
#include "csp/services/auth_service.h"
|
||||
#include "csp/services/experience_service.h"
|
||||
|
||||
TEST_CASE("experience only increases on rating gains") {
|
||||
auto db = csp::db::SqliteDb::OpenMemory();
|
||||
csp::db::ApplyMigrations(db);
|
||||
csp::db::SeedDemoData(db);
|
||||
|
||||
csp::services::AuthService auth(db);
|
||||
const auto user = auth.Register("xp_user", "password123");
|
||||
|
||||
csp::services::ExperienceService xp(db);
|
||||
|
||||
const auto s0 = xp.GetSummary(user.user_id);
|
||||
REQUIRE(s0.user_id == user.user_id);
|
||||
REQUIRE(s0.experience >= 0);
|
||||
const int base_exp = s0.experience;
|
||||
|
||||
db.Exec("UPDATE users SET rating=rating+10 WHERE id=" +
|
||||
std::to_string(user.user_id));
|
||||
const auto s1 = xp.GetSummary(user.user_id);
|
||||
REQUIRE(s1.experience == base_exp + 10);
|
||||
|
||||
db.Exec("UPDATE users SET rating=rating-4 WHERE id=" +
|
||||
std::to_string(user.user_id));
|
||||
const auto s2 = xp.GetSummary(user.user_id);
|
||||
REQUIRE(s2.experience == base_exp + 10);
|
||||
|
||||
db.Exec("UPDATE users SET rating=rating+3 WHERE id=" +
|
||||
std::to_string(user.user_id));
|
||||
const auto s3 = xp.GetSummary(user.user_id);
|
||||
REQUIRE(s3.experience == base_exp + 13);
|
||||
|
||||
const auto rows = xp.ListHistory(user.user_id, 20);
|
||||
REQUIRE(rows.size() >= 2);
|
||||
REQUIRE(rows[0].xp_delta == 3);
|
||||
REQUIRE(rows[1].xp_delta == 10);
|
||||
}
|
||||
在新工单中引用
屏蔽一个用户