1 use super::*;
2 use http::Method;
3 use tower::ServiceExt;
4 
5 mod for_handlers {
6     use super::*;
7     use http::HeaderMap;
8 
9     #[crate::test]
get_handles_head()10     async fn get_handles_head() {
11         let app = Router::new().route(
12             "/",
13             get(|| async {
14                 let mut headers = HeaderMap::new();
15                 headers.insert("x-some-header", "foobar".parse().unwrap());
16                 (headers, "you shouldn't see this")
17             }),
18         );
19 
20         // don't use reqwest because it always strips bodies from HEAD responses
21         let res = app
22             .oneshot(
23                 Request::builder()
24                     .uri("/")
25                     .method(Method::HEAD)
26                     .body(Body::empty())
27                     .unwrap(),
28             )
29             .await
30             .unwrap();
31 
32         assert_eq!(res.status(), StatusCode::OK);
33         assert_eq!(res.headers()["x-some-header"], "foobar");
34 
35         let body = hyper::body::to_bytes(res.into_body()).await.unwrap();
36         assert_eq!(body.len(), 0);
37     }
38 }
39 
40 mod for_services {
41     use super::*;
42     use crate::routing::get_service;
43 
44     #[crate::test]
get_handles_head()45     async fn get_handles_head() {
46         let app = Router::new().route(
47             "/",
48             get_service(service_fn(|_req: Request<Body>| async move {
49                 Ok::<_, Infallible>(
50                     ([("x-some-header", "foobar")], "you shouldn't see this").into_response(),
51                 )
52             })),
53         );
54 
55         // don't use reqwest because it always strips bodies from HEAD responses
56         let res = app
57             .oneshot(
58                 Request::builder()
59                     .uri("/")
60                     .method(Method::HEAD)
61                     .body(Body::empty())
62                     .unwrap(),
63             )
64             .await
65             .unwrap();
66 
67         assert_eq!(res.status(), StatusCode::OK);
68         assert_eq!(res.headers()["x-some-header"], "foobar");
69 
70         let body = hyper::body::to_bytes(res.into_body()).await.unwrap();
71         assert_eq!(body.len(), 0);
72     }
73 }
74