#![feature(plugin, custom_derive)] #![plugin(rocket_codegen)] #[macro_use] extern crate bart_derive; #[macro_use] extern crate diesel; #[macro_use] extern crate serde_derive; extern crate comrak; extern crate dotenv; extern crate r2d2; extern crate r2d2_diesel; extern crate rocket; extern crate rocket_contrib; #[macro_use] mod utils; mod controllers; mod models; mod schema; use controllers::{home_controller, login_controller, posts_controller, users_controller}; fn build_rocket(pool: utils::Pool) -> rocket::Rocket { rocket::ignite() .manage(pool) .mount("/", home_controller::routes()) .mount("/posts", posts_controller::routes()) .mount("/users", users_controller::routes()) .mount("/login", login_controller::routes()) } fn main() { if let Ok(dburl) = dotenv::var("DATABASE_URL") { let pool = utils::init_db_pool(&dburl); build_rocket(pool).launch(); } else { eprintln!("Error: No database specified, make sure the DATABASE_URL env var is set."); }; } #[cfg(test)] mod test { extern crate victoria_dom; mod test_helpers; use self::victoria_dom::DOM; use super::build_rocket; use super::models::Post; use super::utils; use rocket::local::Client; use rocket::http::{Accept, Status}; #[test] fn landing_page_shows_published_posts() { let pool = test_helpers::init_test_db_pool(); let conn = utils::DbConn(pool.get().unwrap()); let client = Client::new(build_rocket(pool)).expect("Rocket not built!"); let mut response = client .get("/") .header(Accept::HTML) .dispatch(); assert_eq!(response.status(), Status::Ok); let dom = DOM::new(&response.body_string().unwrap()); let displayed_posts = dom.at("body").unwrap().childs(Some(".post-teaser")).iter().count(); let posts = Post::get_all(&conn); assert_eq!(displayed_posts, posts.len()); } }