tests/server_behavior_test.rs
Ref: Size: 5.1 KiB
mod common;
use common::ServerHarness;
#[test]
fn issue_created_locally_and_pushed_renders_in_server_ui() {
let harness = ServerHarness::new("behavior-issues");
harness.push_head();
let issue_id = harness.work_repo().issue_open("My first bug");
harness.push_collab_refs();
let list_page = harness.get_ok(&format!("/{}/issues", harness.repo_name()));
assert!(list_page.body.contains("My first bug"));
assert!(list_page.body.contains("open"));
let detail_page = harness.get_ok(&format!("/{}/issues/{}", harness.repo_name(), issue_id));
assert!(detail_page.body.contains("My first bug"));
assert!(detail_page.body.contains("Alice"));
assert!(detail_page.body.contains("open"));
}
#[test]
fn pushed_repository_content_renders_across_repo_http_pages() {
let harness = ServerHarness::new("behavior-pages");
let commit_oid = harness.work_repo().commit_file(
"src/lib.rs",
"pub fn answer() -> u32 {\n 42\n}\n",
"add source file",
);
let issue_id = harness.work_repo().issue_open("Server issue");
let patch_id = harness.work_repo().patch_create("Server patch");
harness.push_head();
harness.push_collab_refs();
let repo_list = harness.get_ok("/");
assert!(repo_list.body.contains(harness.repo_name()));
let overview = harness.get_ok(&format!("/{}", harness.repo_name()));
assert!(overview.body.contains("Server issue"));
assert!(overview.body.contains("Server patch"));
assert!(overview.body.contains("add source file"));
let commits = harness.get_ok(&format!("/{}/commits", harness.repo_name()));
assert!(commits.body.contains("add source file"));
assert!(commits.body.contains("main"));
let diff = harness.get_ok(&format!("/{}/diff/{}", harness.repo_name(), commit_oid));
assert!(diff.body.contains("add source file"));
assert!(diff.body.contains("src/lib.rs"));
assert!(diff.body.contains("answer"));
let tree = harness.get_ok(&format!("/{}/tree", harness.repo_name()));
assert!(tree.body.contains("src/"));
let blob = harness.get_ok(&format!("/{}/blob/main/src/lib.rs", harness.repo_name()));
assert!(blob.body.contains("src/lib.rs"));
assert!(blob.body.contains("answer"));
let patches = harness.get_ok(&format!("/{}/patches", harness.repo_name()));
assert!(patches.body.contains("Server patch"));
assert!(patches.body.contains("open"));
let patch_detail = harness.get_ok(&format!("/{}/patches/{}", harness.repo_name(), patch_id));
assert!(patch_detail.body.contains("Server patch"));
assert!(patch_detail.body.contains("Alice"));
assert!(patch_detail.body.contains("main"));
let issues = harness.get_ok(&format!("/{}/issues", harness.repo_name()));
assert!(issues.body.contains("Server issue"));
assert!(issues.body.contains("open"));
let issue_detail = harness.get_ok(&format!("/{}/issues/{}", harness.repo_name(), issue_id));
assert!(issue_detail.body.contains("Server issue"));
assert!(issue_detail.body.contains("Alice"));
assert!(issue_detail.body.contains("open"));
}
#[test]
fn missing_repository_and_missing_objects_return_not_found() {
let harness = ServerHarness::new("behavior-not-found");
harness.push_head();
let missing_repo = harness.get("/missing-repo");
assert!(missing_repo.status_line.contains("404"));
assert!(missing_repo.body.contains("missing-repo"));
assert!(missing_repo.body.contains("not found"));
let missing_issue = harness.get(&format!("/{}/issues/missing-issue", harness.repo_name()));
assert!(missing_issue.status_line.contains("404"));
assert!(missing_issue.body.contains("missing-issue"));
assert!(missing_issue.body.contains("not found"));
let missing_blob = harness.get(&format!("/{}/blob/main/src/missing.rs", harness.repo_name()));
assert!(missing_blob.status_line.contains("404"));
assert!(missing_blob.body.contains("src/missing.rs"));
assert!(missing_blob.body.contains("not found"));
}
#[test]
fn readme_md_renders_on_repo_overview_page() {
let harness = ServerHarness::new("behavior-readme");
harness.work_repo().commit_file(
"README.md",
"# Hello World\n\nA short description with a [link](https://example.com).\n",
"add README",
);
harness.push_head();
let overview = harness.get_ok(&format!("/{}", harness.repo_name()));
assert!(overview.body.contains("<h1>Hello World</h1>"), "missing h1: {}", overview.body);
assert!(overview.body.contains("href=\"https://example.com\""));
// Sanity: the new card wrapper exists.
assert!(overview.body.contains("class=\"readme-body\""));
}
#[test]
fn missing_readme_does_not_break_overview_page() {
let harness = ServerHarness::new("behavior-no-readme");
harness.work_repo().commit_file(
"src/lib.rs",
"pub fn x() {}\n",
"add lib",
);
harness.push_head();
let overview = harness.get_ok(&format!("/{}", harness.repo_name()));
assert!(!overview.body.contains("class=\"readme-body\""));
// The rest of the page still renders.
assert!(overview.body.contains("Open Patches") || overview.body.contains("Recent Commits"));
}