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