diff options
-rw-r--r-- | rust/src/api_server.rs | 3 | ||||
-rw-r--r-- | rust/tests/test_api_server.rs | 364 |
2 files changed, 194 insertions, 173 deletions
diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs index eee68e02..19cd5fe4 100644 --- a/rust/src/api_server.rs +++ b/rust/src/api_server.rs @@ -659,8 +659,7 @@ impl Api for Server { .iter() .map(|r| FileReleaseRow { file_rev: edit.rev_id.unwrap(), - target_release_ident_id: - uuid::Uuid::parse_str(r).expect("valid UUID"), + target_release_ident_id: uuid::Uuid::parse_str(r).expect("valid UUID"), }) .collect(); let release_rows: Vec<FileReleaseRow> = insert_into(file_release::table) diff --git a/rust/tests/test_api_server.rs b/rust/tests/test_api_server.rs index ac9a8dcc..ccc5c371 100644 --- a/rust/tests/test_api_server.rs +++ b/rust/tests/test_api_server.rs @@ -12,179 +12,192 @@ use iron::mime::Mime; use iron::{status, Headers}; use iron_test::{request, response}; -#[test] -fn test_basics() { +fn setup() -> ( + Headers, + fatcat_api::router::Router, + diesel::r2d2::PooledConnection<diesel::r2d2::ConnectionManager<diesel::PgConnection>>, +) { 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)); + (headers, router, conn) +} + +fn check_response( + resp: iron::IronResult<iron::response::Response>, + want_status: status::Status, + in_body: Option<&str>, +) { + let resp = resp.unwrap(); + let status = resp.status; + let body = response::extract_body_to_string(resp); + println!("{}", body); + assert_eq!(status, Some(want_status)); + if let Some(thing) = in_body { + assert!(body.contains(thing)); + } +} + +#[test] +fn test_basics() { + let (headers, router, _conn) = setup(); + + check_response( + request::get( + "http://localhost:9411/v0/creator/f1f046a3-45c9-4b99-adce-000000000001", + headers.clone(), + &router, + ), + status::Ok, + Some("Grace Hopper"), + ); - let response = request::get( - "http://localhost:9411/v0/creator/f1f046a3-45c9-4b99-adce-000000000001", - Headers::new(), - &router, - ).unwrap(); - assert_eq!(response.status, Some(status::Ok)); - let body = response::extract_body_to_string(response); - assert!(body.contains("Grace Hopper")); - - let response = request::get( - "http://localhost:9411/v0/creator/f1f046a3-45c9-4b99-adce-999999999999", - Headers::new(), - &router, - ).unwrap(); - assert_eq!(response.status, Some(status::NotFound)); + check_response( + request::get( + "http://localhost:9411/v0/creator/f1f046a3-45c9-4b99-adce-999999999999", + headers.clone(), + &router, + ), + status::NotFound, + None, + ); } #[test] fn test_lookups() { - let server = fatcat::test_server().unwrap(); - let router = fatcat_api::router(server); + let (headers, router, _conn) = setup(); - let response = request::get( - "http://localhost:9411/v0/container/lookup?issn=1234-5678", - Headers::new(), - &router, - ).unwrap(); - assert_eq!(response.status, Some(status::Ok)); - let body = response::extract_body_to_string(response); - assert!(body.contains("Journal of Trivial Results")); - - let response = request::get( - "http://localhost:9411/v0/creator/lookup?orcid=0000-0003-2088-7465", - Headers::new(), - &router, - ).unwrap(); - assert_eq!(response.status, Some(status::Ok)); - let body = response::extract_body_to_string(response); - assert!(body.contains("Christine Moran")); + check_response( + request::get( + "http://localhost:9411/v0/container/lookup?issn=1234-5678", + headers.clone(), + &router, + ), + status::Ok, + Some("Journal of Trivial Results"), + ); + + check_response( + request::get( + "http://localhost:9411/v0/creator/lookup?orcid=0000-0003-2088-7465", + headers.clone(), + &router, + ), + status::Ok, + Some("Christine Moran"), + ); } #[test] fn test_post_container() { - let server = fatcat::test_server().unwrap(); - let router = fatcat_api::router(server); - let mut headers = Headers::new(); - let mime: Mime = "application/json".parse().unwrap(); - headers.set(ContentType(mime)); + let (headers, router, _conn) = setup(); - let response = request::post( - "http://localhost:9411/v0/container", - headers, - r#"{"name": "test journal"}"#, - &router, - ).unwrap(); - assert_eq!(response.status, Some(status::Created)); - let body = response::extract_body_to_string(response); - println!("{}", body); - //assert!(body.contains("test journal")); + check_response( + request::post( + "http://localhost:9411/v0/container", + headers, + r#"{"name": "test journal"}"#, + &router, + ), + status::Created, + None, + ); // TODO: "test journal" } #[test] fn test_post_file() { - let server = fatcat::test_server().unwrap(); - let router = fatcat_api::router(server); - let mut headers = Headers::new(); - let mime: Mime = "application/json".parse().unwrap(); - headers.set(ContentType(mime)); + let (headers, router, _conn) = setup(); - let response = request::post( - "http://localhost:9411/v0/file", - headers.clone(), - r#"{ }"#, - &router, - ).unwrap(); - let status = response.status; - let body = response::extract_body_to_string(response); - println!("{}", body); - assert_eq!(status, Some(status::Created)); - - let response = request::post( - "http://localhost:9411/v0/file", - headers, - r#"{"size": 76543, - "sha1": "f013d66c7f6817d08b7eb2a93e6d0440c1f3e7f8", - "url": "http://archive.org/asdf.txt", - "releases": [ - "f1f046a3-45c9-4b99-4444-000000000001", - "f1f046a3-45c9-4b99-4444-000000000002" - ] - }"#, - &router, - ).unwrap(); - let status = response.status; - let body = response::extract_body_to_string(response); - println!("{}", body); - assert_eq!(status, Some(status::Created)); - //assert!(body.contains("secret paper")); + check_response( + request::post( + "http://localhost:9411/v0/file", + headers.clone(), + r#"{ }"#, + &router, + ), + status::Created, + None, + ); + + check_response( + request::post( + "http://localhost:9411/v0/file", + headers, + r#"{"size": 76543, + "sha1": "f013d66c7f6817d08b7eb2a93e6d0440c1f3e7f8", + "url": "http://archive.org/asdf.txt", + "releases": [ + "f1f046a3-45c9-4b99-4444-000000000001", + "f1f046a3-45c9-4b99-4444-000000000002" + ] + }"#, + &router, + ), + status::Created, + None, + ); // TODO: "secret paper" } #[test] fn test_post_release() { - let server = fatcat::test_server().unwrap(); - let router = fatcat_api::router(server); - let mut headers = Headers::new(); - let mime: Mime = "application/json".parse().unwrap(); - headers.set(ContentType(mime)); + let (headers, router, _conn) = setup(); - let response = request::post( - "http://localhost:9411/v0/release", - headers.clone(), - // TODO: target_release_id - r#"{"title": "secret minimal paper", - "release_type": "journal-article", - "work_id": "f1f046a3-45c9-4b99-3333-000000000001" - }"#, - &router, - ).unwrap(); - let status = response.status; - let body = response::extract_body_to_string(response); - println!("{}", body); - assert_eq!(status, Some(status::Created)); - //assert!(body.contains("secret paper")); - // - let response = request::post( - "http://localhost:9411/v0/release", - headers, - // TODO: target_release_id - r#"{"title": "secret paper", - "release_type": "journal-article", - "doi": "10.1234/abcde.781231231239", - "volume": "439", - "pages": "1-399", - "issue": "IV", - "work_id": "f1f046a3-45c9-4b99-3333-000000000002", - "container_id": "f1f046a3-45c9-4b99-cccc-000000000001", - "refs": [{ - "index": 3, - "stub": "just a string" - },{ - "stub": "just a string" - }], - "contribs": [{ - "index": 1, - "creator_stub": "textual description of contributor (aka, name)", - "creator_id": "f1f046a3-45c9-4b99-adce-000000000001", - "contrib_type": "author" - },{ - "creator_stub": "shorter" - }] - }"#, - &router, - ).unwrap(); - let status = response.status; - let body = response::extract_body_to_string(response); - println!("{}", body); - assert_eq!(status, Some(status::Created)); - //assert!(body.contains("secret paper")); + check_response( + request::post( + "http://localhost:9411/v0/release", + headers.clone(), + // TODO: target_release_id + r#"{"title": "secret minimal paper", + "release_type": "journal-article", + "work_id": "f1f046a3-45c9-4b99-3333-000000000001" + }"#, + &router, + ), + status::Created, + None, + ); // TODO: "secret paper" + + check_response( + request::post( + "http://localhost:9411/v0/release", + headers, + // TODO: target_release_id + r#"{"title": "secret paper", + "release_type": "journal-article", + "doi": "10.1234/abcde.781231231239", + "volume": "439", + "pages": "1-399", + "issue": "IV", + "work_id": "f1f046a3-45c9-4b99-3333-000000000002", + "container_id": "f1f046a3-45c9-4b99-cccc-000000000001", + "refs": [{ + "index": 3, + "stub": "just a string" + },{ + "stub": "just a string" + }], + "contribs": [{ + "index": 1, + "creator_stub": "textual description of contributor (aka, name)", + "creator_id": "f1f046a3-45c9-4b99-adce-000000000001", + "contrib_type": "author" + },{ + "creator_stub": "shorter" + }] + }"#, + &router, + ), + status::Created, + None, + ); // TODO: "secret paper" } #[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 (headers, router, conn) = setup(); let editgroup_id = get_or_create_editgroup(1, &conn).unwrap(); @@ -201,26 +214,32 @@ fn test_accept_editgroup() { .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 + check_response( + request::post( + "http://localhost:9411/v0/container", + headers.clone(), + &format!( + "{{\"name\": \"test journal 1\", \"editgroup_id\": {}}}", + editgroup_id + ), + &router, ), - &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 + status::Created, + None, + ); + check_response( + request::post( + "http://localhost:9411/v0/container", + headers.clone(), + &format!( + "{{\"name\": \"test journal 2\", \"editgroup_id\": {}}}", + editgroup_id + ), + &router, ), - &router, - ).unwrap(); - assert_eq!(response.status, Some(status::Created)); + status::Created, + None, + ); let c: i64 = container_ident::table .filter(container_ident::is_live.eq(false)) @@ -229,13 +248,16 @@ fn test_accept_editgroup() { .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)); + check_response( + request::post( + &format!("http://localhost:9411/v0/editgroup/{}/accept", editgroup_id), + headers.clone(), + "", + &router, + ), + status::Ok, + None, + ); let c: i64 = container_ident::table .filter(container_ident::is_live.eq(false)) |