diff options
Diffstat (limited to 'rust')
-rw-r--r-- | rust/src/lib.rs | 31 | ||||
-rw-r--r-- | rust/tests/test_api_server.rs | 73 |
2 files changed, 88 insertions, 16 deletions
diff --git a/rust/src/lib.rs b/rust/src/lib.rs index 4e1dc8ba..c12575a9 100644 --- a/rust/src/lib.rs +++ b/rust/src/lib.rs @@ -36,7 +36,7 @@ pub use errors::*; pub use self::errors::*; use diesel::pg::PgConnection; use diesel::prelude::*; -use diesel::r2d2::{ConnectionManager, ManageConnection}; +use diesel::r2d2::ConnectionManager; use dotenv::dotenv; use iron::middleware::AfterMiddleware; use iron::{Request, Response}; @@ -59,25 +59,30 @@ 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 = 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 database_url = env::var("DATABASE_URL").expect("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."); Ok(api_server::Server { db_pool: pool }) } +pub fn test_server() -> Result<api_server::Server> { + + dotenv().ok(); + let database_url = env::var("TEST_DATABASE_URL").expect("TEST_DATABASE_URL must be set"); + env::set_var("DATABASE_URL", database_url); + + let server = server()?; + let conn = server.db_pool.get().expect("db_pool error"); + + // run migrations; revert latest (dummy data); re-run latest + diesel_migrations::run_pending_migrations(&conn).unwrap(); + diesel_migrations::revert_latest_migration(&conn).unwrap(); + diesel_migrations::run_pending_migrations(&conn).unwrap(); + Ok(server) +} + /// HTTP header middleware header! { (XClacksOverhead, "X-Clacks-Overhead") => [String] } diff --git a/rust/tests/test_api_server.rs b/rust/tests/test_api_server.rs index 4c16d4df..6126a0a2 100644 --- a/rust/tests/test_api_server.rs +++ b/rust/tests/test_api_server.rs @@ -2,7 +2,11 @@ extern crate fatcat; extern crate fatcat_api; extern crate iron; extern crate iron_test; +extern crate diesel; +use fatcat::database_schema::*; +use fatcat::api_helpers::*; +use diesel::prelude::*; use iron::{status, Headers}; use iron::mime::Mime; use iron::headers::ContentType; @@ -10,7 +14,7 @@ use iron_test::{request, response}; #[test] fn test_basics() { - let server = fatcat::server().unwrap(); + let server = fatcat::test_server().unwrap(); let router = fatcat_api::router(server); let response = request::get( @@ -32,7 +36,7 @@ fn test_basics() { #[test] fn test_lookups() { - let server = fatcat::server().unwrap(); + let server = fatcat::test_server().unwrap(); let router = fatcat_api::router(server); let response = request::get( @@ -56,7 +60,7 @@ fn test_lookups() { #[test] fn test_post_container() { - let server = fatcat::server().unwrap(); + let server = fatcat::test_server().unwrap(); let router = fatcat_api::router(server); let mut headers = Headers::new(); let mime: Mime = "application/json".parse().unwrap(); @@ -74,3 +78,66 @@ fn test_post_container() { println!("{}", body); //assert!(body.contains("test journal")); } + +#[test] +fn test_accept_editgroup() { + let server = fatcat::test_server().unwrap(); + let conn = server.db_pool.get().expect("db_pool error"); + let router = fatcat_api::router(server); + let mut headers = Headers::new(); + let mime: Mime = "application/json".parse().unwrap(); + headers.set(ContentType(mime)); + + let editgroup_id = get_or_create_editgroup(1, &conn).unwrap(); + + let c: i64 = container_ident::table + .filter(container_ident::is_live.eq(false)) + .count() + .get_result(&conn).unwrap(); + assert_eq!(c, 0); + let c: i64 = changelog::table + .filter(changelog::editgroup_id.eq(editgroup_id)) + .count() + .get_result(&conn).unwrap(); + assert_eq!(c, 0); + + let response = request::post( + "http://localhost:9411/v0/container", + headers.clone(), + &format!("{{\"name\": \"test journal 1\", \"editgroup_id\": {}}}", editgroup_id), + &router, + ).unwrap(); + assert_eq!(response.status, Some(status::Created)); + let response = request::post( + "http://localhost:9411/v0/container", + headers.clone(), + &format!("{{\"name\": \"test journal 2\", \"editgroup_id\": {}}}", editgroup_id), + &router, + ).unwrap(); + assert_eq!(response.status, Some(status::Created)); + + let c: i64 = container_ident::table + .filter(container_ident::is_live.eq(false)) + .count() + .get_result(&conn).unwrap(); + assert_eq!(c, 2); + + let response = request::post( + &format!("http://localhost:9411/v0/editgroup/{}/accept", editgroup_id), + headers.clone(), + "", + &router, + ).unwrap(); + assert_eq!(response.status, Some(status::Ok)); + + let c: i64 = container_ident::table + .filter(container_ident::is_live.eq(false)) + .count() + .get_result(&conn).unwrap(); + assert_eq!(c, 0); + let c: i64 = changelog::table + .filter(changelog::editgroup_id.eq(editgroup_id)) + .count() + .get_result(&conn).unwrap(); + assert_eq!(c, 1); +} |