From 25d61527dd8a40c0adbf4421f2acc077842c1b73 Mon Sep 17 00:00:00 2001 From: Silviu Petrescu Date: Fri, 15 May 2026 15:46:22 +0100 Subject: [PATCH 1/3] Add flatUsername attribute to UserAttributes builder Add a new 'flatusername' attribute to the UserAttributes builder class, following the existing pattern for built-in attributes. Updated SignUpEmailPasswordAttributesTest to exercise the new attribute. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- .../microsoft/identity/nativeauth/UserAttributes.kt | 10 ++++++++++ .../nativeauth/SignUpEmailPasswordAttributesTest.kt | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/msal/src/main/java/com/microsoft/identity/nativeauth/UserAttributes.kt b/msal/src/main/java/com/microsoft/identity/nativeauth/UserAttributes.kt index 099f4616e0..b43d870cc6 100644 --- a/msal/src/main/java/com/microsoft/identity/nativeauth/UserAttributes.kt +++ b/msal/src/main/java/com/microsoft/identity/nativeauth/UserAttributes.kt @@ -40,6 +40,7 @@ class UserAttributes(internal val userAttributes: Map) { private const val STATE = "state" private const val STREET_ADDRESS = "streetAddress" private const val SURNAME = "surname" + private const val FLAT_USERNAME = "flatusername" } private val userAttributes = mutableMapOf() @@ -125,6 +126,15 @@ class UserAttributes(internal val userAttributes: Map) { return this } + /** + * Sets the flat username for the user + * @param flatUsername: Flat username for the user + */ + fun flatUsername(flatUsername: String): Builder { + userAttributes[FLAT_USERNAME] = flatUsername + return this + } + /** * Sets any custom attribute for the use * @param key: Name of the attribute diff --git a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/nativeauth/SignUpEmailPasswordAttributesTest.kt b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/nativeauth/SignUpEmailPasswordAttributesTest.kt index 5a6b3c7cd9..3cf10cf745 100644 --- a/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/nativeauth/SignUpEmailPasswordAttributesTest.kt +++ b/msal/src/test/java/com/microsoft/identity/client/e2e/tests/network/nativeauth/SignUpEmailPasswordAttributesTest.kt @@ -68,7 +68,7 @@ class SignUpEmailPasswordAttributesTest : NativeAuthPublicClientApplicationAbstr retryOperation { runBlocking { val user = tempEmailApi.generateRandomEmailAddressLocally() - val attributes = UserAttributes.Builder().country("Ireland").city("Dublin").build() + val attributes = UserAttributes.Builder().country("Ireland").city("Dublin").flatUsername("flatusername").build() val param = NativeAuthSignUpParameters(username = user) param.password = getSafePassword().toCharArray() From fe33a072c724c5aa48128d14a29107769ba592ea Mon Sep 17 00:00:00 2001 From: Silviu Petrescu Date: Fri, 15 May 2026 17:39:15 +0100 Subject: [PATCH 2/3] Add unit tests for flatUsername in Kotlin and Java test files Adds enabled unit tests verifying the flatUsername builder method produces the correct map key and works alongside other attributes. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- ...veAuthPublicClientApplicationJavaTest.java | 20 +++++++++++++++++++ ...veAuthPublicClientApplicationKotlinTest.kt | 20 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationJavaTest.java b/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationJavaTest.java index 2a6d4c1b52..b1dec8f018 100644 --- a/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationJavaTest.java +++ b/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationJavaTest.java @@ -3192,6 +3192,26 @@ public void testSignUpInvalidEmailReturnsError() throws ExecutionException, Inte assertTrue(signUpResult instanceof SignUpError); assertTrue(((SignUpError) signUpResult).isInvalidUsername()); } + + @Test + public void testUserAttributesFlatUsernameBuilder() { + UserAttributes attrs = new UserAttributes.Builder() + .flatUsername("testuser") + .build(); + assertEquals("testuser", attrs.getUserAttributes().get("flatusername")); + } + + @Test + public void testUserAttributesFlatUsernameWithOtherAttributes() { + UserAttributes attrs = new UserAttributes.Builder() + .flatUsername("testuser") + .displayName("Test User") + .city("Seattle") + .build(); + assertEquals("testuser", attrs.getUserAttributes().get("flatusername")); + assertEquals("Test User", attrs.getUserAttributes().get("displayName")); + assertEquals("Seattle", attrs.getUserAttributes().get("city")); + } } abstract class TestCallback { diff --git a/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationKotlinTest.kt b/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationKotlinTest.kt index a78281b15a..347903148d 100644 --- a/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationKotlinTest.kt +++ b/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationKotlinTest.kt @@ -3042,4 +3042,24 @@ class NativeAuthPublicClientApplicationKotlinTest(private val allowPII: Boolean) val submitChallengeResult = nextState4.submitChallenge(code) assertResult(submitChallengeResult) } + + @Test + fun testUserAttributesFlatUsernameBuilder() { + val attrs = UserAttributes.Builder() + .flatUsername("testuser") + .build() + assertEquals("testuser", attrs.userAttributes["flatusername"]) + } + + @Test + fun testUserAttributesFlatUsernameWithOtherAttributes() { + val attrs = UserAttributes.Builder() + .flatUsername("testuser") + .displayName("Test User") + .city("Seattle") + .build() + assertEquals("testuser", attrs.userAttributes["flatusername"]) + assertEquals("Test User", attrs.userAttributes["displayName"]) + assertEquals("Seattle", attrs.userAttributes["city"]) + } } From 2efdffb0d58499ed419552e2402f87e8e9dbf1ad Mon Sep 17 00:00:00 2001 From: Silviu Petrescu Date: Fri, 15 May 2026 18:19:15 +0100 Subject: [PATCH 3/3] Removed tests as getUserAttributes is not public --- ...iveAuthPublicClientApplicationJavaTest.java | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationJavaTest.java b/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationJavaTest.java index b1dec8f018..6eae17a369 100644 --- a/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationJavaTest.java +++ b/msal/src/test/java/com/microsoft/identity/nativeauth/NativeAuthPublicClientApplicationJavaTest.java @@ -3193,25 +3193,7 @@ public void testSignUpInvalidEmailReturnsError() throws ExecutionException, Inte assertTrue(((SignUpError) signUpResult).isInvalidUsername()); } - @Test - public void testUserAttributesFlatUsernameBuilder() { - UserAttributes attrs = new UserAttributes.Builder() - .flatUsername("testuser") - .build(); - assertEquals("testuser", attrs.getUserAttributes().get("flatusername")); - } - @Test - public void testUserAttributesFlatUsernameWithOtherAttributes() { - UserAttributes attrs = new UserAttributes.Builder() - .flatUsername("testuser") - .displayName("Test User") - .city("Seattle") - .build(); - assertEquals("testuser", attrs.getUserAttributes().get("flatusername")); - assertEquals("Test User", attrs.getUserAttributes().get("displayName")); - assertEquals("Seattle", attrs.getUserAttributes().get("city")); - } } abstract class TestCallback {