aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--rust/src/api_server.rs3
-rw-r--r--rust/tests/test_api_server.rs364
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))