Rocket/examples/query_params/src/tests.rs

77 lines
2.1 KiB
Rust
Raw Normal View History

2016-12-29 03:29:12 +00:00
use super::rocket;
Remove Session in favor of private cookies. New testing API. Sessions -------- This commit removes the `Session` type in favor of methods on the `Cookies` types that allow for adding, removing, and getting private (signed and encrypted) cookies. These methods provide a superset of the functionality of `Session` while also being a minimal addition to the existing API. They can be used to implement the previous `Session` type as well as other forms of session storage. The new methods are: * Cookie::add_private(&mut self, Cookie) * Cookie::remove_private(&mut self, Cookie) * Cookie::get_private(&self, &str) Resolves #20 Testing ------- This commit removes the `rocket::testing` module. It adds the `rocket::local` module which provides a `Client` type for local dispatching of requests against a `Rocket` instance. This `local` package subsumes the previous `testing` package. Rocket Examples --------------- The `forms`, `optional_result`, and `hello_alt_methods` examples have been removed. The following example have been renamed: * extended_validation -> form_validation * hello_ranks -> ranking * from_request -> request_guard * hello_tls -> tls Other Changes ------------- This commit also includes the following smaller changes: * Config::{development, staging, production} constructors have been added for easier creation of default `Config` structures. * The `Config` type is exported from the root. * `Request` implements `Clone` and `Debug`. * `Request::new` is no longer exported. * A `Response::body_bytes` method was added to easily retrieve a response's body as a `Vec<u8>`.
2017-06-06 20:41:04 +00:00
use rocket::local::{Client, LocalResponse as Response};
2016-12-29 03:29:12 +00:00
use rocket::http::Status;
macro_rules! run_test {
($query:expr, $test_fn:expr) => ({
let client = Client::new(rocket()).unwrap();
Remove Session in favor of private cookies. New testing API. Sessions -------- This commit removes the `Session` type in favor of methods on the `Cookies` types that allow for adding, removing, and getting private (signed and encrypted) cookies. These methods provide a superset of the functionality of `Session` while also being a minimal addition to the existing API. They can be used to implement the previous `Session` type as well as other forms of session storage. The new methods are: * Cookie::add_private(&mut self, Cookie) * Cookie::remove_private(&mut self, Cookie) * Cookie::get_private(&self, &str) Resolves #20 Testing ------- This commit removes the `rocket::testing` module. It adds the `rocket::local` module which provides a `Client` type for local dispatching of requests against a `Rocket` instance. This `local` package subsumes the previous `testing` package. Rocket Examples --------------- The `forms`, `optional_result`, and `hello_alt_methods` examples have been removed. The following example have been renamed: * extended_validation -> form_validation * hello_ranks -> ranking * from_request -> request_guard * hello_tls -> tls Other Changes ------------- This commit also includes the following smaller changes: * Config::{development, staging, production} constructors have been added for easier creation of default `Config` structures. * The `Config` type is exported from the root. * `Request` implements `Clone` and `Debug`. * `Request::new` is no longer exported. * A `Response::body_bytes` method was added to easily retrieve a response's body as a `Vec<u8>`.
2017-06-06 20:41:04 +00:00
$test_fn(client.get(format!("/hello{}", $query)).dispatch());
2016-12-29 03:29:12 +00:00
})
}
#[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()));
});
2016-12-29 03:29:12 +00:00
}
#[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()));
});
2016-12-29 03:29:12 +00:00
}
#[test]
fn name_param_only() {
run_test!("?name=John", |mut response: Response| {
assert_eq!(response.body_string(), Some("Hello John!".into()));
});
2016-12-29 03:29:12 +00:00
}
#[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()));
});
2016-12-29 03:29:12 +00:00
run_test!("?", |mut response: Response| {
assert_eq!(response.body_string(),
Some("We're gonna need a name, and only a name.".into()));
});
2016-12-29 03:29:12 +00:00
}
#[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()));
});
2016-12-29 03:29:12 +00:00
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);
});
2016-12-29 03:29:12 +00:00
}