141 lines
3.5 KiB
Rust
141 lines
3.5 KiB
Rust
use gitea_pr_review::gitea::client::GiteaClient;
|
|
use mockito::Server;
|
|
|
|
#[test]
|
|
fn fetch_bundle_hits_required_endpoints_and_aggregates_review_comments() {
|
|
let mut server = Server::new();
|
|
|
|
let _pull = server
|
|
.mock("GET", "/api/v1/repos/org/repo/pulls/42")
|
|
.match_header("authorization", "token secret")
|
|
.with_status(200)
|
|
.with_body(
|
|
r#"{
|
|
"number": 42,
|
|
"title": "Fix parser",
|
|
"state": "open",
|
|
"body": "desc",
|
|
"user": {"login": "alice"},
|
|
"base": {"ref": "main"},
|
|
"head": {"ref": "feature/x"},
|
|
"created_at": "2026-04-08T10:00:00Z",
|
|
"updated_at": "2026-04-08T11:00:00Z",
|
|
"merged_at": null,
|
|
"additions": 12,
|
|
"deletions": 3,
|
|
"changed_files": 2
|
|
}"#,
|
|
)
|
|
.create();
|
|
|
|
let _reviews = server
|
|
.mock("GET", "/api/v1/repos/org/repo/pulls/42/reviews")
|
|
.match_header("authorization", "token secret")
|
|
.with_status(200)
|
|
.with_body(
|
|
r#"[
|
|
{
|
|
"id": 7,
|
|
"state": "COMMENT",
|
|
"user": {"login": "bob"},
|
|
"submitted_at": "2026-04-08T12:00:00Z"
|
|
},
|
|
{
|
|
"id": 8,
|
|
"state": "APPROVED",
|
|
"user": {"login": "carol"},
|
|
"submitted_at": "2026-04-08T13:00:00Z"
|
|
}
|
|
]"#,
|
|
)
|
|
.create();
|
|
|
|
let _review_7_comments = server
|
|
.mock("GET", "/api/v1/repos/org/repo/pulls/42/reviews/7/comments")
|
|
.match_header("authorization", "token secret")
|
|
.with_status(200)
|
|
.with_body(
|
|
r#"[
|
|
{
|
|
"id": 71,
|
|
"body": "first comment",
|
|
"created_at": "2026-04-08T12:01:00Z",
|
|
"updated_at": "2026-04-08T12:02:00Z",
|
|
"user": {"login": "bob"},
|
|
"path": "src/main.rs",
|
|
"line": 10,
|
|
"pull_request_review_id": 7,
|
|
"original_position": 10,
|
|
"position": 10,
|
|
"commit_id": "abc123",
|
|
"original_commit_id": "abc123",
|
|
"diff_hunk": "@@ -1 +1 @@"
|
|
}
|
|
]"#,
|
|
)
|
|
.create();
|
|
|
|
let _review_8_comments = server
|
|
.mock("GET", "/api/v1/repos/org/repo/pulls/42/reviews/8/comments")
|
|
.match_header("authorization", "token secret")
|
|
.with_status(200)
|
|
.with_body("[]")
|
|
.create();
|
|
|
|
let _commits = server
|
|
.mock("GET", "/api/v1/repos/org/repo/pulls/42/commits")
|
|
.match_header("authorization", "token secret")
|
|
.with_status(200)
|
|
.with_body(
|
|
r#"[
|
|
{
|
|
"sha": "abcdef1234567890",
|
|
"commit": {
|
|
"message": "feat: parser\n\nbody",
|
|
"author": {
|
|
"name": "Alice",
|
|
"date": "2026-04-08T10:10:00Z"
|
|
}
|
|
}
|
|
}
|
|
]"#,
|
|
)
|
|
.create();
|
|
|
|
let _files = server
|
|
.mock("GET", "/api/v1/repos/org/repo/pulls/42/files")
|
|
.match_header("authorization", "token secret")
|
|
.with_status(200)
|
|
.with_body(
|
|
r#"[
|
|
{
|
|
"filename": "src/main.rs",
|
|
"additions": 12,
|
|
"deletions": 3,
|
|
"changes": 15,
|
|
"status": "modified",
|
|
"previous_filename": null
|
|
}
|
|
]"#,
|
|
)
|
|
.create();
|
|
|
|
let client = GiteaClient::new(server.url(), "secret".to_string());
|
|
let bundle = client.fetch_pr_bundle("org/repo", 42).unwrap();
|
|
|
|
assert_eq!(bundle.pull.number, 42);
|
|
assert_eq!(bundle.pull.title, "Fix parser");
|
|
assert_eq!(bundle.reviews.len(), 2);
|
|
assert_eq!(bundle.comments.len(), 1);
|
|
assert_eq!(bundle.comments[0].pull_request_review_id, Some(7));
|
|
assert_eq!(bundle.commits.len(), 1);
|
|
assert_eq!(bundle.files.len(), 1);
|
|
|
|
_pull.assert();
|
|
_reviews.assert();
|
|
_review_7_comments.assert();
|
|
_review_8_comments.assert();
|
|
_commits.assert();
|
|
_files.assert();
|
|
}
|