test(axum): close page edge-case mutants
Prove partial constructor defaults, missing multipart-boundary rejection, first-root fingerprint replacement, and unchanged non-root HTML through public and nearest-boundary paths. req: page_swap/001 req: multipart/003 req: abi/005
This commit is contained in:
@@ -1609,6 +1609,18 @@ mod tests {
|
||||
.expect("root element is rendered");
|
||||
assert_eq!(root.value().attr("data-hemx-fp"), Some("1"));
|
||||
assert_eq!(root.text().collect::<String>(), "Docs");
|
||||
assert_eq!(html.matches("data-hemx-fp=").count(), 1);
|
||||
assert!(!html.contains("data-hemx-fp=\"99\""));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn fingerprint_injection_leaves_html_without_a_hemx_root_unchanged() {
|
||||
let html = "<main>Docs</main>".to_owned();
|
||||
assert_eq!(
|
||||
html_with_root_fingerprint(html.clone(), BuildFingerprint(99)),
|
||||
html
|
||||
);
|
||||
// test req: abi/005
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -144,6 +144,19 @@ async fn interaction_boundary_skips_unnamed_parts_and_rejects_invalid_multipart(
|
||||
let _guard = BOUNDARY_TEST_LOCK
|
||||
.lock()
|
||||
.unwrap_or_else(|error| error.into_inner());
|
||||
let app = Router::new().route("/mutate", post(bounded_mutation));
|
||||
let missing_boundary = app
|
||||
.clone()
|
||||
.oneshot(
|
||||
Request::post("/mutate")
|
||||
.header(header::CONTENT_TYPE, "multipart/form-data")
|
||||
.body(Body::from("invalid"))
|
||||
.unwrap(),
|
||||
)
|
||||
.await
|
||||
.unwrap();
|
||||
assert_eq!(missing_boundary.status(), StatusCode::BAD_REQUEST);
|
||||
|
||||
let accepted = concat!(
|
||||
"--b\r\n",
|
||||
"Content-Disposition: form-data; filename=\"ignored.txt\"\r\n\r\n",
|
||||
@@ -153,7 +166,6 @@ async fn interaction_boundary_skips_unnamed_parts_and_rejects_invalid_multipart(
|
||||
"1\r\n",
|
||||
"--b--\r\n"
|
||||
);
|
||||
let app = Router::new().route("/mutate", post(bounded_mutation));
|
||||
let response = app
|
||||
.clone()
|
||||
.oneshot(
|
||||
@@ -369,6 +381,7 @@ fn page_response_constructors_preserve_mode_and_optional_fingerprint() {
|
||||
let partial = PageResponse::partial("<main>Partial</main>");
|
||||
assert_eq!(partial.mode, PageMode::Partial);
|
||||
assert_eq!(partial.html, "<main>Partial</main>");
|
||||
assert_eq!(partial.title, None);
|
||||
assert_eq!(partial.fingerprint, None);
|
||||
|
||||
let fingerprint = BuildFingerprint(42);
|
||||
|
||||
Reference in New Issue
Block a user