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