this repo has no description
1mod common; 2mod helpers; 3use common::*; 4use helpers::*; 5use reqwest::StatusCode; 6use serde_json::{Value, json}; 7 8#[tokio::test] 9async fn test_change_password_success() { 10 let client = client(); 11 let ts = chrono::Utc::now().timestamp_millis(); 12 let handle = format!("change-pw-{}.test", ts); 13 let email = format!("change-pw-{}@test.com", ts); 14 let old_password = "old-password-123"; 15 let new_password = "new-password-456"; 16 let create_payload = json!({ 17 "handle": handle, 18 "email": email, 19 "password": old_password 20 }); 21 let create_res = client 22 .post(format!( 23 "{}/xrpc/com.atproto.server.createAccount", 24 base_url().await 25 )) 26 .json(&create_payload) 27 .send() 28 .await 29 .expect("Failed to create account"); 30 assert_eq!(create_res.status(), StatusCode::OK); 31 let create_body: Value = create_res.json().await.unwrap(); 32 let did = create_body["did"].as_str().unwrap(); 33 let jwt = verify_new_account(&client, did).await; 34 let change_res = client 35 .post(format!( 36 "{}/xrpc/com.bspds.account.changePassword", 37 base_url().await 38 )) 39 .bearer_auth(&jwt) 40 .json(&json!({ 41 "currentPassword": old_password, 42 "newPassword": new_password 43 })) 44 .send() 45 .await 46 .expect("Failed to change password"); 47 assert_eq!(change_res.status(), StatusCode::OK); 48 let login_old = client 49 .post(format!( 50 "{}/xrpc/com.atproto.server.createSession", 51 base_url().await 52 )) 53 .json(&json!({ 54 "identifier": handle, 55 "password": old_password 56 })) 57 .send() 58 .await 59 .expect("Failed to try old password"); 60 assert_eq!(login_old.status(), StatusCode::UNAUTHORIZED, "Old password should not work"); 61 let login_new = client 62 .post(format!( 63 "{}/xrpc/com.atproto.server.createSession", 64 base_url().await 65 )) 66 .json(&json!({ 67 "identifier": handle, 68 "password": new_password 69 })) 70 .send() 71 .await 72 .expect("Failed to try new password"); 73 assert_eq!(login_new.status(), StatusCode::OK, "New password should work"); 74} 75 76#[tokio::test] 77async fn test_change_password_wrong_current() { 78 let client = client(); 79 let (_, jwt) = setup_new_user("change-pw-wrong").await; 80 let res = client 81 .post(format!( 82 "{}/xrpc/com.bspds.account.changePassword", 83 base_url().await 84 )) 85 .bearer_auth(&jwt) 86 .json(&json!({ 87 "currentPassword": "wrong-password", 88 "newPassword": "new-password-123" 89 })) 90 .send() 91 .await 92 .expect("Failed to send request"); 93 assert_eq!(res.status(), StatusCode::UNAUTHORIZED); 94 let body: Value = res.json().await.unwrap(); 95 assert_eq!(body["error"].as_str(), Some("InvalidPassword")); 96} 97 98#[tokio::test] 99async fn test_change_password_too_short() { 100 let client = client(); 101 let ts = chrono::Utc::now().timestamp_millis(); 102 let handle = format!("change-pw-short-{}.test", ts); 103 let email = format!("change-pw-short-{}@test.com", ts); 104 let password = "correct-password"; 105 let create_payload = json!({ 106 "handle": handle, 107 "email": email, 108 "password": password 109 }); 110 let create_res = client 111 .post(format!( 112 "{}/xrpc/com.atproto.server.createAccount", 113 base_url().await 114 )) 115 .json(&create_payload) 116 .send() 117 .await 118 .expect("Failed to create account"); 119 assert_eq!(create_res.status(), StatusCode::OK); 120 let create_body: Value = create_res.json().await.unwrap(); 121 let did = create_body["did"].as_str().unwrap(); 122 let jwt = verify_new_account(&client, did).await; 123 let res = client 124 .post(format!( 125 "{}/xrpc/com.bspds.account.changePassword", 126 base_url().await 127 )) 128 .bearer_auth(&jwt) 129 .json(&json!({ 130 "currentPassword": password, 131 "newPassword": "short" 132 })) 133 .send() 134 .await 135 .expect("Failed to send request"); 136 assert_eq!(res.status(), StatusCode::BAD_REQUEST); 137 let body: Value = res.json().await.unwrap(); 138 assert!(body["message"].as_str().unwrap().contains("8 characters")); 139} 140 141#[tokio::test] 142async fn test_change_password_empty_current() { 143 let client = client(); 144 let (_, jwt) = setup_new_user("change-pw-empty").await; 145 let res = client 146 .post(format!( 147 "{}/xrpc/com.bspds.account.changePassword", 148 base_url().await 149 )) 150 .bearer_auth(&jwt) 151 .json(&json!({ 152 "currentPassword": "", 153 "newPassword": "new-password-123" 154 })) 155 .send() 156 .await 157 .expect("Failed to send request"); 158 assert_eq!(res.status(), StatusCode::BAD_REQUEST); 159} 160 161#[tokio::test] 162async fn test_change_password_empty_new() { 163 let client = client(); 164 let (_, jwt) = setup_new_user("change-pw-emptynew").await; 165 let res = client 166 .post(format!( 167 "{}/xrpc/com.bspds.account.changePassword", 168 base_url().await 169 )) 170 .bearer_auth(&jwt) 171 .json(&json!({ 172 "currentPassword": "e2e-password-123", 173 "newPassword": "" 174 })) 175 .send() 176 .await 177 .expect("Failed to send request"); 178 assert_eq!(res.status(), StatusCode::BAD_REQUEST); 179} 180 181#[tokio::test] 182async fn test_change_password_requires_auth() { 183 let client = client(); 184 let res = client 185 .post(format!( 186 "{}/xrpc/com.bspds.account.changePassword", 187 base_url().await 188 )) 189 .json(&json!({ 190 "currentPassword": "old", 191 "newPassword": "new-password-123" 192 })) 193 .send() 194 .await 195 .expect("Failed to send request"); 196 assert_eq!(res.status(), StatusCode::UNAUTHORIZED); 197}