From c603d599080c68bae4cefb6ee106827af3803e6c Mon Sep 17 00:00:00 2001 From: oiupoyt Date: Sat, 29 Aug 2026 06:21:11 +0530 Subject: [PATCH] fix(auth): ensure custom offline account sets default user and add unit tests --- .../src/view/onboarding/account.rs | 3 +- packages/oneclient_auth/src/store.rs | 55 +++++++++++++++++-- 2 files changed, 51 insertions(+), 7 deletions(-) diff --git a/packages/oneclient_app/src/view/onboarding/account.rs b/packages/oneclient_app/src/view/onboarding/account.rs index f6ed37fa..01010ad5 100644 --- a/packages/oneclient_app/src/view/onboarding/account.rs +++ b/packages/oneclient_app/src/view/onboarding/account.rs @@ -130,10 +130,11 @@ impl Component for OnboardingAccount { let add_offline_nav = add_offline.clone(); let offline_name_nav = offline_name.clone(); + let is_editing_nav = is_editing.clone(); let account_clone = account.clone(); let on_next = move |_| { - if account_clone.is_none() { + if account_clone.is_none() || *is_editing_nav.read() { let name_val = offline_name_nav.read().trim().to_string(); let target = if name_val.is_empty() { "Player".to_string() diff --git a/packages/oneclient_auth/src/store.rs b/packages/oneclient_auth/src/store.rs index 4f03b338..c670f1b0 100644 --- a/packages/oneclient_auth/src/store.rs +++ b/packages/oneclient_auth/src/store.rs @@ -109,9 +109,7 @@ impl CredentialsStore { .find(|u| u.username.eq_ignore_ascii_case(&username)) .cloned() { - if self.default_user.is_none() { - self.default_user = Some(existing.id); - } + self.default_user = Some(existing.id); return Ok(existing); } } @@ -119,9 +117,7 @@ impl CredentialsStore { let account = offline_account(username); let id = account.id; self.users.insert(id, account.clone()); - if self.default_user.is_none() { - self.default_user = Some(id); - } + self.default_user = Some(id); Ok(account) } @@ -204,3 +200,50 @@ pub(crate) fn is_transient_auth_error(err: &AuthError) -> bool { if source.is_connect() || source.is_timeout() ) } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_offline_account_creation_sets_default() { + let mut store = CredentialsStore { + users: HashMap::new(), + default_user: None, + }; + + let account = store.insert_offline_account("Player".to_string()).unwrap(); + assert_eq!(account.username, "Player"); + assert_eq!(store.default_user, Some(account.id)); + assert_eq!(store.users.len(), 1); + } + + #[test] + fn test_custom_username_switches_default() { + let mut store = CredentialsStore { + users: HashMap::new(), + default_user: None, + }; + + let p1 = store.insert_offline_account("Player".to_string()).unwrap(); + assert_eq!(store.default_user, Some(p1.id)); + + let p2 = store.insert_offline_account("Steve".to_string()).unwrap(); + assert_eq!(store.default_user, Some(p2.id)); + assert_eq!(store.users.len(), 2); + } + + #[test] + fn test_case_insensitive_username_reuse() { + let mut store = CredentialsStore { + users: HashMap::new(), + default_user: None, + }; + + let p1 = store.insert_offline_account("Steve".to_string()).unwrap(); + let p2 = store.insert_offline_account("steve".to_string()).unwrap(); + assert_eq!(p1.id, p2.id); + assert_eq!(store.users.len(), 1); + assert_eq!(store.default_user, Some(p1.id)); + } +}