this repo has no description
1mod common;
2use common::*;
3
4use reqwest::StatusCode;
5use serde_json::json;
6
7#[tokio::test]
8async fn test_import_repo_requires_auth() {
9 let client = client();
10
11 let res = client
12 .post(format!("{}/xrpc/com.atproto.repo.importRepo", base_url().await))
13 .header("Content-Type", "application/vnd.ipld.car")
14 .body(vec![0u8; 100])
15 .send()
16 .await
17 .expect("Request failed");
18
19 assert_eq!(res.status(), StatusCode::UNAUTHORIZED);
20}
21
22#[tokio::test]
23async fn test_import_repo_invalid_car() {
24 let client = client();
25 let (token, _did) = create_account_and_login(&client).await;
26
27 let res = client
28 .post(format!("{}/xrpc/com.atproto.repo.importRepo", base_url().await))
29 .bearer_auth(&token)
30 .header("Content-Type", "application/vnd.ipld.car")
31 .body(vec![0u8; 100])
32 .send()
33 .await
34 .expect("Request failed");
35
36 assert_eq!(res.status(), StatusCode::BAD_REQUEST);
37 let body: serde_json::Value = res.json().await.unwrap();
38 assert_eq!(body["error"], "InvalidRequest");
39}
40
41#[tokio::test]
42async fn test_import_repo_empty_body() {
43 let client = client();
44 let (token, _did) = create_account_and_login(&client).await;
45
46 let res = client
47 .post(format!("{}/xrpc/com.atproto.repo.importRepo", base_url().await))
48 .bearer_auth(&token)
49 .header("Content-Type", "application/vnd.ipld.car")
50 .body(vec![])
51 .send()
52 .await
53 .expect("Request failed");
54
55 assert_eq!(res.status(), StatusCode::BAD_REQUEST);
56}
57
58#[tokio::test]
59async fn test_import_repo_with_exported_repo() {
60 let client = client();
61 let (token, did) = create_account_and_login(&client).await;
62
63 let post_payload = json!({
64 "repo": did,
65 "collection": "app.bsky.feed.post",
66 "record": {
67 "$type": "app.bsky.feed.post",
68 "text": "Test post for import",
69 "createdAt": chrono::Utc::now().to_rfc3339(),
70 }
71 });
72
73 let create_res = client
74 .post(format!(
75 "{}/xrpc/com.atproto.repo.createRecord",
76 base_url().await
77 ))
78 .bearer_auth(&token)
79 .json(&post_payload)
80 .send()
81 .await
82 .expect("Failed to create post");
83 assert_eq!(create_res.status(), StatusCode::OK);
84
85 let export_res = client
86 .get(format!(
87 "{}/xrpc/com.atproto.sync.getRepo?did={}",
88 base_url().await,
89 did
90 ))
91 .send()
92 .await
93 .expect("Failed to export repo");
94 assert_eq!(export_res.status(), StatusCode::OK);
95
96 let car_bytes = export_res.bytes().await.expect("Failed to get CAR bytes");
97
98 let import_res = client
99 .post(format!("{}/xrpc/com.atproto.repo.importRepo", base_url().await))
100 .bearer_auth(&token)
101 .header("Content-Type", "application/vnd.ipld.car")
102 .body(car_bytes.to_vec())
103 .send()
104 .await
105 .expect("Failed to import repo");
106
107 assert_eq!(import_res.status(), StatusCode::OK);
108}
109