openauth-plugins 0.0.4

Official OpenAuth plugin modules.
Documentation
use openauth_plugins::username::{
    UsernameOptions, UsernameValidationError, ValidationOrder, ValidationPhase,
};

#[test]
fn username_options_validate_default_format_and_length() {
    let options = UsernameOptions {
        min_username_length: 4,
        max_username_length: 12,
        ..UsernameOptions::default()
    };

    assert_eq!(
        options.validate_username("abc", ValidationPhase::Endpoint),
        Err(UsernameValidationError::TooShort)
    );
    assert_eq!(
        options.validate_username("abcdefghijklm", ValidationPhase::Endpoint),
        Err(UsernameValidationError::TooLong)
    );
    assert_eq!(
        options.validate_username("bad name", ValidationPhase::Endpoint),
        Err(UsernameValidationError::Invalid)
    );
    assert!(options
        .validate_username("good.name", ValidationPhase::Endpoint)
        .is_ok());
}

#[test]
fn username_options_support_custom_normalization_and_post_validation() {
    let options = UsernameOptions {
        validation_order: ValidationOrder {
            username: ValidationPhase::PostNormalization,
            display_username: ValidationPhase::PreNormalization,
        },
        username_normalization: Some(std::sync::Arc::new(|username: &str| {
            username.replace(' ', "_").to_lowercase()
        })),
        ..UsernameOptions::default()
    };

    let normalized = options.username_for_validation("Ada Lovelace");
    assert_eq!(normalized, "ada_lovelace");
    assert!(options
        .validate_username(&normalized, ValidationPhase::Endpoint)
        .is_ok());
}