Rank title renames now reach every player (server ranks recomputed too)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DjMbLQujBHunCCu5GpsHaT
This commit is contained in:
Claude committed 2026-10-01 00:47:10 +00:00
1 parent 5346b1f560
commit f428bd210f
2 files changed
+52 -3

No files matched your search

+33
View File
@@ -0,0 +1,33 @@
mod common;
use common::*;
#[tokio::test]
async fn renaming_a_rank_title_reaches_players() {
let t = setup().await;
let admin = t.login("admin", "supersecret").await;
let (_, user) = t.call("POST", "/api/admin/users", Some(&admin), Some(json!({"username":"Steve","password":"password123"}))).await;
assert!(user.get("id").is_some() || user.get("user").is_some(), "{user}");
let steve = t.login("Steve", "password123").await;
let uuid = t.uuid("Steve").await;
let (_, server) = t.call("POST", "/api/admin/servers", Some(&admin), Some(json!({"name":"SMP","instance_id":"smp"}))).await;
let sid = server["server"]["id"].as_i64().unwrap();
sqlx::query("INSERT INTO server_levels (server_id, uuid, server_xp, server_level, updated_at) VALUES (?, ?, 100000, 10, 'now') ON CONFLICT(server_id, uuid) DO UPDATE SET server_xp = 100000")
.bind(sid).bind(&uuid).execute(&t.db).await.unwrap();
sqlx::query("INSERT INTO user_levels (uuid, global_xp, global_level, updated_at) VALUES (?, 100000, 10, 'now') ON CONFLICT(uuid) DO UPDATE SET global_xp = 100000").bind(&uuid).execute(&t.db).await.unwrap();
let (s, made) = t.call("POST", "/api/admin/rewards", Some(&admin), Some(json!({"level_type":"server","server_id":sid,"level_req":2,"reward_type":"title","reward_name":"Squire"}))).await;
assert_eq!(s, StatusCode::OK, "{made}");
let id = made["id"].as_i64().unwrap();
let rank = |v: &Value| v["server_levels"][0]["rank_name"].clone();
let (_, levels) = t.call("GET", &format!("/api/v1/levels/player/{uuid}"), Some(&steve), None).await;
assert_eq!(rank(&levels), "Squire", "{levels}");
let (s, r) = t.call("PUT", &format!("/api/admin/rewards/{id}"), Some(&admin), Some(json!({"level_type":"server","server_id":sid,"level_req":2,"reward_type":"title","reward_name":"Knight"}))).await;
assert_eq!(s, StatusCode::OK, "{r}");
let (_, levels) = t.call("GET", &format!("/api/v1/levels/player/{uuid}"), Some(&steve), None).await;
assert_eq!(rank(&levels), "Knight", "a renamed rank shows up straight away");
assert_eq!(t.call("DELETE", &format!("/api/admin/rewards/{id}"), Some(&admin), None).await.0, StatusCode::OK);
let (_, levels) = t.call("GET", &format!("/api/v1/levels/player/{uuid}"), Some(&steve), None).await;
assert!(rank(&levels).is_null(), "{levels}");
}