acorn-lib 0.1.75

ACORN library
Documentation
#![allow(
    clippy::arithmetic_side_effects,
    clippy::expect_used,
    clippy::indexing_slicing,
    clippy::panic,
    clippy::unwrap_used
)]

use super::*;
use crate::schema::pid::{Identifier, PersistentIdentifierConvert, PID};

const CONTRACT_CANONICAL: &str = "https://isni.org/isni/0000000492299539";
const CONTRACT_INVALID: &str = "0000000492299538";
const CONTRACT_VALID: &str = "https://isni.org/isni/0000000492299539";

#[test]
fn test_idutils_isni_cases() {
    assert!(ISNI::is_valid("1422-4586-3573-0476"));
}
#[test]
fn test_isni() {
    let canonical = "https://isni.org/isni/0000000492299539";
    assert_eq!(PID::from("ISNI"), PID::ISNI);
    assert_eq!(serde_json::to_string(&PID::ISNI).unwrap(), r#""isni""#);
    assert!(canonical.is_pid(PID::ISNI));
    assert!(canonical.is_isni());
    assert_eq!(canonical.to_pid(PID::ISNI).to_isni().to_string(), canonical);
    assert_eq!("0000 0004 9229 9539".format_as(PID::ISNI), canonical);
    assert_eq!("0000-0004-9229-9539".format_as(PID::ISNI), canonical);
    assert_eq!(ISNI::format("http://isni.org/isni/0000000492299539"), canonical);
    assert_eq!(
        Identifier {
            kind: PID::ISNI,
            value: "0000-0004-9229-9539".to_string(),
        }
        .normalized()
        .expect("explicit ISNI should normalize")
        .value,
        canonical
    );
    assert_eq!(mod_11_2_check_digit("0000000492299539"), Some(vec!['9']));
    assert!(!ISNI::is_valid("0000000492299538"));
}
#[test]
fn test_isni_find_all_and_orcid_precedence() {
    let isni = "https://isni.org/isni/0000000492299539";
    let orcid = "https://orcid.org/0000-0002-2057-9115";
    let values = ISNI::find_all(format!("ISNI {isni}; ORCID {orcid}"));
    assert_eq!(values.len(), 1);
    assert_eq!(values[0].to_string(), isni);
    assert!(ORCID::find_all(isni).is_empty());
    let normalized = Identifier::new(orcid).normalized().expect("ORCID should normalize");
    assert_eq!(normalized.kind, PID::ORCID);
}
#[test]
fn test_isni_metadatatools_cases() {
    ["0000 0001 2096 0218", "0000 0000 8405 6132", "0000 0000 7182 7209"]
        .into_iter()
        .for_each(|value| assert!(ISNI::is_valid(value), "expected valid ISNI: {value}"));
}
#[test]
fn test_isni_trait_contract() {
    assert_eq!(ISNI::new().to_string(), ISNI::default().to_string());
    assert!(ISNI::is_valid(CONTRACT_VALID));
    assert!(!ISNI::is_valid(CONTRACT_INVALID));
    assert_eq!(ISNI::format(CONTRACT_VALID), CONTRACT_CANONICAL);
    let pid = ISNI::from_string(CONTRACT_VALID);
    assert_eq!(pid.to_string(), CONTRACT_CANONICAL);
    assert_eq!(pid.schema_uri(), "https://isni.org/isni");
    assert_eq!(pid.identifier(), "0000000492299539");
    assert!(pid.prefix().is_none());
    assert_eq!(pid.suffix(), Some("0000000492299539".to_string()));
    assert_eq!(pid.check_digit(), Some(vec!['9']));
    assert!(pid.url().is_empty());
    let found = <ISNI as PersistentIdentifierParse>::find_all(format!("Identifier: {CONTRACT_VALID}"));
    assert_eq!(found.len(), 1);
    assert_eq!(found.first().map(ToString::to_string).as_deref(), Some(CONTRACT_CANONICAL));
    assert!(CONTRACT_VALID.is_pid(PID::ISNI));
    assert_eq!(CONTRACT_VALID.format_as(PID::ISNI), CONTRACT_CANONICAL);
    assert_eq!(CONTRACT_VALID.to_pid(PID::ISNI).to_isni().to_string(), CONTRACT_CANONICAL);
}