use http::StatusCode; use rweb::*; #[get("/sum/{a}/{b}")] fn sum(a: usize, b: usize) -> String { (a + b).to_string() } #[get("/mul/{a}/{b}")] fn mul(a: usize, b: usize) -> String { (a * b).to_string() } #[get("/no-arg")] fn no_arg() -> String { String::new() } #[tokio::test] async fn math_test() { #[router("/math", services(sum, mul))] fn math() {} let value = warp::test::request() .path("/math/sum/1/2") .reply(&math()) .await; assert_eq!(value.status(), StatusCode::OK); assert_eq!(value.into_body(), b"3"[..]); } #[tokio::test] async fn arg_cnt_test() { #[router("/math/complex", services(sum, mul, no_arg))] fn arg_cnt() {} let value = warp::test::request() .path("/math/complex/sum/1/2") .reply(&arg_cnt()) .await; assert_eq!(value.status(), StatusCode::OK); assert_eq!(value.into_body(), b"3"[..]); } #[derive(Default, Clone)] struct Db {} #[get("/use")] fn use_db(#[data] _db: Db) -> String { String::new() } #[router("/data", services(use_db))] fn data_param(#[data] db: Db) {} #[tokio::test] async fn data_param_test() { let value = warp::test::request() .path("/data/use") .reply(&data_param(Db::default())) .await; assert_eq!(value.status(), StatusCode::OK); assert_eq!(value.into_body(), b""[..]); } #[get("/")] fn admin_index() -> String { String::new() } #[get("/users")] fn admin_users() -> String { String::new() } #[router("/admin", services(admin_index, admin_users))] #[header("X-User-Admin", "1")] fn admin() {}