diff --git a/src/main/kotlin/com/mparticle/kits/RoktKit.kt b/src/main/kotlin/com/mparticle/kits/RoktKit.kt index 5ce6f35..7c3752a 100644 --- a/src/main/kotlin/com/mparticle/kits/RoktKit.kt +++ b/src/main/kotlin/com/mparticle/kits/RoktKit.kt @@ -57,6 +57,7 @@ class RoktKit : Rokt.RoktCallback { private var applicationContext: Context? = null private var mpRoktEventCallback: MpRoktEventCallback? = null + private var hashedEmailUserIdentityType: String? = null override fun getName(): String = NAME override fun getInstance(): RoktKit = this @@ -70,6 +71,7 @@ class RoktKit : if (KitUtils.isEmpty(roktTagId)) { throwOnKitCreateError(NO_ROKT_ACCOUNT_ID) } + hashedEmailUserIdentityType = settings[HASHED_EMAIL_USER_IDENTITY_TYPE] applicationContext?.let { val manager = context.packageManager if (roktTagId != null) { @@ -343,7 +345,11 @@ class RoktKit : if (filterUser != null) { for ((identityNumberKey, identityValue) in filterUser.userIdentities) { val identityType = getStringForIdentity(identityNumberKey) - identityAttributes[identityType] = identityValue + if (identityType.equals(hashedEmailUserIdentityType)) { + identityAttributes["emailsha256"] = identityValue + } else { + identityAttributes[identityType] = identityValue + } } } if (attributes != null) { @@ -377,7 +383,7 @@ class RoktKit : } private fun getStringForIdentity(identityType: IdentityType): String = when (identityType) { - IdentityType.Other -> "emailsha256" + IdentityType.Other -> "other" IdentityType.CustomerId -> "customerid" IdentityType.Facebook -> "facebook" IdentityType.Twitter -> "twitter" @@ -413,6 +419,7 @@ class RoktKit : const val NAME = "Rokt" const val ROKT_ACCOUNT_ID = "accountId" + const val HASHED_EMAIL_USER_IDENTITY_TYPE = "hashedEmailUserIdentityType" const val MPID = "mpid" const val NO_ROKT_ACCOUNT_ID = "No Rokt account ID provided, can't initialize kit." const val NO_APP_VERSION_FOUND = "No App version found, can't initialize kit." diff --git a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt index 238b1aa..3783d70 100644 --- a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt +++ b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt @@ -265,7 +265,69 @@ class RoktKitTests { assertTrue(result.containsKey("key2")) assertTrue(result.containsKey("key3")) assertTrue(result.containsKey("email")) - assertTrue(result.containsKey("emailsha256")) + assertTrue(result.containsKey("other")) + } + + @Test + fun test_addIdentityAttributes_When_userIdentities_Other_map_To_Identity() { + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities.put(IdentityType.Email, "TestEmail@gamil.com") + userIdentities.put(IdentityType.Other, "hashedEmail@123.com") + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + val attributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + ) + val hashedField = RoktKit::class.java.getDeclaredField("hashedEmailUserIdentityType") + hashedField.isAccessible = true + hashedField.set(roktKit, "Other") + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + Map::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + assertEquals(5, result.size) + + assertTrue(result.containsKey("key1")) + assertTrue(result.containsKey("key2")) + assertTrue(result.containsKey("key3")) + assertTrue(result.containsKey("email")) + assertTrue(result.containsKey("other")) + } + + @Test + fun test_addIdentityAttributes_When_userIdentities_Unknown_map_To_Identity() { + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities.put(IdentityType.Email, "TestEmail@gamil.com") + userIdentities.put(IdentityType.Other, "hashedEmail@123.com") + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + val attributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + ) + val hashedField = RoktKit::class.java.getDeclaredField("hashedEmailUserIdentityType") + hashedField.isAccessible = true + hashedField.set(roktKit, "Unknown") + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + Map::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + assertEquals(5, result.size) + + assertTrue(result.containsKey("key1")) + assertTrue(result.containsKey("key2")) + assertTrue(result.containsKey("key3")) + assertTrue(result.containsKey("email")) + assertTrue(result.containsKey("other")) } @Test @@ -672,7 +734,7 @@ class RoktKitTests { override fun setIntegrationAttributes(kitId: Int, integrationAttributes: Map) {} - override fun getIntegrationAttributes(kitId: Int): Map? = null + override fun getIntegrationAttributes(i: Int): Map? = null override fun getCurrentActivity(): WeakReference = WeakReference(activity)