42 行
1.3 KiB
C++
42 行
1.3 KiB
C++
#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);
|
|
}
|