Files
tranquil-pds/tests/admin_invite.rs
2025-12-31 19:13:59 +02:00

266 lines
7.5 KiB
Rust

mod common;
use common::*;
use reqwest::StatusCode;
use serde_json::{Value, json};
#[tokio::test]
async fn test_admin_get_invite_codes_success() {
let client = client();
let (access_jwt, _did) = create_admin_account_and_login(&client).await;
let create_payload = json!({
"useCount": 3
});
let _ = client
.post(format!(
"{}/xrpc/com.atproto.server.createInviteCode",
base_url().await
))
.bearer_auth(&access_jwt)
.json(&create_payload)
.send()
.await
.expect("Failed to create invite code");
let res = client
.get(format!(
"{}/xrpc/com.atproto.admin.getInviteCodes",
base_url().await
))
.bearer_auth(&access_jwt)
.send()
.await
.expect("Failed to send request");
assert_eq!(res.status(), StatusCode::OK);
let body: Value = res.json().await.expect("Response was not valid JSON");
assert!(body["codes"].is_array());
}
#[tokio::test]
async fn test_admin_get_invite_codes_with_limit() {
let client = client();
let (access_jwt, _did) = create_admin_account_and_login(&client).await;
for _ in 0..5 {
let create_payload = json!({
"useCount": 1
});
let _ = client
.post(format!(
"{}/xrpc/com.atproto.server.createInviteCode",
base_url().await
))
.bearer_auth(&access_jwt)
.json(&create_payload)
.send()
.await;
}
let res = client
.get(format!(
"{}/xrpc/com.atproto.admin.getInviteCodes",
base_url().await
))
.bearer_auth(&access_jwt)
.query(&[("limit", "2")])
.send()
.await
.expect("Failed to send request");
assert_eq!(res.status(), StatusCode::OK);
let body: Value = res.json().await.expect("Response was not valid JSON");
let codes = body["codes"].as_array().unwrap();
assert!(codes.len() <= 2);
}
#[tokio::test]
async fn test_admin_get_invite_codes_no_auth() {
let client = client();
let res = client
.get(format!(
"{}/xrpc/com.atproto.admin.getInviteCodes",
base_url().await
))
.send()
.await
.expect("Failed to send request");
assert_eq!(res.status(), StatusCode::UNAUTHORIZED);
}
#[tokio::test]
async fn test_disable_account_invites_no_auth() {
let client = client();
let payload = json!({
"account": "did:plc:test"
});
let res = client
.post(format!(
"{}/xrpc/com.atproto.admin.disableAccountInvites",
base_url().await
))
.json(&payload)
.send()
.await
.expect("Failed to send request");
assert_eq!(res.status(), StatusCode::UNAUTHORIZED);
}
#[tokio::test]
async fn test_disable_account_invites_not_found() {
let client = client();
let (access_jwt, _did) = create_admin_account_and_login(&client).await;
let payload = json!({
"account": "did:plc:nonexistent"
});
let res = client
.post(format!(
"{}/xrpc/com.atproto.admin.disableAccountInvites",
base_url().await
))
.bearer_auth(&access_jwt)
.json(&payload)
.send()
.await
.expect("Failed to send request");
assert_eq!(res.status(), StatusCode::NOT_FOUND);
}
#[tokio::test]
async fn test_disable_invite_codes_by_code() {
let client = client();
let (access_jwt, admin_did) = create_admin_account_and_login(&client).await;
let create_payload = json!({
"useCount": 5,
"forAccount": admin_did
});
let create_res = client
.post(format!(
"{}/xrpc/com.atproto.server.createInviteCode",
base_url().await
))
.bearer_auth(&access_jwt)
.json(&create_payload)
.send()
.await
.expect("Failed to create invite code");
let create_body: Value = create_res.json().await.unwrap();
let code = create_body["code"].as_str().unwrap();
let disable_payload = json!({
"codes": [code]
});
let res = client
.post(format!(
"{}/xrpc/com.atproto.admin.disableInviteCodes",
base_url().await
))
.bearer_auth(&access_jwt)
.json(&disable_payload)
.send()
.await
.expect("Failed to send request");
assert_eq!(res.status(), StatusCode::OK);
let list_res = client
.get(format!(
"{}/xrpc/com.atproto.admin.getInviteCodes",
base_url().await
))
.bearer_auth(&access_jwt)
.send()
.await
.expect("Failed to get invite codes");
let list_body: Value = list_res.json().await.unwrap();
let codes = list_body["codes"].as_array().unwrap();
let disabled_code = codes.iter().find(|c| c["code"].as_str().unwrap() == code);
assert!(disabled_code.is_some());
assert_eq!(disabled_code.unwrap()["disabled"], true);
}
#[tokio::test]
async fn test_disable_invite_codes_by_account() {
let client = client();
let (access_jwt, did) = create_admin_account_and_login(&client).await;
for _ in 0..3 {
let create_payload = json!({
"useCount": 1,
"forAccount": did
});
let _ = client
.post(format!(
"{}/xrpc/com.atproto.server.createInviteCode",
base_url().await
))
.bearer_auth(&access_jwt)
.json(&create_payload)
.send()
.await;
}
let disable_payload = json!({
"accounts": [did]
});
let res = client
.post(format!(
"{}/xrpc/com.atproto.admin.disableInviteCodes",
base_url().await
))
.bearer_auth(&access_jwt)
.json(&disable_payload)
.send()
.await
.expect("Failed to send request");
assert_eq!(res.status(), StatusCode::OK);
let list_res = client
.get(format!(
"{}/xrpc/com.atproto.admin.getInviteCodes",
base_url().await
))
.bearer_auth(&access_jwt)
.send()
.await
.expect("Failed to get invite codes");
let list_body: Value = list_res.json().await.unwrap();
let codes = list_body["codes"].as_array().unwrap();
let admin_codes: Vec<_> = codes
.iter()
.filter(|c| c["forAccount"].as_str() == Some(&did))
.collect();
for code in admin_codes {
assert_eq!(code["disabled"], true);
}
}
#[tokio::test]
async fn test_disable_invite_codes_no_auth() {
let client = client();
let payload = json!({
"codes": ["some-code"]
});
let res = client
.post(format!(
"{}/xrpc/com.atproto.admin.disableInviteCodes",
base_url().await
))
.json(&payload)
.send()
.await
.expect("Failed to send request");
assert_eq!(res.status(), StatusCode::UNAUTHORIZED);
}
#[tokio::test]
async fn test_admin_enable_account_invites_not_found() {
let client = client();
let (access_jwt, _did) = create_admin_account_and_login(&client).await;
let payload = json!({
"account": "did:plc:nonexistent"
});
let res = client
.post(format!(
"{}/xrpc/com.atproto.admin.enableAccountInvites",
base_url().await
))
.bearer_auth(&access_jwt)
.json(&payload)
.send()
.await
.expect("Failed to send request");
assert_eq!(res.status(), StatusCode::NOT_FOUND);
}