#[tokio::test] asyncfn json_rejects_bad_content_type() { let _ = pretty_env_logger::try_init();
let json = warp::body::json::<Vec<i32>>().map(|_| warp::reply());
let req = warp::test::request()
.header("content-type", "text/xml")
.body("[3, 2, 1]");
let res = req.reply(&json).await;
assert_eq!(
res.status(), 415, "bad content-type should be 415 Unsupported Media Type"
);
}
#[tokio::test] asyncfn json_invalid() { let _ = pretty_env_logger::try_init();
let json = warp::body::json::<Vec<i32>>().map(|vec| warp::reply::json(&vec));
let res = warp::test::request().body("lol#wat").reply(&json).await;
assert_eq!(res.status(), 400); let prefix = b"Request body deserialize error: ";
assert_eq!(&res.body()[..prefix.len()], prefix);
}
#[tokio::test] asyncfn form() { let _ = pretty_env_logger::try_init();
let form = warp::body::form::<Vec<(String, String)>>();
let req = warp::test::request().body("foo=bar&baz=quux");
let vec = req.filter(&form).await.unwrap(); let expected = vec![
("foo".to_owned(), "bar".to_owned()),
("baz".to_owned(), "quux".to_owned()),
];
assert_eq!(vec, expected);
}
#[tokio::test] asyncfn form_rejects_bad_content_type() { let _ = pretty_env_logger::try_init();
let form = warp::body::form::<Vec<(String, String)>>().map(|_| warp::reply());
let req = warp::test::request()
.header("content-type", "application/x-www-form-urlencoded")
.body("foo=bar");
let res = req.reply(&form).await;
assert_eq!(res.status(), 200);
let req = warp::test::request()
.header("content-type", "text/xml")
.body("foo=bar"); let res = req.reply(&form).await;
assert_eq!(
res.status(), 415, "bad content-type should be 415 Unsupported Media Type"
);
}
#[tokio::test] asyncfn form_allows_charset() { let _ = pretty_env_logger::try_init();
let form = warp::body::form::<Vec<(String, String)>>();
let req = warp::test::request()
.header( "content-type", "application/x-www-form-urlencoded; charset=utf-8",
)
.body("foo=bar");
let vec = req.filter(&form).await.unwrap(); let expected = vec![("foo".to_owned(), "bar".to_owned())];
assert_eq!(vec, expected);
}
#[tokio::test] asyncfn form_invalid() { let _ = pretty_env_logger::try_init();
let form = warp::body::form::<Vec<i32>>().map(|vec| warp::reply::json(&vec));
let res = warp::test::request().body("nope").reply(&form).await;
assert_eq!(res.status(), 400); let prefix = b"Request body deserialize error: ";
assert_eq!(&res.body()[..prefix.len()], prefix);
}
#[tokio::test] asyncfn stream() { let _ = pretty_env_logger::try_init();
let stream = warp::body::stream();
let body = warp::test::request()
.body("foo=bar")
.filter(&stream)
.await
.expect("filter() stream");
let bufs: Result<Vec<_>, warp::Error> = body.try_collect().await; let bufs = bufs.unwrap();