- Apply rustfmt to all Rust source files in backend/ - Fix trailing whitespace inconsistencies - Standardize formatting across handlers, models, and services - Improve code readability with consistent formatting These changes are purely stylistic and do not affect functionality. All CI checks now pass with proper formatting.
163 lines
4.5 KiB
Rust
163 lines
4.5 KiB
Rust
use reqwest::Client;
|
|
use serde_json::{json, Value};
|
|
|
|
const BASE_URL: &str = "http://127.0.0.1:8000";
|
|
|
|
#[tokio::test]
|
|
async fn test_health_check() {
|
|
let client = Client::new();
|
|
let response = client
|
|
.get(&format!("{}/health", BASE_URL))
|
|
.send()
|
|
.await
|
|
.expect("Failed to send request");
|
|
|
|
assert_eq!(response.status(), 200);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_ready_check() {
|
|
let client = Client::new();
|
|
let response = client
|
|
.get(&format!("{}/ready", BASE_URL))
|
|
.send()
|
|
.await
|
|
.expect("Failed to send request");
|
|
|
|
assert_eq!(response.status(), 200);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_register_user() {
|
|
let client = Client::new();
|
|
let email = format!("test_{}@example.com", uuid::Uuid::new_v4());
|
|
|
|
let payload = json!({
|
|
"email": email,
|
|
"password_hash": "hashed_password_placeholder",
|
|
"encrypted_recovery_phrase": "encrypted_phrase_placeholder",
|
|
"recovery_phrase_iv": "iv_placeholder",
|
|
"recovery_phrase_auth_tag": "auth_tag_placeholder"
|
|
});
|
|
|
|
let response = client
|
|
.post(&format!("{}/api/auth/register", BASE_URL))
|
|
.json(&payload)
|
|
.send()
|
|
.await
|
|
.expect("Failed to send request");
|
|
|
|
assert_eq!(response.status(), 200);
|
|
|
|
let json: Value = response.json().await.expect("Failed to parse JSON");
|
|
assert_eq!(json["email"], email);
|
|
assert!(json["user_id"].is_string());
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_login() {
|
|
let client = Client::new();
|
|
let email = format!("test_{}@example.com", uuid::Uuid::new_v4());
|
|
|
|
// First register a user
|
|
let register_payload = json!({
|
|
"email": email,
|
|
"password_hash": "hashed_password_placeholder",
|
|
"encrypted_recovery_phrase": "encrypted_phrase_placeholder",
|
|
"recovery_phrase_iv": "iv_placeholder",
|
|
"recovery_phrase_auth_tag": "auth_tag_placeholder"
|
|
});
|
|
|
|
let _reg_response = client
|
|
.post(&format!("{}/api/auth/register", BASE_URL))
|
|
.json(®ister_payload)
|
|
.send()
|
|
.await
|
|
.expect("Failed to send request");
|
|
|
|
// Now login
|
|
let login_payload = json!({
|
|
"email": email,
|
|
"password_hash": "hashed_password_placeholder"
|
|
});
|
|
|
|
let response = client
|
|
.post(&format!("{}/api/auth/login", BASE_URL))
|
|
.json(&login_payload)
|
|
.send()
|
|
.await
|
|
.expect("Failed to send request");
|
|
|
|
assert_eq!(response.status(), 200);
|
|
|
|
let json: Value = response.json().await.expect("Failed to parse JSON");
|
|
assert!(json["access_token"].is_string());
|
|
assert!(json["refresh_token"].is_string());
|
|
assert_eq!(json["email"], email);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_get_profile_without_auth() {
|
|
let client = Client::new();
|
|
|
|
let response = client
|
|
.get(&format!("{}/api/users/me", BASE_URL))
|
|
.send()
|
|
.await
|
|
.expect("Failed to send request");
|
|
|
|
// Should return 401 Unauthorized without auth token
|
|
assert_eq!(response.status(), 401);
|
|
}
|
|
|
|
#[tokio::test]
|
|
async fn test_get_profile_with_auth() {
|
|
let client = Client::new();
|
|
let email = format!("test_{}@example.com", uuid::Uuid::new_v4());
|
|
|
|
// Register and login
|
|
let register_payload = json!({
|
|
"email": email,
|
|
"password_hash": "hashed_password_placeholder",
|
|
"encrypted_recovery_phrase": "encrypted_phrase_placeholder",
|
|
"recovery_phrase_iv": "iv_placeholder",
|
|
"recovery_phrase_auth_tag": "auth_tag_placeholder"
|
|
});
|
|
|
|
client
|
|
.post(&format!("{}/api/auth/register", BASE_URL))
|
|
.json(®ister_payload)
|
|
.send()
|
|
.await
|
|
.expect("Failed to send request");
|
|
|
|
let login_payload = json!({
|
|
"email": email,
|
|
"password_hash": "hashed_password_placeholder"
|
|
});
|
|
|
|
let login_response = client
|
|
.post(&format!("{}/api/auth/login", BASE_URL))
|
|
.json(&login_payload)
|
|
.send()
|
|
.await
|
|
.expect("Failed to send request");
|
|
|
|
let login_json: Value = login_response.json().await.expect("Failed to parse JSON");
|
|
let access_token = login_json["access_token"]
|
|
.as_str()
|
|
.expect("No access token");
|
|
|
|
// Get profile with auth token
|
|
let response = client
|
|
.get(&format!("{}/api/users/me", BASE_URL))
|
|
.header("Authorization", format!("Bearer {}", access_token))
|
|
.send()
|
|
.await
|
|
.expect("Failed to send request");
|
|
|
|
assert_eq!(response.status(), 200);
|
|
|
|
let json: Value = response.json().await.expect("Failed to parse JSON");
|
|
assert_eq!(json["email"], email);
|
|
}
|