diff --git a/markbase-core/src/webdav.rs b/markbase-core/src/webdav.rs index 28927ec..d12f340 100644 --- a/markbase-core/src/webdav.rs +++ b/markbase-core/src/webdav.rs @@ -1522,4 +1522,28 @@ mod integration_tests { assert!(xml.contains("D:acl"), "PROPFIND response should contain D:acl element"); assert!(xml.contains("D:all"), "ACL should grant all privileges to all principals"); } + + #[tokio::test] + async fn test_range_request() { + let tmp = TempDir::new().unwrap(); + std::fs::write(tmp.path().join("range_test.txt"), "0123456789abcdefghij").unwrap(); + let handler = make_handler(&tmp); + + // Range request: bytes=5-10 + let req = http::Request::builder() + .method(Method::GET) + .uri("/range_test.txt") + .header("Range", "bytes=5-10") + .body(ReqBody::from("")) + .unwrap(); + let res = handler.handle(req).await; + assert_eq!(res.status(), StatusCode::PARTIAL_CONTENT, "Range request should return 206"); + assert!( + res.headers().contains_key("Content-Range"), + "Range response should include Content-Range header" + ); + let (_, body) = collect_body(res).await; + let content = String::from_utf8(body).unwrap(); + assert_eq!(content, "56789a", "Range bytes=5-10 should return '56789a' (6 bytes)"); + } }