From f3be7bf0f4fb4ea7424abd7376201c3e63287562 Mon Sep 17 00:00:00 2001 From: Brandon Thomas Date: Mon, 16 Sep 2024 20:37:50 -0400 Subject: [PATCH] more username formats --- .../src/util/generate_random_username.rs | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/crates/service/web/storyteller_web/src/util/generate_random_username.rs b/crates/service/web/storyteller_web/src/util/generate_random_username.rs index 0ca538ed54..fe8636e9a3 100644 --- a/crates/service/web/storyteller_web/src/util/generate_random_username.rs +++ b/crates/service/web/storyteller_web/src/util/generate_random_username.rs @@ -47,16 +47,18 @@ enum UsernameFormat { SnakeCase, CamelKebabCase, CamelSnakeCase, + ScreamingSnakeCase, } impl Distribution for Standard { fn sample(&self, rng: &mut R) -> UsernameFormat { - match rng.gen_range(0..=4) { + match rng.gen_range(0..=5) { 0 => UsernameFormat::CamelCase, 1 => UsernameFormat::KebabCase, 2 => UsernameFormat::SnakeCase, 3 => UsernameFormat::CamelKebabCase, - _ => UsernameFormat::CamelSnakeCase, + 4 => UsernameFormat::CamelSnakeCase, + _ => UsernameFormat::ScreamingSnakeCase, } } } @@ -71,13 +73,17 @@ fn generate_candidate_username() -> Option { UsernameFormat::SnakeCase => format!("{}_{}", adjective, noun), UsernameFormat::CamelKebabCase => format!("{}-{}", first_letter_uppercase(adjective), first_letter_uppercase(noun)), UsernameFormat::CamelSnakeCase => format!("{}_{}", first_letter_uppercase(adjective), first_letter_uppercase(noun)), + UsernameFormat::ScreamingSnakeCase => format!("{}_{}", adjective.to_uppercase(), noun.to_uppercase()), }; if let Some(digit) = random_digit() { candidate_username = match format { UsernameFormat::CamelCase => format!("{}{}", candidate_username, digit), - UsernameFormat::KebabCase | UsernameFormat::CamelKebabCase => format!("{}-{}", candidate_username, digit), - UsernameFormat::SnakeCase | UsernameFormat::CamelSnakeCase => format!("{}_{}", candidate_username, digit), + UsernameFormat::KebabCase + | UsernameFormat::CamelKebabCase => format!("{}-{}", candidate_username, digit), + UsernameFormat::SnakeCase + | UsernameFormat::CamelSnakeCase + | UsernameFormat::ScreamingSnakeCase => format!("{}_{}", candidate_username, digit), }; } @@ -99,10 +105,20 @@ fn random_digit() -> Option { #[cfg(test)] mod tests { + use std::collections::HashSet; use crate::util::generate_random_username::generate_random_username; #[test] fn test_base_case_success() { assert!(generate_random_username().len() > 0); } + + #[test] + fn generate_lots() { + let mut collection = HashSet::new(); + for _ in 0..100 { + collection.insert(generate_random_username()); + } + assert!(collection.len() > 50); // NB: Should be an easy bar to hit + } }