Skip to content

Commit 2aa092a

Browse files
handle the UNASSIGNED default scenario
1 parent 7f2c514 commit 2aa092a

2 files changed

Lines changed: 116 additions & 5 deletions

File tree

android-kit-base/src/main/java/com/mparticle/kits/KitManagerImpl.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1554,13 +1554,19 @@ else if (hashedEmailMismatch && existingHashedEmail != null) {
15541554
identityBuilder.email(email);
15551555
}
15561556
if (hashedEmailMismatch && kitConfiguration != null) {
1557-
MParticle.IdentityType type;
1557+
MParticle.IdentityType type = null;
15581558
try {
1559-
type = MParticle.IdentityType.valueOf(kitConfiguration.getHashedEmailUserIdentityType());
1560-
} catch (IllegalArgumentException | NullPointerException e) {
1561-
type = MParticle.IdentityType.Other; // fallback if null or invalid
1559+
String identityTypeStr = kitConfiguration.getHashedEmailUserIdentityType();
1560+
if (identityTypeStr != null && !identityTypeStr.equalsIgnoreCase("UNASSIGNED")) {
1561+
type = MParticle.IdentityType.valueOf(identityTypeStr);
1562+
}
1563+
} catch (IllegalArgumentException e) {
1564+
type = MParticle.IdentityType.Other; // fallback if invalid
1565+
}
1566+
1567+
if (type != null) {
1568+
identityBuilder.userIdentity(type, hashedEmail);
15621569
}
1563-
identityBuilder.userIdentity(type, hashedEmail);
15641570
}
15651571

15661572
IdentityApiRequest identityRequest = identityBuilder.build();

android-kit-base/src/test/kotlin/com/mparticle/kits/KitManagerImplTest.kt

Lines changed: 105 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1407,6 +1407,111 @@ class KitManagerImplTest {
14071407
verify(runnable).run()
14081408
}
14091409

1410+
@Test
1411+
fun testConfirmHashedEmail_When_HashedEmailUserIdentityType_Is_Other3(){
1412+
var runnable: Runnable = mock(Runnable::class.java)
1413+
var user: MParticleUser = mock(MParticleUser::class.java)
1414+
val instance = MockMParticle()
1415+
val sideloadedKit = mock(MPSideloadedKit::class.java)
1416+
val kitId = 6000000
1417+
1418+
val configJSONObj = JSONObject().apply {
1419+
put("id", kitId)
1420+
}
1421+
val mockedKitConfig = KitConfiguration.createKitConfiguration(configJSONObj)
1422+
1423+
`when`(mockedKitConfig.hashedEmailUserIdentityType).thenReturn("Other3")
1424+
`when`(sideloadedKit.configuration).thenReturn(mockedKitConfig)
1425+
val identityApi = mock(IdentityApi::class.java)
1426+
val oldHashedEmail = "hashed_old@example.com"
1427+
val mockTask = mock(MParticleTask::class.java) as MParticleTask<IdentityApiResult>
1428+
`when`(identityApi.identify(any())).thenReturn(mockTask)
1429+
val identities: MutableMap<MParticle.IdentityType, String> = HashMap()
1430+
identities.put(MParticle.IdentityType.Other, oldHashedEmail)
1431+
`when`(user.userIdentities).thenReturn(identities)
1432+
instance.setIdentityApi(identityApi)
1433+
val settingsMap = hashMapOf(
1434+
"placementAttributesMapping" to """
1435+
[
1436+
// add placement attributes here if needed
1437+
]
1438+
""".trimIndent(),
1439+
"hashedEmailUserIdentityType" to "Other3"
1440+
)
1441+
val field = KitConfiguration::class.java.getDeclaredField("settings")
1442+
field.isAccessible = true
1443+
field.set(mockedKitConfig, settingsMap)
1444+
1445+
val options = MParticleOptions.builder(MockContext())
1446+
.sideloadedKits(mutableListOf(sideloadedKit) as List<SideloadedKit>).build()
1447+
val manager: KitManagerImpl = MockKitManagerImpl(options)
1448+
val method: Method = KitManagerImpl::class.java.getDeclaredMethod(
1449+
"confirmEmail",
1450+
String::class.java,
1451+
String::class.java,
1452+
MParticleUser::class.java,
1453+
IdentityApi::class.java,
1454+
KitConfiguration::class.java,
1455+
Runnable::class.java
1456+
)
1457+
method.isAccessible = true
1458+
val result = method.invoke(manager, "", "hashed_Test@gmail.com", user, identityApi, mockedKitConfig, runnable)
1459+
verify(mockTask).addSuccessListener(any())
1460+
}
1461+
1462+
1463+
@Test
1464+
fun testConfirmHashedEmail_When_HashedEmailUserIdentityType_Is_UNASSIGNED(){
1465+
var runnable: Runnable = mock(Runnable::class.java)
1466+
var user: MParticleUser = mock(MParticleUser::class.java)
1467+
val instance = MockMParticle()
1468+
val sideloadedKit = mock(MPSideloadedKit::class.java)
1469+
val kitId = 6000000
1470+
1471+
val configJSONObj = JSONObject().apply {
1472+
put("id", kitId)
1473+
}
1474+
val mockedKitConfig = KitConfiguration.createKitConfiguration(configJSONObj)
1475+
1476+
`when`(mockedKitConfig.hashedEmailUserIdentityType).thenReturn("UNASSIGNED")
1477+
`when`(sideloadedKit.configuration).thenReturn(mockedKitConfig)
1478+
val identityApi = mock(IdentityApi::class.java)
1479+
val oldHashedEmail = "hashed_old@example.com"
1480+
val mockTask = mock(MParticleTask::class.java) as MParticleTask<IdentityApiResult>
1481+
`when`(identityApi.identify(any())).thenReturn(mockTask)
1482+
val identities: MutableMap<MParticle.IdentityType, String> = HashMap()
1483+
identities.put(MParticle.IdentityType.Other, oldHashedEmail)
1484+
`when`(user.userIdentities).thenReturn(identities)
1485+
instance.setIdentityApi(identityApi)
1486+
val settingsMap = hashMapOf(
1487+
"placementAttributesMapping" to """
1488+
[
1489+
// add placement attributes here if needed
1490+
]
1491+
""".trimIndent(),
1492+
"hashedEmailUserIdentityType" to "UNASSIGNED"
1493+
)
1494+
val field = KitConfiguration::class.java.getDeclaredField("settings")
1495+
field.isAccessible = true
1496+
field.set(mockedKitConfig, settingsMap)
1497+
1498+
val options = MParticleOptions.builder(MockContext())
1499+
.sideloadedKits(mutableListOf(sideloadedKit) as List<SideloadedKit>).build()
1500+
val manager: KitManagerImpl = MockKitManagerImpl(options)
1501+
val method: Method = KitManagerImpl::class.java.getDeclaredMethod(
1502+
"confirmEmail",
1503+
String::class.java,
1504+
String::class.java,
1505+
MParticleUser::class.java,
1506+
IdentityApi::class.java,
1507+
KitConfiguration::class.java,
1508+
Runnable::class.java
1509+
)
1510+
method.isAccessible = true
1511+
val result = method.invoke(manager, "", "hashed_Test@gmail.com", user, identityApi, mockedKitConfig, runnable)
1512+
verify(mockTask).addSuccessListener(any())
1513+
}
1514+
14101515
@Test
14111516
fun testGetValueIgnoreCase_keyExistsDifferentCase() {
14121517
val sideloadedKit = mock(MPSideloadedKit::class.java)

0 commit comments

Comments
 (0)