actix_web_lab/
test_request_macros.rs1#[macro_export]
26macro_rules! test_request {
27 ($method:ident $uri:expr) => {{
28 ::actix_web::test::TestRequest::default()
29 .method(::actix_web::http::Method::$method)
30 .uri($uri)
31 }};
32
33 ($method:ident $uri:expr; $($hdr_name:expr => $hdr_val:expr)+) => {{
34 test_request!($method $uri)
35 $(
36 .insert_header(($hdr_name, $hdr_val))
37 )+
38 }};
39
40 ($method:ident $uri:expr; $($hdr_name:expr => $hdr_val:expr)+; @json $payload:tt) => {{
41 test_request!($method $uri; $($hdr_name => $hdr_val)+)
42 .set_json($crate::__reexports::serde_json::json!($payload))
43 }};
44
45 ($method:ident $uri:expr; $($hdr_name:expr => $hdr_val:expr)+; @raw $payload:expr) => {{
46 test_request!($method $uri; $($hdr_name => $hdr_val)+)
47 .set_payload($payload)
48 }};
49}
50
51pub use test_request;
52
53#[cfg(test)]
54mod tests {
55 use actix_web::test::TestRequest;
56
57 #[test]
58 fn request_builder() {
59 let _req: TestRequest = test_request! {
60 POST "/";
61 "Origin" => "example.com"
62 "Access-Control-Request-Method" => "POST"
63 "Access-Control-Request-Headers" => "Content-Type, X-CSRF-TOKEN";
64 @json { "abc": "123" }
65 };
66
67 let _req: TestRequest = test_request! {
68 POST "/";
69 "Content-Type" => "application/json"
70 "Origin" => "example.com"
71 "Access-Control-Request-Method" => "POST"
72 "Access-Control-Request-Headers" => "Content-Type, X-CSRF-TOKEN";
73 @raw r#"{"abc": "123"}"#
74 };
75 }
76}