rust-auth-utils 1.0.0

A rust port of @better-auth/utils.
Documentation
use crate::random::{Alphabet, RandomStringGenerator};

#[test]
fn test_random_string_generation() {
    let generator = RandomStringGenerator::new(&[Alphabet::Lowercase]).unwrap();
    let length = 16;
    let random_string = generator.generate(length, None).unwrap();

    assert_eq!(random_string.len(), length);
    assert!(random_string
        .chars()
        .all(|c| "abcdefghijklmnopqrstuvwxyz".contains(c)));
}

#[test]
fn test_custom_alphabet() {
    let generator = RandomStringGenerator::new(&[Alphabet::Uppercase, Alphabet::Digits]).unwrap();
    let random_string = generator.generate(8, None).unwrap();
    let allowed_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

    assert!(random_string.chars().all(|c| allowed_chars.contains(c)));
}

#[test]
fn test_no_valid_characters() {
    assert!(RandomStringGenerator::new(&[]).is_err());
}

#[test]
fn test_invalid_length() {
    let generator = RandomStringGenerator::new(&[Alphabet::Lowercase]).unwrap();
    assert!(generator.generate(0, None).is_err());
}

#[test]
fn test_override_alphabet() {
    let generator = RandomStringGenerator::new(&[Alphabet::Lowercase]).unwrap();
    let random_string = generator.generate(10, Some(Alphabet::Uppercase)).unwrap();
    let allowed_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    assert!(random_string.chars().all(|c| allowed_chars.contains(c)));
}

#[test]
fn test_digits_alphabet() {
    let generator = RandomStringGenerator::new(&[Alphabet::Digits]).unwrap();
    let random_string = generator.generate(10, None).unwrap();
    let allowed_chars = "0123456789";

    assert!(random_string.chars().all(|c| allowed_chars.contains(c)));
}

#[test]
fn test_special_characters() {
    let generator = RandomStringGenerator::new(&[Alphabet::Special]).unwrap();
    let random_string = generator.generate(5, None).unwrap();
    let allowed_chars = "-_";

    assert!(random_string.chars().all(|c| allowed_chars.contains(c)));
}

#[test]
fn test_multiple_alphabets() {
    let generator = RandomStringGenerator::new(&[
        Alphabet::Lowercase,
        Alphabet::Uppercase,
        Alphabet::Digits,
        Alphabet::Special,
    ])
    .unwrap();
    let random_string = generator.generate(20, None).unwrap();
    let allowed_chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_";

    assert!(random_string.chars().all(|c| allowed_chars.contains(c)));
}