use iron::Chain; use logger::Logger; use router::Router; use crate::handlers; pub fn init() -> Chain { let mut router = Router::new(); router.get("/", handlers::hello_world, "root"); router.get("/public/*", handlers::AssetsHandler::new("/public/", "src/public/"), "public_assets"); // Create the middleware chain let mut chain = Chain::new(router); // Set up basic logging let (logger_before, logger_after) = Logger::new(None); chain.link_before(logger_before); chain.link_after(logger_after); chain } #[cfg(test)] mod tests { use iron::Headers; use iron::response::Response; use iron::status::Status; #[test] fn get_javascript_responds_correctly() { let expected_body = include_str!("public/js/main.js"); let chain = super::init(); let response = iron_test::request::get( "http://localhost:3000/public/js/main.js", Headers::new(), &chain ).unwrap(); assert_eq!(Some(Status::Ok), response.status); assert_eq!(expected_body, response_body(response).unwrap()); } #[test] fn get_css_responds_correctly() { let expected_body = include_str!("public/css/main.css"); let chain = super::init(); let response = iron_test::request::get( "http://localhost:8000/public/css/main.css", Headers::new(), &chain ).unwrap(); assert_eq!(Some(Status::Ok), response.status); assert_eq!(expected_body, response_body(response).unwrap()); } #[test] fn get_root_responds_with_200() { let chain = super::init(); let response = iron_test::request::get( "http://localhost:8000", Headers::new(), &chain ).unwrap(); assert_eq!(Some(Status::Ok), response.status) } fn response_body(response: Response) -> Option { if let Some(mut body) = response.body { let mut buf = Vec::new(); body.write_body(&mut buf).unwrap(); Some(String::from_utf8(buf).unwrap()) } else { None } } }