rustauth-scim 0.3.0

SCIM support for RustAuth.
Documentation
use rustauth_scim::mappings::{account_id, primary_email, user_full_name, ScimEmail, ScimName};

#[test]
fn account_id_prefers_external_id_over_user_name() {
    assert_eq!(account_id("user@example.com", Some("external")), "external");
    assert_eq!(account_id("user@example.com", None), "user@example.com");
}

#[test]
fn primary_email_prefers_primary_then_first_then_user_name() {
    let emails = [
        ScimEmail {
            value: "secondary@example.com".to_owned(),
            primary: false,
        },
        ScimEmail {
            value: "primary@example.com".to_owned(),
            primary: true,
        },
    ];

    assert_eq!(primary_email("user", &emails), "primary@example.com");
    assert_eq!(primary_email("user", &emails[..1]), "secondary@example.com");
    assert_eq!(primary_email("user", &[]), "user");
}

#[test]
fn user_full_name_prefers_formatted_then_name_parts_then_email() {
    assert_eq!(
        user_full_name(
            "ada@example.com",
            Some(&ScimName {
                formatted: Some("  Ada Lovelace  ".to_owned()),
                given_name: Some("Ignored".to_owned()),
                family_name: Some("Ignored".to_owned()),
            }),
        ),
        "Ada Lovelace"
    );
    assert_eq!(
        user_full_name(
            "ada@example.com",
            Some(&ScimName {
                formatted: Some("   ".to_owned()),
                given_name: Some("Ada".to_owned()),
                family_name: Some("Lovelace".to_owned()),
            }),
        ),
        "Ada Lovelace"
    );
    assert_eq!(user_full_name("ada@example.com", None), "ada@example.com");
}