Server integrations / Paper and protocol tests (push) Failing after 20s
Server integrations / fabric / 1.20.1 (push) Failing after 11s
Server integrations / fabric / 1.21.1 (push) Failing after 14s
Server integrations / fabric / 26.1.2 (push) Failing after 17s
Server integrations / fabric / 26.2 (push) Failing after 12s
Server integrations / fabric / 26.3 (push) Failing after 6s
Server integrations / forge / 1.20.1 (push) Failing after 6s
Server integrations / forge / 1.21.1 (push) Failing after 8s
Server integrations / forge / 26.1.2 (push) Failing after 8s
Server integrations / forge / 26.2 (push) Failing after 8s
Server integrations / forge / 26.3 (push) Failing after 7s
CI / Web UIs (type-check + build) (panel/web) (push) Canceled after 0s
CI / Launcher (Windows build check) (push) Canceled after 2m53s
CI / Real installs (Mojang, Fabric, Quilt, Forge, NeoForge) (push) Canceled after 0s
CI / Docker image builds (push) Canceled after 0s
CI / Rust (fmt, clippy, tests) (push) Canceled after 1m22s
CI / Web UIs (type-check + build) (launcher) (push) Canceled after 1m27s
82 lines
4.1 KiB
Rust
82 lines
4.1 KiB
Rust
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}");
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn renaming_a_global_title_reaches_the_profile_and_reward_list() {
|
|
let t = setup().await;
|
|
let admin = t.login("admin", "supersecret").await;
|
|
t.call("POST", "/api/admin/users", Some(&admin), Some(json!({"username":"Steve","password":"password123"}))).await;
|
|
let steve = t.login("Steve", "password123").await;
|
|
let uuid = t.uuid("Steve").await;
|
|
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 (_, made) = t
|
|
.call(
|
|
"POST",
|
|
"/api/admin/levels/rewards",
|
|
Some(&admin),
|
|
Some(json!({"level": 100, "reward_type": "title", "reward_value": "Explorer"})),
|
|
)
|
|
.await;
|
|
let id = made["id"].as_i64().unwrap();
|
|
let (_, me) = t.call("GET", "/api/v1/levels/me", Some(&steve), None).await;
|
|
assert_eq!(me["title"], "Explorer", "{me}");
|
|
t.call(
|
|
"PUT",
|
|
&format!("/api/admin/levels/rewards/{id}"),
|
|
Some(&admin),
|
|
Some(json!({"level": 100, "reward_type": "title", "reward_value": "Pathfinder"})),
|
|
)
|
|
.await;
|
|
let (_, me) = t.call("GET", "/api/v1/levels/me", Some(&steve), None).await;
|
|
assert_eq!(me["title"], "Pathfinder", "{me}");
|
|
let rewards = me["rewards"].to_string();
|
|
assert!(rewards.contains("Pathfinder") && !rewards.contains("Explorer"), "{rewards}");
|
|
let (_, list) = t.call("GET", "/api/v1/levels/rewards", Some(&steve), None).await;
|
|
assert!(list.to_string().contains("Pathfinder") && !list.to_string().contains("Explorer"), "{list}");
|
|
}
|