Skip to main content

quorum_public/tests/functional/
auth_tests.rs

1use crate::startup;
2use crate::tests::TestResult;
3use crate::tests::common::{cleanup_user, create_test_user, get_test_username, make_auth_request};
4use serde_json::json;
5
6pub async fn test_signup_email() -> Result<TestResult, String> {
7    let (_, _, _, timings) = create_test_user("TestPassword123!", true, true).await?;
8    Ok(TestResult {
9        endpoint_time: timings.signup,
10    })
11}
12
13pub async fn test_signup_username() -> Result<TestResult, String> {
14    let (_, _, _, timings) = create_test_user("TestPassword123!", false, true).await?;
15    Ok(TestResult {
16        endpoint_time: timings.signup,
17    })
18}
19
20pub async fn test_login_email() -> Result<TestResult, String> {
21    let (_, _, _, timings) = create_test_user("TestPassword123!", true, true).await?;
22    Ok(TestResult {
23        endpoint_time: timings.login,
24    })
25}
26
27pub async fn test_login_username() -> Result<TestResult, String> {
28    let (_, _, _, timings) = create_test_user("TestPassword123!", false, true).await?;
29    Ok(TestResult {
30        endpoint_time: timings.login,
31    })
32}
33
34pub async fn test_delete_user_account_email() -> Result<TestResult, String> {
35    let (username, password, user_id, _) =
36        create_test_user("TestPassword123!", true, false).await?;
37
38    make_auth_request(
39        "/auth/me",
40        &json!({
41            "username_or_email": username,
42            "password": password,
43            "user_id": user_id,
44            "fields": ["id"]
45        }),
46        200,
47    )
48    .await?;
49
50    let timer = startup::create_timer();
51    make_auth_request(
52        "/auth/delete",
53        &json!({
54            "username_or_email": username,
55            "password": password,
56            "user_id": user_id
57        }),
58        200,
59    )
60    .await?;
61    let endpoint_time = timer.elapsed();
62
63    Ok(TestResult { endpoint_time })
64}
65
66pub async fn test_delete_user_account_username() -> Result<TestResult, String> {
67    let (username, password, user_id, _) =
68        create_test_user("TestPassword123!", false, false).await?;
69
70    let timer = startup::create_timer();
71    make_auth_request(
72        "/auth/delete",
73        &json!({
74            "username_or_email": username,
75            "password": password,
76            "user_id": user_id
77        }),
78        200,
79    )
80    .await?;
81    let endpoint_time = timer.elapsed();
82
83    Ok(TestResult { endpoint_time })
84}
85
86pub async fn test_refresh_token() -> Result<TestResult, String> {
87    let (username, password, user_id, _) =
88        create_test_user("TestPassword123!", false, false).await?;
89
90    let login_body = make_auth_request(
91        "/auth/login",
92        &json!({
93            "username_or_email": username,
94            "password": password
95        }),
96        200,
97    )
98    .await?;
99
100    let refresh_token = login_body["tokens"]["refresh_token"]
101        .as_str()
102        .ok_or("Failed to get refresh token")?
103        .to_string();
104
105    let timer = startup::create_timer();
106    let refresh_body = make_auth_request(
107        "/auth/refresh",
108        &json!({
109            "refresh_token": refresh_token,
110            "user_id": user_id
111        }),
112        200,
113    )
114    .await?;
115    let endpoint_time = timer.elapsed();
116
117    if refresh_body["tokens"]["access_token"].as_str().is_none() {
118        return Err("Failed to get new access token".to_string());
119    }
120
121    let _ = cleanup_user(&username, &password, &user_id).await;
122    Ok(TestResult { endpoint_time })
123}
124
125pub async fn test_logout() -> Result<TestResult, String> {
126    let (username, password, user_id, _) =
127        create_test_user("TestPassword123!", false, false).await?;
128
129    let login_body = make_auth_request(
130        "/auth/login",
131        &json!({
132            "username_or_email": username,
133            "password": password
134        }),
135        200,
136    )
137    .await?;
138
139    let refresh_token = login_body["tokens"]["refresh_token"]
140        .as_str()
141        .ok_or("Failed to get refresh token")?
142        .to_string();
143
144    let timer = startup::create_timer();
145    make_auth_request(
146        "/auth/logout",
147        &json!({
148            "refresh_token": refresh_token,
149            "user_id": user_id
150        }),
151        200,
152    )
153    .await?;
154    let endpoint_time = timer.elapsed();
155
156    let _ = cleanup_user(&username, &password, &user_id).await;
157    Ok(TestResult { endpoint_time })
158}
159
160pub async fn test_update_user_profile() -> Result<TestResult, String> {
161    let (_, password, user_id, _) = create_test_user("TestPassword123!", false, false).await?;
162
163    let new_username = get_test_username();
164
165    let timer = startup::create_timer();
166    make_auth_request(
167        "/auth/updateuserprofile",
168        &json!({
169            "user_id": user_id,
170            "username": new_username
171        }),
172        200,
173    )
174    .await?;
175    let endpoint_time = timer.elapsed();
176
177    let _ = cleanup_user(&new_username, &password, &user_id).await;
178    Ok(TestResult { endpoint_time })
179}