diff options
Diffstat (limited to 'rust/src')
-rw-r--r-- | rust/src/lib.rs | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/rust/src/lib.rs b/rust/src/lib.rs index dcefcdab..c051ee0e 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -3,6 +3,8 @@ extern crate fatcat_api; extern crate chrono; #[macro_use] extern crate diesel; +#[macro_use] +extern crate diesel_migrations; extern crate dotenv; extern crate futures; extern crate uuid; @@ -35,12 +37,15 @@ pub use errors::*; pub use self::errors::*; use diesel::pg::PgConnection; use diesel::prelude::*; -use diesel::r2d2::ConnectionManager; +use diesel::r2d2::{ConnectionManager, ManageConnection}; use dotenv::dotenv; use iron::middleware::AfterMiddleware; use iron::{Request, Response}; use std::env; +#[cfg(feature = "postgres")] +embed_migrations!("../migrations/"); + pub type ConnectionPool = diesel::r2d2::Pool<ConnectionManager<diesel::pg::PgConnection>>; /// Establish a direct database connection. Not currently used, but could be helpful for @@ -55,8 +60,19 @@ pub fn establish_connection() -> PgConnection { /// Instantiate a new API server with a pooled database connection pub fn server() -> Result<api_server::Server> { dotenv().ok(); - let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set"); + let database_url = if cfg!(test) { + env::var("DATABASE_URL").expect("DATABASE_URL must be set") + } else { + env::var("TEST_DATABASE_URL").expect("TEST_DATABASE_URL must be set") + }; let manager = ConnectionManager::<PgConnection>::new(database_url); + if cfg!(test) { + // run migrations; revert latest (dummy data); re-run latest + let conn = manager.connect().unwrap(); + diesel_migrations::run_pending_migrations(&conn).unwrap(); + diesel_migrations::revert_latest_migration(&conn).unwrap(); + diesel_migrations::run_pending_migrations(&conn).unwrap(); + } let pool = diesel::r2d2::Pool::builder() .build(manager) .expect("Failed to create database pool."); |