blob: cbf61acf7212811778c7f10d521d4d5b080f7497 (
plain) (
tree)
|
|
#![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());
}
}
|