mirror of
https://github.com/rwf2/Rocket.git
synced 2025-01-02 15:52:41 +00:00
61f107f550
This commits also implement the query reform from #608. It also consists of many, many breaking changes. Among them are: * Query parts in route paths use new query reform syntax. * Routing for queries is now lenient. - Default ranking has changed to reflect query reform. * Format routing matching has been fixed. - Routes with formats matching "accept" will always collide. - Routes with formats matching "content-type" require requests to have an equivalent content-type header to match. - Requests with imprecise content-types are treated as not having a content-type. * Generated routes and catchers respect visibility modifiers. * Raw getter methods from request were renamed and retooled. - In particular, the index parameter is based on segments in the route path, not dynamic parameters. * The method-based attributes no longer accept a keyed 'path'. * The 'rocket_codegen' crate is gone and will no longer be public. * The 'FormItems' iterator emits values of type 'FormItem'. - The internal form items' string can no longer be retrieved. * In general, routes are more strictly validated. * Logging from codegen now funnels through logging infrastructure. * Routing has been optimized by caching routing metadata. Resolves #93. Resolves #608. Resolves #693. Resolves #476.
77 lines
2.1 KiB
Rust
77 lines
2.1 KiB
Rust
use super::rocket;
|
|
use rocket::local::{Client, LocalResponse as Response};
|
|
use rocket::http::Status;
|
|
|
|
macro_rules! run_test {
|
|
($query:expr, $test_fn:expr) => ({
|
|
let client = Client::new(rocket()).unwrap();
|
|
$test_fn(client.get(format!("/hello{}", $query)).dispatch());
|
|
})
|
|
}
|
|
|
|
#[test]
|
|
fn age_and_name_params() {
|
|
run_test!("?age=10&name=john", |mut response: Response| {
|
|
assert_eq!(response.body_string(),
|
|
Some("Hello, 10 year old named john!".into()));
|
|
});
|
|
|
|
run_test!("?age=20&name=john", |mut response: Response| {
|
|
assert_eq!(response.body_string(),
|
|
Some("20 years old? Hi, john!".into()));
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn age_param_only() {
|
|
run_test!("?age=10", |mut response: Response| {
|
|
assert_eq!(response.body_string(),
|
|
Some("We're gonna need a name, and only a name.".into()));
|
|
});
|
|
|
|
run_test!("?age=20", |mut response: Response| {
|
|
assert_eq!(response.body_string(),
|
|
Some("We're gonna need a name, and only a name.".into()));
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn name_param_only() {
|
|
run_test!("?name=John", |mut response: Response| {
|
|
assert_eq!(response.body_string(), Some("Hello John!".into()));
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn no_params() {
|
|
run_test!("", |mut response: Response| {
|
|
assert_eq!(response.body_string(),
|
|
Some("We're gonna need a name, and only a name.".into()));
|
|
});
|
|
|
|
run_test!("?", |mut response: Response| {
|
|
assert_eq!(response.body_string(),
|
|
Some("We're gonna need a name, and only a name.".into()));
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn extra_params() {
|
|
run_test!("?age=20&name=Bob&extra", |mut response: Response| {
|
|
assert_eq!(response.body_string(),
|
|
Some("20 years old? Hi, Bob!".into()));
|
|
});
|
|
|
|
run_test!("?age=30&name=Bob&extra", |mut response: Response| {
|
|
assert_eq!(response.body_string(),
|
|
Some("We're gonna need a name, and only a name.".into()));
|
|
});
|
|
}
|
|
|
|
#[test]
|
|
fn wrong_path() {
|
|
run_test!("/other?age=20&name=Bob", |response: Response| {
|
|
assert_eq!(response.status(), Status::NotFound);
|
|
});
|
|
}
|