Rocket/examples/query_params/src/tests.rs
Sergio Benitez 61f107f550 Reimplement route attribute as a proc-macro.
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.
2018-10-09 04:18:04 -07:00

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);
});
}