mirror of
https://github.com/rwf2/Rocket.git
synced 2024-12-26 12:22:36 +00:00
084481a84e
This is a breaking change. All Rocket applications using code generation must now additionally declare usage of the 'decl_macro' feature.
74 lines
2.0 KiB
Rust
74 lines
2.0 KiB
Rust
#![feature(plugin, decl_macro, custom_derive)]
|
|
#![plugin(rocket_codegen)]
|
|
|
|
extern crate rocket;
|
|
|
|
use rocket::request::{Form, LenientForm};
|
|
use rocket::http::RawStr;
|
|
|
|
#[derive(FromForm)]
|
|
struct MyForm<'r> {
|
|
field: &'r RawStr,
|
|
}
|
|
|
|
#[post("/strict", data = "<form>")]
|
|
fn strict<'r>(form: Form<'r, MyForm<'r>>) -> String {
|
|
form.get().field.as_str().into()
|
|
}
|
|
|
|
#[post("/lenient", data = "<form>")]
|
|
fn lenient<'r>(form: LenientForm<'r, MyForm<'r>>) -> String {
|
|
form.get().field.as_str().into()
|
|
}
|
|
|
|
mod strict_and_lenient_forms_tests {
|
|
use super::*;
|
|
use rocket::local::Client;
|
|
use rocket::http::{Status, ContentType};
|
|
|
|
const FIELD_VALUE: &str = "just_some_value";
|
|
|
|
fn client() -> Client {
|
|
Client::new(rocket::ignite().mount("/", routes![strict, lenient])).unwrap()
|
|
}
|
|
|
|
#[test]
|
|
fn test_strict_form() {
|
|
let client = client();
|
|
let mut response = client.post("/strict")
|
|
.header(ContentType::Form)
|
|
.body(format!("field={}", FIELD_VALUE))
|
|
.dispatch();
|
|
|
|
assert_eq!(response.status(), Status::Ok);
|
|
assert_eq!(response.body_string(), Some(FIELD_VALUE.into()));
|
|
|
|
let response = client.post("/strict")
|
|
.header(ContentType::Form)
|
|
.body(format!("field={}&extra=whoops", FIELD_VALUE))
|
|
.dispatch();
|
|
|
|
assert_eq!(response.status(), Status::UnprocessableEntity);
|
|
}
|
|
|
|
#[test]
|
|
fn test_lenient_form() {
|
|
let client = client();
|
|
let mut response = client.post("/lenient")
|
|
.header(ContentType::Form)
|
|
.body(format!("field={}", FIELD_VALUE))
|
|
.dispatch();
|
|
|
|
assert_eq!(response.status(), Status::Ok);
|
|
assert_eq!(response.body_string(), Some(FIELD_VALUE.into()));
|
|
|
|
let mut response = client.post("/lenient")
|
|
.header(ContentType::Form)
|
|
.body(format!("field={}&extra=whoops", FIELD_VALUE))
|
|
.dispatch();
|
|
|
|
assert_eq!(response.status(), Status::Ok);
|
|
assert_eq!(response.body_string(), Some(FIELD_VALUE.into()));
|
|
}
|
|
}
|