this repo has no description
1mod common; 2use common::*; 3use reqwest::StatusCode; 4use serde_json::{Value, json}; 5 6#[tokio::test] 7async fn test_create_invite_code_success() { 8 let client = client(); 9 let (access_jwt, _did) = create_account_and_login(&client).await; 10 let payload = json!({ 11 "useCount": 5 12 }); 13 let res = client 14 .post(format!( 15 "{}/xrpc/com.atproto.server.createInviteCode", 16 base_url().await 17 )) 18 .bearer_auth(&access_jwt) 19 .json(&payload) 20 .send() 21 .await 22 .expect("Failed to send request"); 23 assert_eq!(res.status(), StatusCode::OK); 24 let body: Value = res.json().await.expect("Response was not valid JSON"); 25 assert!(body["code"].is_string()); 26 let code = body["code"].as_str().unwrap(); 27 assert!(!code.is_empty()); 28 assert!(code.contains('-'), "Code should be a UUID format"); 29} 30 31#[tokio::test] 32async fn test_create_invite_code_no_auth() { 33 let client = client(); 34 let payload = json!({ 35 "useCount": 5 36 }); 37 let res = client 38 .post(format!( 39 "{}/xrpc/com.atproto.server.createInviteCode", 40 base_url().await 41 )) 42 .json(&payload) 43 .send() 44 .await 45 .expect("Failed to send request"); 46 assert_eq!(res.status(), StatusCode::UNAUTHORIZED); 47 let body: Value = res.json().await.expect("Response was not valid JSON"); 48 assert_eq!(body["error"], "AuthenticationRequired"); 49} 50 51#[tokio::test] 52async fn test_create_invite_code_invalid_use_count() { 53 let client = client(); 54 let (access_jwt, _did) = create_account_and_login(&client).await; 55 let payload = json!({ 56 "useCount": 0 57 }); 58 let res = client 59 .post(format!( 60 "{}/xrpc/com.atproto.server.createInviteCode", 61 base_url().await 62 )) 63 .bearer_auth(&access_jwt) 64 .json(&payload) 65 .send() 66 .await 67 .expect("Failed to send request"); 68 assert_eq!(res.status(), StatusCode::BAD_REQUEST); 69 let body: Value = res.json().await.expect("Response was not valid JSON"); 70 assert_eq!(body["error"], "InvalidRequest"); 71} 72 73#[tokio::test] 74async fn test_create_invite_code_for_another_account() { 75 let client = client(); 76 let (access_jwt1, _did1) = create_account_and_login(&client).await; 77 let (_access_jwt2, did2) = create_account_and_login(&client).await; 78 let payload = json!({ 79 "useCount": 3, 80 "forAccount": did2 81 }); 82 let res = client 83 .post(format!( 84 "{}/xrpc/com.atproto.server.createInviteCode", 85 base_url().await 86 )) 87 .bearer_auth(&access_jwt1) 88 .json(&payload) 89 .send() 90 .await 91 .expect("Failed to send request"); 92 assert_eq!(res.status(), StatusCode::OK); 93 let body: Value = res.json().await.expect("Response was not valid JSON"); 94 assert!(body["code"].is_string()); 95} 96 97#[tokio::test] 98async fn test_create_invite_codes_success() { 99 let client = client(); 100 let (access_jwt, _did) = create_account_and_login(&client).await; 101 let payload = json!({ 102 "useCount": 2, 103 "codeCount": 3 104 }); 105 let res = client 106 .post(format!( 107 "{}/xrpc/com.atproto.server.createInviteCodes", 108 base_url().await 109 )) 110 .bearer_auth(&access_jwt) 111 .json(&payload) 112 .send() 113 .await 114 .expect("Failed to send request"); 115 assert_eq!(res.status(), StatusCode::OK); 116 let body: Value = res.json().await.expect("Response was not valid JSON"); 117 assert!(body["codes"].is_array()); 118 let codes = body["codes"].as_array().unwrap(); 119 assert_eq!(codes.len(), 1); 120 assert_eq!(codes[0]["codes"].as_array().unwrap().len(), 3); 121} 122 123#[tokio::test] 124async fn test_create_invite_codes_for_multiple_accounts() { 125 let client = client(); 126 let (access_jwt1, did1) = create_account_and_login(&client).await; 127 let (_access_jwt2, did2) = create_account_and_login(&client).await; 128 let payload = json!({ 129 "useCount": 1, 130 "codeCount": 2, 131 "forAccounts": [did1, did2] 132 }); 133 let res = client 134 .post(format!( 135 "{}/xrpc/com.atproto.server.createInviteCodes", 136 base_url().await 137 )) 138 .bearer_auth(&access_jwt1) 139 .json(&payload) 140 .send() 141 .await 142 .expect("Failed to send request"); 143 assert_eq!(res.status(), StatusCode::OK); 144 let body: Value = res.json().await.expect("Response was not valid JSON"); 145 let codes = body["codes"].as_array().unwrap(); 146 assert_eq!(codes.len(), 2); 147 for code_obj in codes { 148 assert!(code_obj["account"].is_string()); 149 assert_eq!(code_obj["codes"].as_array().unwrap().len(), 2); 150 } 151} 152 153#[tokio::test] 154async fn test_create_invite_codes_no_auth() { 155 let client = client(); 156 let payload = json!({ 157 "useCount": 2 158 }); 159 let res = client 160 .post(format!( 161 "{}/xrpc/com.atproto.server.createInviteCodes", 162 base_url().await 163 )) 164 .json(&payload) 165 .send() 166 .await 167 .expect("Failed to send request"); 168 assert_eq!(res.status(), StatusCode::UNAUTHORIZED); 169} 170 171#[tokio::test] 172async fn test_get_account_invite_codes_success() { 173 let client = client(); 174 let (access_jwt, _did) = create_account_and_login(&client).await; 175 let create_payload = json!({ 176 "useCount": 5 177 }); 178 let _ = client 179 .post(format!( 180 "{}/xrpc/com.atproto.server.createInviteCode", 181 base_url().await 182 )) 183 .bearer_auth(&access_jwt) 184 .json(&create_payload) 185 .send() 186 .await 187 .expect("Failed to create invite code"); 188 let res = client 189 .get(format!( 190 "{}/xrpc/com.atproto.server.getAccountInviteCodes", 191 base_url().await 192 )) 193 .bearer_auth(&access_jwt) 194 .send() 195 .await 196 .expect("Failed to send request"); 197 assert_eq!(res.status(), StatusCode::OK); 198 let body: Value = res.json().await.expect("Response was not valid JSON"); 199 assert!(body["codes"].is_array()); 200 let codes = body["codes"].as_array().unwrap(); 201 assert!(!codes.is_empty()); 202 let code = &codes[0]; 203 assert!(code["code"].is_string()); 204 assert!(code["available"].is_number()); 205 assert!(code["disabled"].is_boolean()); 206 assert!(code["createdAt"].is_string()); 207 assert!(code["uses"].is_array()); 208} 209 210#[tokio::test] 211async fn test_get_account_invite_codes_no_auth() { 212 let client = client(); 213 let res = client 214 .get(format!( 215 "{}/xrpc/com.atproto.server.getAccountInviteCodes", 216 base_url().await 217 )) 218 .send() 219 .await 220 .expect("Failed to send request"); 221 assert_eq!(res.status(), StatusCode::UNAUTHORIZED); 222} 223 224#[tokio::test] 225async fn test_get_account_invite_codes_include_used_filter() { 226 let client = client(); 227 let (access_jwt, _did) = create_account_and_login(&client).await; 228 let create_payload = json!({ 229 "useCount": 5 230 }); 231 let _ = client 232 .post(format!( 233 "{}/xrpc/com.atproto.server.createInviteCode", 234 base_url().await 235 )) 236 .bearer_auth(&access_jwt) 237 .json(&create_payload) 238 .send() 239 .await 240 .expect("Failed to create invite code"); 241 let res = client 242 .get(format!( 243 "{}/xrpc/com.atproto.server.getAccountInviteCodes", 244 base_url().await 245 )) 246 .bearer_auth(&access_jwt) 247 .query(&[("includeUsed", "false")]) 248 .send() 249 .await 250 .expect("Failed to send request"); 251 assert_eq!(res.status(), StatusCode::OK); 252 let body: Value = res.json().await.expect("Response was not valid JSON"); 253 assert!(body["codes"].is_array()); 254 for code in body["codes"].as_array().unwrap() { 255 assert!(code["available"].as_i64().unwrap() > 0); 256 } 257}