#[macro_export]
macro_rules! assert_status {
($conn:expr_2021, $status:expr_2021) => {{
use std::convert::TryInto;
let expected_status: $crate::prelude::Status =
$status.try_into().expect("expected a status code");
match $conn.status() {
Some(status) => assert_eq!(status, expected_status),
None => panic!("expected status code, but none was set"),
}
}};
}
#[macro_export]
macro_rules! assert_not_handled {
($conn:expr_2021) => {{
let conn = $conn;
assert_eq!(conn.status(), None);
assert!(conn.response_body().is_none());
assert!(!conn.is_halted());
}};
}
#[macro_export]
macro_rules! assert_body {
($conn:expr_2021, $body:expr_2021) => {
match $conn.take_response_body_string().unwrap_or_default() {
body => {
assert_eq!(body.trim_end(), $body.trim_end());
}
}
};
}
#[macro_export]
macro_rules! assert_body_contains {
($conn:expr_2021, $pattern:expr_2021) => {
match $conn.take_response_body_string().unwrap_or_default() {
body => {
assert!(
body.contains($pattern),
"\nexpected \n`{}`\n to contain `{}`\n but it did not",
&body,
$pattern
);
body
}
}
};
}
#[macro_export]
macro_rules! assert_response {
($conn:expr_2021, $status:expr_2021, $body:expr_2021) => {{
let mut conn = $conn;
$crate::assert_status!(conn, $status);
$crate::assert_body!(conn, $body);
}};
($conn:expr_2021, $status:expr_2021) => {
$crate::assert_status!($conn, $status);
};
($conn:expr_2021, $status:expr_2021, $body:expr_2021, $($header_name:literal => $header_value:expr_2021,)+) => {
assert_response!($conn, $status, $body, $($header_name => $header_value),+);
};
($conn:expr_2021, $status:expr_2021, $body:expr_2021, $($header_name:literal => $header_value:expr_2021),*) => {
let mut conn = $conn;
$crate::assert_response!(&mut conn, $status, $body);
$crate::assert_headers!(&conn, $($header_name => $header_value),*);
};
}
#[macro_export]
macro_rules! assert_headers {
(@pair, $conn:expr_2021, $header_name:tt, None) => {
match $conn.response_headers().get_str($header_name) {
actual => {
assert_eq!(actual, None, concat!("for header ", stringify!($header_name)));
}
};
};
(@pair, $conn:expr_2021, $header_name:tt, $header_value:expr_2021) => {
match ($conn.response_headers().get_str($header_name), $header_value) {
(actual, expected) => {
assert_eq!(actual, Some(expected), concat!("for header ", stringify!($header_name)));
}
};
};
($conn:expr_2021, $($header_name:tt => $header_value:tt,)+) => {
assert_headers!($conn, $($header_name => $header_value),+);
};
($conn:expr_2021, $($header_name:tt => $header_value:tt),*) => {
match $conn {
conn => {
$(assert_headers!(@pair, conn, $header_name, $header_value);)*
}
};
}
}
#[macro_export]
macro_rules! assert_ok {
($conn:expr_2021) => {
$crate::assert_response!($conn, 200);
};
($conn:expr_2021, $body:expr_2021) => {
$crate::assert_response!($conn, 200, $body);
};
($conn:expr_2021, $body:expr_2021, $($header_name:literal => $header_value:expr_2021,)+) => {
assert_ok!($conn, $body, $($header_name => $header_value),+);
};
($conn:expr_2021, $body:expr_2021, $($header_name:literal => $header_value:expr_2021),*) => {
$crate::assert_response!($conn, 200, $body, $($header_name => $header_value),*);
};
}