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 use super::*;
58
59 #[test]
60 fn request_builder() {
61 let _req: TestRequest = test_request! {
62 POST "/";
63 "Origin" => "example.com"
64 "Access-Control-Request-Method" => "POST"
65 "Access-Control-Request-Headers" => "Content-Type, X-CSRF-TOKEN";
66 @json { "abc": "123" }
67 };
68
69 let _req: TestRequest = test_request! {
70 POST "/";
71 "Content-Type" => "application/json"
72 "Origin" => "example.com"
73 "Access-Control-Request-Method" => "POST"
74 "Access-Control-Request-Headers" => "Content-Type, X-CSRF-TOKEN";
75 @raw r#"{"abc": "123"}"#
76 };
77 }
78}