47 lines
1.4 KiB
Rust
47 lines
1.4 KiB
Rust
use axum::http::StatusCode;
|
|
use bzod::web::pages::root_landing;
|
|
use std::fs;
|
|
|
|
#[tokio::test]
|
|
async fn test_root_landing_page() {
|
|
// --- Test case 1: Successful serving ---
|
|
// Read expected content
|
|
let expected_content =
|
|
fs::read_to_string("www/index.html").expect("www/index.html must exist for test");
|
|
|
|
let response = root_landing().await;
|
|
|
|
assert_eq!(response.status(), StatusCode::OK);
|
|
assert!(response
|
|
.headers()
|
|
.get("content-type")
|
|
.unwrap()
|
|
.to_str()
|
|
.unwrap()
|
|
.contains("text/html"));
|
|
|
|
// Convert response body to bytes using axum::body::to_bytes
|
|
let body_bytes = axum::body::to_bytes(response.into_body(), usize::MAX)
|
|
.await
|
|
.unwrap();
|
|
let body_str = String::from_utf8(body_bytes.to_vec()).unwrap();
|
|
assert_eq!(body_str, expected_content);
|
|
|
|
// --- Test case 2: File Not Found fallback ---
|
|
// Temporarily rename www/index.html to simulate file not found
|
|
let orig_path = "www/index.html";
|
|
let temp_path = "www/index.html.tmp_test_bak";
|
|
fs::rename(orig_path, temp_path).unwrap();
|
|
|
|
let response_res = tokio::spawn(async move { root_landing().await }).await;
|
|
|
|
// Restore index.html immediately in case of panic/error
|
|
let rename_res = fs::rename(temp_path, orig_path);
|
|
|
|
// Now verify the response status
|
|
let response = response_res.unwrap();
|
|
assert_eq!(response.status(), StatusCode::NOT_FOUND);
|
|
|
|
rename_res.unwrap();
|
|
}
|