diff --git a/src/main/kotlin/com/mparticle/kits/RoktKit.kt b/src/main/kotlin/com/mparticle/kits/RoktKit.kt index 5ce6f35..0897398 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,28 +383,28 @@ class RoktKit : } private fun getStringForIdentity(identityType: IdentityType): String = when (identityType) { - IdentityType.Other -> "emailsha256" - IdentityType.CustomerId -> "customerid" - IdentityType.Facebook -> "facebook" - IdentityType.Twitter -> "twitter" - IdentityType.Google -> "google" - IdentityType.Microsoft -> "microsoft" - IdentityType.Yahoo -> "yahoo" - IdentityType.Email -> "email" - IdentityType.Alias -> "alias" - IdentityType.FacebookCustomAudienceId -> "facebookcustomaudienceid" - IdentityType.Other2 -> "other2" - IdentityType.Other3 -> "other3" - IdentityType.Other4 -> "other4" - IdentityType.Other5 -> "other5" - IdentityType.Other6 -> "other6" - IdentityType.Other7 -> "other7" - IdentityType.Other8 -> "other8" - IdentityType.Other9 -> "other9" - IdentityType.Other10 -> "other10" - IdentityType.MobileNumber -> "mobilenumber" - IdentityType.PhoneNumber2 -> "phonenumber2" - IdentityType.PhoneNumber3 -> "phonenumber3" + IdentityType.Other -> "Other" + IdentityType.CustomerId -> "CustomerId" + IdentityType.Facebook -> "Facebook" + IdentityType.Twitter -> "Twitter" + IdentityType.Google -> "Google" + IdentityType.Microsoft -> "Microsoft" + IdentityType.Yahoo -> "Yahoo" + IdentityType.Email -> "Email" + IdentityType.Alias -> "Alias" + IdentityType.FacebookCustomAudienceId -> "FacebookCustomAudienceId" + IdentityType.Other2 -> "Other2" + IdentityType.Other3 -> "Other3" + IdentityType.Other4 -> "Other4" + IdentityType.Other5 -> "Other5" + IdentityType.Other6 -> "Other6" + IdentityType.Other7 -> "Other7" + IdentityType.Other8 -> "Other8" + IdentityType.Other9 -> "Other9" + IdentityType.Other10 -> "Other10" + IdentityType.MobileNumber -> "MobileNumber" + IdentityType.PhoneNumber2 -> "PhoneNumber2" + IdentityType.PhoneNumber3 -> "PhoneNumber3" else -> "" } @@ -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..1124cc9 100644 --- a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt +++ b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt @@ -152,7 +152,7 @@ class RoktKitTests { assertTrue(result.containsKey("key1")) assertTrue(result.containsKey("key2")) assertTrue(result.containsKey("key3")) - assertTrue(result.containsKey("email")) + assertTrue(result.containsKey("Email")) } @Test @@ -165,7 +165,7 @@ class RoktKitTests { "key1" to "value1", "key2" to "value2", "key3" to "value3", - "email" to "abc@gmail.com", + "Email" to "abc@gmail.com", ) val method: Method = RoktKit::class.java.getDeclaredMethod( "addIdentityAttributes", @@ -179,13 +179,13 @@ class RoktKitTests { assertTrue(result.containsKey("key1")) assertTrue(result.containsKey("key2")) assertTrue(result.containsKey("key3")) - assertTrue(result.containsKey("email")) + assertTrue(result.containsKey("Email")) assertEquals( mapOf( "key1" to "value1", "key2" to "value2", "key3" to "value3", - "email" to "TestEmail@gamil.com", + "Email" to "TestEmail@gamil.com", ), result, ) @@ -217,7 +217,7 @@ class RoktKitTests { method.isAccessible = true val result = method.invoke(roktKit, null, mockFilterUser) as Map assertEquals(1, result.size) - assertEquals(mapOf("email" to "TestEmail@gamil.com"), result) + assertEquals(mapOf("Email" to "TestEmail@gamil.com"), result) } @Test @@ -264,10 +264,72 @@ class RoktKitTests { assertTrue(result.containsKey("key1")) assertTrue(result.containsKey("key2")) assertTrue(result.containsKey("key3")) - assertTrue(result.containsKey("email")) + assertTrue(result.containsKey("Email")) + 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("emailsha256")) } + @Test + fun test_addIdentityAttributes_When_userIdentities_UNASSIGNED_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, "UNASSIGNED") + 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 testSetSdkWrapper_correctlySetsRoktFramework() { mockkObject(Rokt) @@ -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)