iron-test 0.6.0

Mocking suite for Iron requests.
Documentation
extern crate iron;
extern crate iron_test;
extern crate mime;
extern crate urlencoded;

use iron::{Handler, status};
use iron::prelude::*;

use urlencoded::UrlEncodedBody;

struct BodyHandler;

impl Handler for BodyHandler {
    fn handle(&self, req: &mut Request) -> IronResult<Response> {
        let body = req.get_ref::<UrlEncodedBody>()
            .expect("Expected to extract a UrlEncodedBody from the request");
        let first_name = body.get("first_name").unwrap()[0].to_owned();
        let last_name = body.get("last_name").unwrap()[0].to_owned();

        Ok(Response::with((status::Ok, first_name + " " + &last_name)))
    }
}

fn main() {
    Iron::new(BodyHandler).http("localhost:3000").unwrap();
}

#[cfg(test)]
mod test {
    use iron::Headers;
    use iron::headers::ContentType;
    use iron::prelude::*;

    use iron_test::{request, response};

    use mime::Mime;

    use super::BodyHandler;

    #[test]
    fn test_body() {
        let mut headers = Headers::new();
        let mime: Mime = "application/x-www-form-urlencoded".parse().unwrap();
        headers.set(ContentType(mime));
        let response = request::post("http://localhost:3000/users",
                                     headers,
                                     "first_name=Example&last_name=User",
                                     &BodyHandler);
        let result = response::extract_body_to_bytes(response.unwrap());

        assert_eq!(result, b"Example User");
    }
}