diff options
author | Bryan Newbold <bnewbold@robocracy.org> | 2018-06-20 09:38:03 -0700 |
---|---|---|
committer | Bryan Newbold <bnewbold@robocracy.org> | 2018-06-20 09:38:03 -0700 |
commit | 381fe70c56b1a936d4eef676ee8ba546f6a3cf30 (patch) | |
tree | 5447e70f214c42b0ca3a533f64e828ff9410587f | |
parent | bde5c8f14e13afe4d54e9bfafd8bda8b0f33f804 (diff) | |
download | fatcat-381fe70c56b1a936d4eef676ee8ba546f6a3cf30.tar.gz fatcat-381fe70c56b1a936d4eef676ee8ba546f6a3cf30.zip |
handle UUID errors as HTTP 400
-rw-r--r-- | rust/src/api_server.rs | 8 | ||||
-rw-r--r-- | rust/tests/test_api_server.rs | 39 |
2 files changed, 45 insertions, 2 deletions
diff --git a/rust/src/api_server.rs b/rust/src/api_server.rs index 24c62625..4c0f069e 100644 --- a/rust/src/api_server.rs +++ b/rust/src/api_server.rs @@ -57,6 +57,8 @@ macro_rules! wrap_entity_handlers { $post_resp::CreatedEntity(edit), Err(Error(ErrorKind::Diesel(e), _)) => $post_resp::BadRequest(ErrorResponse { message: e.to_string() }), + Err(Error(ErrorKind::Uuid(e), _)) => + $post_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => $post_resp::GenericError(ErrorResponse { message: e.to_string() }), }; Box::new(futures::done(Ok(ret))) @@ -72,6 +74,8 @@ macro_rules! wrap_entity_handlers { $post_batch_resp::CreatedEntities(edit), Err(Error(ErrorKind::Diesel(e), _)) => $post_batch_resp::BadRequest(ErrorResponse { message: e.to_string() }), + Err(Error(ErrorKind::Uuid(e), _)) => + $post_batch_resp::BadRequest(ErrorResponse { message: e.to_string() }), Err(e) => $post_batch_resp::GenericError(ErrorResponse { message: e.to_string() }), }; Box::new(futures::done(Ok(ret))) @@ -661,9 +665,9 @@ impl Server { Some(param) => param as i64, }; - let work_id = uuid::Uuid::parse_str(&entity.work_id).expect("invalid UUID"); + let work_id = uuid::Uuid::parse_str(&entity.work_id)?; let container_id: Option<uuid::Uuid> = match entity.container_id { - Some(id) => Some(uuid::Uuid::parse_str(&id).expect("invalid UUID")), + Some(id) => Some(uuid::Uuid::parse_str(&id)?), None => None, }; diff --git a/rust/tests/test_api_server.rs b/rust/tests/test_api_server.rs index 86863f0b..7d63afe9 100644 --- a/rust/tests/test_api_server.rs +++ b/rust/tests/test_api_server.rs @@ -440,3 +440,42 @@ fn test_stats() { Some("merged_editgroups"), ); } + +#[test] +fn test_400() { + let (headers, router, _conn) = setup(); + + check_response( + request::post( + "http://localhost:9411/v0/release", + headers, + r#"{"title": "secret paper", + "release_type": "journal-article", + "doi": "10.1234/abcde.781231231239", + "volume": "439", + "issue": "IV", + "pages": "1-399", + "work_id": "00000000-0000-0000-5555-00002", + "container_id": "00000000-0000-0000-1111-000000001", + "refs": [{ + "index": 3, + "raw": "just a string" + },{ + "raw": "just a string" + }], + "contribs": [{ + "index": 1, + "raw": "textual description of contributor (aka, name)", + "creator_id": "00000000-0000-0000-2222-000000000001", + "contrib_type": "author" + },{ + "raw": "shorter" + }], + "extra": { "source": "speculation" } + }"#, + &router, + ), + status::BadRequest, + None, + ); +} |