pub mod tests {
use crate::Passgen;
#[test]
fn it_works() {
assert_eq!(Passgen::new().generate(4).len(), 0);
assert_ne!(
Passgen::new().set_enabled_letters(true).generate(4).len(),
0
);
assert_ne!(
Passgen::default()
.set_custom_charset("abcABC123⭕➖❎⚫⬛п₼⁂🙂")
.generate(4)
.len(),
0
);
assert_ne!(Passgen::default_strong_and_usab().generate(4).len(), 0);
}
#[test]
fn password_validation() {
let mut generator = Passgen::default();
generator.set_password("Test123!");
assert_eq!(generator.get_password(), "Test123!");
assert!(generator.validate_password());
generator.set_enabled_spec_symbols(true);
generator.set_password("Test123"); assert!(!generator.validate_password());
}
#[test]
fn password_strength_scoring() {
let mut generator = Passgen::default();
generator.set_password("123");
assert_eq!(generator.password_strength_score(), 0);
generator.set_password("password");
assert_eq!(generator.password_strength_score(), 0);
generator.set_password("password123");
let score = generator.password_strength_score();
assert!(score < 40);
generator.set_password("Password123");
let score = generator.password_strength_score();
assert!(score >= 30 && score <= 60);
generator.set_password("P@ssw0rd123");
let score = generator.password_strength_score();
assert!(score >= 40 && score <= 70);
generator.set_password("MyV3ry$tr0ngP@ssw0rd!");
let score = generator.password_strength_score();
assert!(score >= 70 && score <= 90);
}
#[test]
fn password_strength_levels() {
let mut generator = Passgen::default();
generator.set_password("123");
assert_eq!(generator.password_strength_level(), "Very Weak");
generator.set_password("password123");
let level = generator.password_strength_level();
assert!(level == "Weak" || level == "Very Weak");
generator.set_password("Password123");
let level = generator.password_strength_level();
assert!(level == "Fair" || level == "Weak");
generator.set_password("P@ssw0rd123!");
let level = generator.password_strength_level();
assert!(level == "Strong" || level == "Fair");
generator.set_password("V3ry$tr0ng&P@ssw0rdW1thEntropy!");
assert_eq!(generator.password_strength_level(), "Strong");
}
#[test]
fn custom_charset_validation() {
let mut generator = Passgen::new();
generator.set_custom_charset("abc123");
generator.set_password("abc123");
assert!(generator.validate_password());
generator.set_password("abc123d"); assert!(!generator.validate_password());
}
#[test]
fn generated_password_stored_in_field() {
let mut generator = Passgen::default();
let password = generator.generate(12);
assert_eq!(generator.get_password(), password);
assert!(!generator.get_password().is_empty());
let score = generator.password_strength_score();
assert!(score > 0);
}
#[test]
fn multilingual_strength_levels() {
use crate::Language;
let mut generator = Passgen::default();
generator.set_password("V3ry$tr0ng&P@ssw0rd!");
generator.set_language(Language::English);
assert_eq!(generator.password_strength_level(), "Strong");
generator.set_language(Language::Russian);
assert_eq!(generator.password_strength_level(), "Сильный");
generator.set_language(Language::Spanish);
assert_eq!(generator.password_strength_level(), "Fuerte");
generator.set_language(Language::Chinese);
assert_eq!(generator.password_strength_level(), "强");
generator.set_language(Language::Portuguese);
assert_eq!(generator.password_strength_level(), "Forte");
generator.set_language(Language::Japanese);
assert_eq!(generator.password_strength_level(), "強い");
}
#[test]
fn password_strength_with_different_passwords() {
let mut generator = Passgen::default();
generator.set_password("123");
assert_eq!(generator.password_strength_score(), 0);
generator.set_password("abc");
assert_eq!(generator.password_strength_score(), 0);
generator.set_password("password");
assert_eq!(generator.password_strength_score(), 0);
generator.set_password("123456");
assert_eq!(generator.password_strength_score(), 0);
generator.set_password("Password1");
let score3 = generator.password_strength_score();
assert!(score3 >= 30 && score3 <= 60);
generator.set_password("P@ssw0rd123");
let score4 = generator.password_strength_score();
assert!(score4 >= 40 && score4 <= 70);
generator.set_password("MyP@ssw0rd!2024");
let score5 = generator.password_strength_score();
assert!(score5 >= 60 && score5 <= 85);
generator.set_password("V3ry$3cur3&P@ssw0rd!L0ng");
let score6 = generator.password_strength_score();
assert!(score6 >= 70 && score6 <= 95);
}
#[test]
fn find_maximum_score_password() {
let mut generator = Passgen::default();
let ideal_password = "Kp@3#mN9!qZ$7%vR*2&xY5^wL8+dF6";
generator.set_password(ideal_password);
let score = generator.password_strength_score();
println!("Ideal password score: {}", score);
println!("Ideal password: {}", ideal_password);
assert!(score >= 70 && score <= 80);
let long_password = "aB1@cD2#eF3$gH4%iJ5^kL6&mN7*oP8(qR9)sT0_uV1+wX2-yZ3";
generator.set_password(long_password);
let long_score = generator.password_strength_score();
println!("Very long password score: {}", long_score);
println!("Very long password: {}", long_password);
assert!(long_score >= 70 && long_score <= 80);
generator.generate(24);
let generated_score = generator.password_strength_score();
let generated_password = generator.get_password();
println!("Generated password score: {}", generated_score);
println!("Generated password: {}", generated_password);
assert!(generated_score >= 60);
}
}