From 8fae6fb9fe83be4ff21d8f7c6808bce0697f214c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tristan=20Dani=C3=ABl=20Maat?= Date: Wed, 24 Jul 2024 18:19:53 +0200 Subject: [PATCH] feat: Add preferred username to user metadata --- src/zitadel.rs | 26 +++++++++++++++++++------- tests/e2e.rs | 26 ++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 7 deletions(-) diff --git a/src/zitadel.rs b/src/zitadel.rs index 9ae5020..91997d2 100644 --- a/src/zitadel.rs +++ b/src/zitadel.rs @@ -47,14 +47,26 @@ impl Zitadel { } for user in users { - let user_id = user.ldap_id.clone(); + let sync_status: Result<()> = { + let new_user_id = self + .client + .create_human_user(&self.config.famedly.organization_id, user.clone().into()) + .await?; + + self.client + .set_user_metadata( + Some(&self.config.famedly.organization_id), + new_user_id, + "preferred_username".to_owned(), + &user.preferred_username, + ) + .await?; + + Ok(()) + }; - if let Err(error) = self - .client - .create_human_user(&self.config.famedly.organization_id, user.into()) - .await - { - tracing::error!("Failed to sync user `{}`: {}", user_id, error); + if let Err(error) = sync_status { + tracing::error!("Failed to sync user `{}`: {}", user.ldap_id, error); }; } diff --git a/tests/e2e.rs b/tests/e2e.rs index a961a50..2eaadbd 100644 --- a/tests/e2e.rs +++ b/tests/e2e.rs @@ -37,6 +37,32 @@ async fn test_e2e_simple_sync() { .expect("could not query Zitadel users"); assert!(user.is_some()); + + if let Some(user) = user { + assert_eq!(user.user_name, "simple@famedly.de"); + + if let Some(Type::Human(user)) = user.r#type { + let profile = user.profile.expect("user lacks a profile"); + let phone = user.phone.expect("user lacks a phone number)"); + let email = user.email.expect("user lacks an email address"); + + assert_eq!(profile.first_name, "Bob"); + assert_eq!(profile.last_name, "Tables"); + assert_eq!(profile.display_name, "Tables, Bob"); + assert_eq!(phone.phone, "+12015550123"); + assert!(phone.is_phone_verified); + assert_eq!(email.email, "simple@famedly.de"); + assert!(email.is_email_verified); + } else { + panic!("user lacks details"); + } + + let preferred_username = zitadel + .get_user_metadata(None, &user.id, "preferred_username") + .await + .expect("could not get user metadata"); + assert_eq!(preferred_username, Some("Bobby".to_owned())); + }; } #[test(tokio::test)]