diff options
| author | Bryan Newbold <bnewbold@robocracy.org> | 2019-02-14 16:24:16 -0800 | 
|---|---|---|
| committer | Bryan Newbold <bnewbold@robocracy.org> | 2019-02-14 16:24:16 -0800 | 
| commit | b9699e27936573271506dbf6a3af744f7b454c03 (patch) | |
| tree | a5ec41bf27f844fad32ca7f6aa1c254bd5c424ae /rust/src | |
| parent | 70b4bc18b13f59c9d42c8e44ef872dfd2e1abef3 (diff) | |
| download | fatcat-b9699e27936573271506dbf6a3af744f7b454c03.tar.gz fatcat-b9699e27936573271506dbf6a3af744f7b454c03.zip | |
verify release_status field
Diffstat (limited to 'rust/src')
| -rw-r--r-- | rust/src/entity_crud.rs | 3 | ||||
| -rw-r--r-- | rust/src/identifiers.rs | 32 | 
2 files changed, 35 insertions, 0 deletions
| diff --git a/rust/src/entity_crud.rs b/rust/src/entity_crud.rs index 743d451a..faf4b496 100644 --- a/rust/src/entity_crud.rs +++ b/rust/src/entity_crud.rs @@ -1964,6 +1964,9 @@ impl EntityCrud for ReleaseEntity {              if let Some(ref release_type) = entity.release_type {                  check_release_type(release_type)?;              } +            if let Some(ref release_status) = entity.release_status { +                check_release_status(release_status)?; +            }              if let Some(ref abstracts) = entity.abstracts {                  if abstracts.len() > 200 {                      return Err(FatcatError::BadRequest( diff --git a/rust/src/identifiers.rs b/rust/src/identifiers.rs index 1c859269..ed88939d 100644 --- a/rust/src/identifiers.rs +++ b/rust/src/identifiers.rs @@ -342,6 +342,38 @@ fn test_check_release_type() {      assert!(check_release_type("book ").is_err());  } +pub fn check_release_status(raw: &str) -> Result<()> { +    let valid_types = vec![ +        // DRIVER types (minus "version" suffix) +        "draft", +        "submitted", +        "accepted", +        "published", +        "updated", +        // fatcat-specific extensions +        "retraction", +    ]; +    for good in valid_types { +        if raw == good { +            return Ok(()); +        } +    } +    Err(FatcatError::NotInControlledVocabulary( +        "release_status".to_string(), +        raw.to_string(), +    ))? +} + +#[test] +fn test_check_release_status() { +    assert!(check_release_status("draft").is_ok()); +    assert!(check_release_status("retraction").is_ok()); +    assert!(check_release_status("published").is_ok()); +    assert!(check_release_status("pre-print").is_err()); +    assert!(check_release_status("DRAFT").is_err()); +    assert!(check_release_status("draft ").is_err()); +} +  pub fn check_contrib_role(raw: &str) -> Result<()> {      let valid_types = vec