From a451352318b0a3892025d5c3dab1a610950cd950 Mon Sep 17 00:00:00 2001 From: Nickolas Dimitrakas Date: Mon, 15 Dec 2025 14:28:44 -0500 Subject: [PATCH 1/5] feat: add device identifiers to attributes --- build.gradle | 1 + src/main/kotlin/com/mparticle/kits/RoktKit.kt | 10 ++++ .../kotlin/com/mparticle/kits/RoktKitTests.kt | 59 +++++++++++++++++++ 3 files changed, 70 insertions(+) diff --git a/build.gradle b/build.gradle index c626387..7eb6be2 100644 --- a/build.gradle +++ b/build.gradle @@ -73,6 +73,7 @@ dependencies { testImplementation files('libs/java-json.jar') testImplementation 'com.squareup.assertj:assertj-android:1.2.0' testImplementation ("io.mockk:mockk:1.13.4") + testImplementation 'org.mockito:mockito-inline:5.2.0' testImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-test:1.6.4' compileOnly 'androidx.compose.ui:ui' compileOnly 'androidx.compose.material:material' diff --git a/src/main/kotlin/com/mparticle/kits/RoktKit.kt b/src/main/kotlin/com/mparticle/kits/RoktKit.kt index 26c78a2..0f648ab 100644 --- a/src/main/kotlin/com/mparticle/kits/RoktKit.kt +++ b/src/main/kotlin/com/mparticle/kits/RoktKit.kt @@ -351,6 +351,15 @@ class RoktKit : } } } + + // GAID is only provided if advertising tracking is not limited + applicationContext?.let { context -> + val adIdInfo = com.mparticle.internal.MPUtility.getAdIdInfo(context) + if (adIdInfo != null && adIdInfo.advertiser == com.mparticle.internal.MPUtility.AdIdInfo.Advertiser.GOOGLE) { + identityAttributes[IDENTITY_TYPE_GAID] = adIdInfo.id + } + } + if (attributes != null) { attributes.putAll(identityAttributes) return attributes @@ -420,6 +429,7 @@ class RoktKit : const val ROKT_ACCOUNT_ID = "accountId" const val HASHED_EMAIL_USER_IDENTITY_TYPE = "hashedEmailUserIdentityType" const val MPID = "mpid" + const val IDENTITY_TYPE_GAID = "gaid" 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 5dd583e..92cd5fe 100644 --- a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt +++ b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt @@ -36,11 +36,15 @@ import org.json.JSONArray import org.json.JSONObject import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotEquals import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.mockito.Mockito import org.mockito.Mockito.mock +import org.mockito.Mockito.mockStatic +import org.mockito.Mockito.`when` +import org.mockito.ArgumentMatchers.any as mockitoAny import java.lang.ref.WeakReference import java.lang.reflect.Field import java.lang.reflect.Method @@ -1148,6 +1152,61 @@ class RoktKitTests { assertEquals("allowed_value", result["allowed_key"]) } + @Test + fun testAddIdentityAttributes_adds_GAID_when_available() { + // Test that GAID is added when MPUtility.getAdIdInfo returns valid Google advertiser + // Set applicationContext using reflection (required for GAID lookup) + val contextField = RoktKit::class.java.getDeclaredField("applicationContext") + contextField.isAccessible = true + contextField.set(roktKit, context) + + mockStatic(com.mparticle.internal.MPUtility::class.java).use { mockedMPUtility -> + // Create a mock AdIdInfo and set its fields using reflection + val mockAdIdInfo = mock(com.mparticle.internal.MPUtility.AdIdInfo::class.java) + + // Set the id field + val idField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("id") + idField.isAccessible = true + idField.set(mockAdIdInfo, "test-gaid-12345") + + // Set the advertiser field + val advertiserField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("advertiser") + advertiserField.isAccessible = true + advertiserField.set(mockAdIdInfo, com.mparticle.internal.MPUtility.AdIdInfo.Advertiser.GOOGLE) + + mockedMPUtility.`when` { + com.mparticle.internal.MPUtility.getAdIdInfo(mockitoAny(android.content.Context::class.java)) + }.thenReturn(mockAdIdInfo) + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities[IdentityType.Email] = "test@example.com" + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + + val attributes: MutableMap = mutableMapOf("existing_key" to "existing_value") + + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + MutableMap::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + + // Act + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + + // Assert + assertTrue("GAID should be present in result", result.containsKey("gaid")) + assertEquals("test-gaid-12345", result["gaid"]) + + // Verify user identities are still added + assertEquals("test@example.com", result["email"]) + + // Verify existing attributes are preserved + assertEquals("existing_value", result["existing_key"]) + } + } + internal inner class TestCoreCallbacks : CoreCallbacks { override fun isBackgrounded(): Boolean = false override fun getUserBucket(): Int = 0 From 7c7164749477941f0f16a3cd85e2a944196749c2 Mon Sep 17 00:00:00 2001 From: Nickolas Dimitrakas Date: Mon, 15 Dec 2025 15:56:51 -0500 Subject: [PATCH 2/5] add more test coverage --- .../kotlin/com/mparticle/kits/RoktKitTests.kt | 149 ++++++++++++++++++ 1 file changed, 149 insertions(+) diff --git a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt index 92cd5fe..a3a220a 100644 --- a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt +++ b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt @@ -1155,6 +1155,7 @@ class RoktKitTests { @Test fun testAddIdentityAttributes_adds_GAID_when_available() { // Test that GAID is added when MPUtility.getAdIdInfo returns valid Google advertiser + // Set applicationContext using reflection (required for GAID lookup) val contextField = RoktKit::class.java.getDeclaredField("applicationContext") contextField.isAccessible = true @@ -1207,6 +1208,154 @@ class RoktKitTests { } } + @Test + fun testAddIdentityAttributes_GAID_not_added_when_null() { + // Test that GAID is not added when MPUtility.getAdIdInfo returns null + + // Set applicationContext using reflection (required for GAID lookup) + val contextField = RoktKit::class.java.getDeclaredField("applicationContext") + contextField.isAccessible = true + contextField.set(roktKit, context) + + mockStatic(com.mparticle.internal.MPUtility::class.java).use { mockedMPUtility -> + // Mock getAdIdInfo to return null (ad tracking not available or not authorized) + mockedMPUtility.`when` { + com.mparticle.internal.MPUtility.getAdIdInfo(mockitoAny(android.content.Context::class.java)) + }.thenReturn(null) + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities[IdentityType.Email] = "test@example.com" + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + + val attributes: MutableMap = mutableMapOf() + + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + MutableMap::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + + // Act + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + + // Assert - GAID should NOT be present + assertFalse("GAID should not be present when getAdIdInfo returns null", result.containsKey("gaid")) + + // Other identities should still be added + assertTrue(result.containsKey("email")) + assertEquals("test@example.com", result["email"]) + } + } + + @Test + fun testAddIdentityAttributes_GAID_coexists_with_google_user_identity() { + // Test that GAID (gaid key) coexists with Google user identity (google key) + + // Set applicationContext using reflection (required for GAID lookup) + val contextField = RoktKit::class.java.getDeclaredField("applicationContext") + contextField.isAccessible = true + contextField.set(roktKit, context) + + mockStatic(com.mparticle.internal.MPUtility::class.java).use { mockedMPUtility -> + // Create a mock AdIdInfo and set its fields using reflection + val mockAdIdInfo = mock(com.mparticle.internal.MPUtility.AdIdInfo::class.java) + + val idField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("id") + idField.isAccessible = true + idField.set(mockAdIdInfo, "device-gaid-value") + + val advertiserField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("advertiser") + advertiserField.isAccessible = true + advertiserField.set(mockAdIdInfo, com.mparticle.internal.MPUtility.AdIdInfo.Advertiser.GOOGLE) + + mockedMPUtility.`when` { + com.mparticle.internal.MPUtility.getAdIdInfo(mockitoAny(android.content.Context::class.java)) + }.thenReturn(mockAdIdInfo) + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities[IdentityType.Email] = "test@example.com" + userIdentities[IdentityType.Google] = "user-google-identity" + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + + val attributes: MutableMap = mutableMapOf() + + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + MutableMap::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + + // Act + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + + // Assert - Both should be present with different keys and values + assertTrue(result.containsKey("google")) + assertEquals("user-google-identity", result["google"]) + + assertTrue(result.containsKey("gaid")) + assertEquals("device-gaid-value", result["gaid"]) + + // Verify they don't interfere with each other + assertNotEquals(result["google"], result["gaid"]) + } + } + + @Test + fun testAddIdentityAttributes_GAID_not_added_for_non_google_advertiser() { + // Test that GAID is NOT added when advertiser is not Google (e.g., Amazon Fire) + // Ensures we only add GAID for actual Google Advertising IDs + + // Set applicationContext using reflection (required for GAID lookup) + val contextField = RoktKit::class.java.getDeclaredField("applicationContext") + contextField.isAccessible = true + contextField.set(roktKit, context) + + mockStatic(com.mparticle.internal.MPUtility::class.java).use { mockedMPUtility -> + // Create a mock AdIdInfo with Amazon advertiser (not Google) + val mockAdIdInfo = mock(com.mparticle.internal.MPUtility.AdIdInfo::class.java) + + val idField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("id") + idField.isAccessible = true + idField.set(mockAdIdInfo, "amazon-ad-id-12345") + + val advertiserField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("advertiser") + advertiserField.isAccessible = true + advertiserField.set(mockAdIdInfo, com.mparticle.internal.MPUtility.AdIdInfo.Advertiser.AMAZON) + + mockedMPUtility.`when` { + com.mparticle.internal.MPUtility.getAdIdInfo(mockitoAny(android.content.Context::class.java)) + }.thenReturn(mockAdIdInfo) + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + val userIdentities = HashMap() + userIdentities[IdentityType.Email] = "test@example.com" + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(userIdentities) + + val attributes: MutableMap = mutableMapOf() + + val method: Method = RoktKit::class.java.getDeclaredMethod( + "addIdentityAttributes", + MutableMap::class.java, + FilteredMParticleUser::class.java, + ) + method.isAccessible = true + + // Act + val result = method.invoke(roktKit, attributes, mockFilterUser) as Map + + // Assert - GAID should NOT be added for Amazon advertiser + assertFalse("GAID should not be added for non-Google advertiser", result.containsKey("gaid")) + + // Other identities should still be added + assertTrue(result.containsKey("email")) + assertEquals("test@example.com", result["email"]) + } + } + internal inner class TestCoreCallbacks : CoreCallbacks { override fun isBackgrounded(): Boolean = false override fun getUserBucket(): Int = 0 From a765622307114786bd2efeb6b659dc5aa989848b Mon Sep 17 00:00:00 2001 From: Nickolas Dimitrakas Date: Mon, 15 Dec 2025 19:06:38 -0500 Subject: [PATCH 3/5] address @Mansi-mParticle comments Co-Authored-By: Mansi-mParticle <159845845+Mansi-mParticle@users.noreply.github.com> --- src/main/kotlin/com/mparticle/kits/RoktKit.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/kotlin/com/mparticle/kits/RoktKit.kt b/src/main/kotlin/com/mparticle/kits/RoktKit.kt index 0f648ab..02f5154 100644 --- a/src/main/kotlin/com/mparticle/kits/RoktKit.kt +++ b/src/main/kotlin/com/mparticle/kits/RoktKit.kt @@ -354,8 +354,8 @@ class RoktKit : // GAID is only provided if advertising tracking is not limited applicationContext?.let { context -> - val adIdInfo = com.mparticle.internal.MPUtility.getAdIdInfo(context) - if (adIdInfo != null && adIdInfo.advertiser == com.mparticle.internal.MPUtility.AdIdInfo.Advertiser.GOOGLE) { + val adIdInfo = MPUtility.getAdIdInfo(context) + if (adIdInfo != null && adIdInfo.advertiser == MPUtility.AdIdInfo.Advertiser.GOOGLE) { identityAttributes[IDENTITY_TYPE_GAID] = adIdInfo.id } } From ad4222e2643fce6e141e52dcaee596c7111d91bd Mon Sep 17 00:00:00 2001 From: Nickolas Dimitrakas Date: Mon, 15 Dec 2025 19:06:54 -0500 Subject: [PATCH 4/5] Update src/main/kotlin/com/mparticle/kits/RoktKit.kt Co-authored-by: Mansi-mParticle <159845845+Mansi-mParticle@users.noreply.github.com> --- src/main/kotlin/com/mparticle/kits/RoktKit.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/kotlin/com/mparticle/kits/RoktKit.kt b/src/main/kotlin/com/mparticle/kits/RoktKit.kt index 02f5154..1bf54d2 100644 --- a/src/main/kotlin/com/mparticle/kits/RoktKit.kt +++ b/src/main/kotlin/com/mparticle/kits/RoktKit.kt @@ -38,6 +38,8 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import java.lang.ref.WeakReference import java.math.BigDecimal +import com.mparticle.internal.MPUtility +import com.mparticle.internal.MPUtility.AdIdInfo const val ROKT_ATTRIBUTE_SANDBOX_MODE: String = "sandbox" From 597a07e87833ae397fb13bf9cf1096f0e8b651fd Mon Sep 17 00:00:00 2001 From: Nickolas Dimitrakas Date: Tue, 16 Dec 2025 10:24:46 -0500 Subject: [PATCH 5/5] address @jamesnrokt comments --- .../kotlin/com/mparticle/kits/RoktKitTests.kt | 101 +++++++++--------- 1 file changed, 51 insertions(+), 50 deletions(-) diff --git a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt index a3a220a..7305565 100644 --- a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt +++ b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt @@ -15,6 +15,7 @@ import com.mparticle.WrapperSdkVersion import com.mparticle.identity.IdentityApi import com.mparticle.internal.CoreCallbacks import com.mparticle.internal.CoreCallbacks.KitListener +import com.mparticle.internal.MPUtility import com.mparticle.kits.mocks.MockKitConfiguration import com.rokt.roktsdk.FulfillmentAttributes import com.rokt.roktsdk.Rokt @@ -1155,30 +1156,30 @@ class RoktKitTests { @Test fun testAddIdentityAttributes_adds_GAID_when_available() { // Test that GAID is added when MPUtility.getAdIdInfo returns valid Google advertiser - + // Set applicationContext using reflection (required for GAID lookup) val contextField = RoktKit::class.java.getDeclaredField("applicationContext") contextField.isAccessible = true contextField.set(roktKit, context) - - mockStatic(com.mparticle.internal.MPUtility::class.java).use { mockedMPUtility -> + + mockStatic(MPUtility::class.java).use { mockedMPUtility -> // Create a mock AdIdInfo and set its fields using reflection - val mockAdIdInfo = mock(com.mparticle.internal.MPUtility.AdIdInfo::class.java) - + val mockAdIdInfo = mock(MPUtility.AdIdInfo::class.java) + // Set the id field - val idField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("id") + val idField = MPUtility.AdIdInfo::class.java.getDeclaredField("id") idField.isAccessible = true idField.set(mockAdIdInfo, "test-gaid-12345") - + // Set the advertiser field - val advertiserField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("advertiser") + val advertiserField = MPUtility.AdIdInfo::class.java.getDeclaredField("advertiser") advertiserField.isAccessible = true - advertiserField.set(mockAdIdInfo, com.mparticle.internal.MPUtility.AdIdInfo.Advertiser.GOOGLE) - - mockedMPUtility.`when` { - com.mparticle.internal.MPUtility.getAdIdInfo(mockitoAny(android.content.Context::class.java)) + advertiserField.set(mockAdIdInfo, MPUtility.AdIdInfo.Advertiser.GOOGLE) + + mockedMPUtility.`when` { + MPUtility.getAdIdInfo(mockitoAny(Context::class.java)) }.thenReturn(mockAdIdInfo) - + val mockFilterUser = mock(FilteredMParticleUser::class.java) val userIdentities = HashMap() userIdentities[IdentityType.Email] = "test@example.com" @@ -1199,10 +1200,10 @@ class RoktKitTests { // Assert assertTrue("GAID should be present in result", result.containsKey("gaid")) assertEquals("test-gaid-12345", result["gaid"]) - + // Verify user identities are still added assertEquals("test@example.com", result["email"]) - + // Verify existing attributes are preserved assertEquals("existing_value", result["existing_key"]) } @@ -1216,13 +1217,13 @@ class RoktKitTests { val contextField = RoktKit::class.java.getDeclaredField("applicationContext") contextField.isAccessible = true contextField.set(roktKit, context) - - mockStatic(com.mparticle.internal.MPUtility::class.java).use { mockedMPUtility -> + + mockStatic(MPUtility::class.java).use { mockedMPUtility -> // Mock getAdIdInfo to return null (ad tracking not available or not authorized) - mockedMPUtility.`when` { - com.mparticle.internal.MPUtility.getAdIdInfo(mockitoAny(android.content.Context::class.java)) + mockedMPUtility.`when` { + MPUtility.getAdIdInfo(mockitoAny(Context::class.java)) }.thenReturn(null) - + val mockFilterUser = mock(FilteredMParticleUser::class.java) val userIdentities = HashMap() userIdentities[IdentityType.Email] = "test@example.com" @@ -1242,7 +1243,7 @@ class RoktKitTests { // Assert - GAID should NOT be present assertFalse("GAID should not be present when getAdIdInfo returns null", result.containsKey("gaid")) - + // Other identities should still be added assertTrue(result.containsKey("email")) assertEquals("test@example.com", result["email"]) @@ -1252,28 +1253,28 @@ class RoktKitTests { @Test fun testAddIdentityAttributes_GAID_coexists_with_google_user_identity() { // Test that GAID (gaid key) coexists with Google user identity (google key) - + // Set applicationContext using reflection (required for GAID lookup) val contextField = RoktKit::class.java.getDeclaredField("applicationContext") contextField.isAccessible = true contextField.set(roktKit, context) - - mockStatic(com.mparticle.internal.MPUtility::class.java).use { mockedMPUtility -> + + mockStatic(MPUtility::class.java).use { mockedMPUtility -> // Create a mock AdIdInfo and set its fields using reflection - val mockAdIdInfo = mock(com.mparticle.internal.MPUtility.AdIdInfo::class.java) - - val idField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("id") + val mockAdIdInfo = mock(MPUtility.AdIdInfo::class.java) + + val idField = MPUtility.AdIdInfo::class.java.getDeclaredField("id") idField.isAccessible = true idField.set(mockAdIdInfo, "device-gaid-value") - - val advertiserField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("advertiser") + + val advertiserField = MPUtility.AdIdInfo::class.java.getDeclaredField("advertiser") advertiserField.isAccessible = true - advertiserField.set(mockAdIdInfo, com.mparticle.internal.MPUtility.AdIdInfo.Advertiser.GOOGLE) - - mockedMPUtility.`when` { - com.mparticle.internal.MPUtility.getAdIdInfo(mockitoAny(android.content.Context::class.java)) + advertiserField.set(mockAdIdInfo, MPUtility.AdIdInfo.Advertiser.GOOGLE) + + mockedMPUtility.`when` { + MPUtility.getAdIdInfo(mockitoAny(Context::class.java)) }.thenReturn(mockAdIdInfo) - + val mockFilterUser = mock(FilteredMParticleUser::class.java) val userIdentities = HashMap() userIdentities[IdentityType.Email] = "test@example.com" @@ -1295,10 +1296,10 @@ class RoktKitTests { // Assert - Both should be present with different keys and values assertTrue(result.containsKey("google")) assertEquals("user-google-identity", result["google"]) - + assertTrue(result.containsKey("gaid")) assertEquals("device-gaid-value", result["gaid"]) - + // Verify they don't interfere with each other assertNotEquals(result["google"], result["gaid"]) } @@ -1308,28 +1309,28 @@ class RoktKitTests { fun testAddIdentityAttributes_GAID_not_added_for_non_google_advertiser() { // Test that GAID is NOT added when advertiser is not Google (e.g., Amazon Fire) // Ensures we only add GAID for actual Google Advertising IDs - + // Set applicationContext using reflection (required for GAID lookup) val contextField = RoktKit::class.java.getDeclaredField("applicationContext") contextField.isAccessible = true contextField.set(roktKit, context) - - mockStatic(com.mparticle.internal.MPUtility::class.java).use { mockedMPUtility -> + + mockStatic(MPUtility::class.java).use { mockedMPUtility -> // Create a mock AdIdInfo with Amazon advertiser (not Google) - val mockAdIdInfo = mock(com.mparticle.internal.MPUtility.AdIdInfo::class.java) - - val idField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("id") + val mockAdIdInfo = mock(MPUtility.AdIdInfo::class.java) + + val idField = MPUtility.AdIdInfo::class.java.getDeclaredField("id") idField.isAccessible = true idField.set(mockAdIdInfo, "amazon-ad-id-12345") - - val advertiserField = com.mparticle.internal.MPUtility.AdIdInfo::class.java.getDeclaredField("advertiser") + + val advertiserField = MPUtility.AdIdInfo::class.java.getDeclaredField("advertiser") advertiserField.isAccessible = true - advertiserField.set(mockAdIdInfo, com.mparticle.internal.MPUtility.AdIdInfo.Advertiser.AMAZON) - - mockedMPUtility.`when` { - com.mparticle.internal.MPUtility.getAdIdInfo(mockitoAny(android.content.Context::class.java)) + advertiserField.set(mockAdIdInfo, MPUtility.AdIdInfo.Advertiser.AMAZON) + + mockedMPUtility.`when` { + MPUtility.getAdIdInfo(mockitoAny(Context::class.java)) }.thenReturn(mockAdIdInfo) - + val mockFilterUser = mock(FilteredMParticleUser::class.java) val userIdentities = HashMap() userIdentities[IdentityType.Email] = "test@example.com" @@ -1349,7 +1350,7 @@ class RoktKitTests { // Assert - GAID should NOT be added for Amazon advertiser assertFalse("GAID should not be added for non-Google advertiser", result.containsKey("gaid")) - + // Other identities should still be added assertTrue(result.containsKey("email")) assertEquals("test@example.com", result["email"])