1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
/// Create a `TestRequest` using a DSL that looks kinda like on-the-wire HTTP/1.x requests.
///
/// # Examples
/// ```
/// use actix_web::test::TestRequest;
/// use actix_web_lab::test_request;
///
/// let _req: TestRequest = test_request! {
/// POST "/";
/// "Origin" => "example.com"
/// "Access-Control-Request-Method" => "POST"
/// "Access-Control-Request-Headers" => "Content-Type, X-CSRF-TOKEN";
/// @json {"abc": "123"}
/// };
///
/// let _req: TestRequest = test_request! {
/// POST "/";
/// "Content-Type" => "application/json"
/// "Origin" => "example.com"
/// "Access-Control-Request-Method" => "POST"
/// "Access-Control-Request-Headers" => "Content-Type, X-CSRF-TOKEN";
/// @raw r#"{"abc": "123"}"#
/// };
/// ```
#[macro_export]
macro_rules! test_request {
($method:ident $uri:expr) => {{
::actix_web::test::TestRequest::default()
.method(::actix_web::http::Method::$method)
.uri($uri)
}};
($method:ident $uri:expr; $($hdr_name:expr => $hdr_val:expr)+) => {{
test_request!($method $uri)
$(
.insert_header(($hdr_name, $hdr_val))
)+
}};
($method:ident $uri:expr; $($hdr_name:expr => $hdr_val:expr)+; @json $payload:tt) => {{
test_request!($method $uri; $($hdr_name => $hdr_val)+)
.set_json($crate::__reexports::serde_json::json!($payload))
}};
($method:ident $uri:expr; $($hdr_name:expr => $hdr_val:expr)+; @raw $payload:expr) => {{
test_request!($method $uri; $($hdr_name => $hdr_val)+)
.set_payload($payload)
}};
}
pub use test_request;
#[cfg(test)]
mod tests {
use actix_web::test::TestRequest;
use super::*;
#[test]
fn request_builder() {
let _req: TestRequest = test_request! {
POST "/";
"Origin" => "example.com"
"Access-Control-Request-Method" => "POST"
"Access-Control-Request-Headers" => "Content-Type, X-CSRF-TOKEN";
@json { "abc": "123" }
};
let _req: TestRequest = test_request! {
POST "/";
"Content-Type" => "application/json"
"Origin" => "example.com"
"Access-Control-Request-Method" => "POST"
"Access-Control-Request-Headers" => "Content-Type, X-CSRF-TOKEN";
@raw r#"{"abc": "123"}"#
};
}
}