diff --git a/src/main/kotlin/com/mparticle/kits/RoktKit.kt b/src/main/kotlin/com/mparticle/kits/RoktKit.kt index 26c78a2..ea45d33 100644 --- a/src/main/kotlin/com/mparticle/kits/RoktKit.kt +++ b/src/main/kotlin/com/mparticle/kits/RoktKit.kt @@ -248,7 +248,7 @@ class RoktKit : val userAttributes = mutableMapOf() for ((key, value) in attributes) { val hashKey = KitUtils.hashForFiltering(key) - if (!kitConfiguration.mUserAttributeFilters.get(hashKey)) { + if (kitConfiguration.mUserAttributeFilters.get(hashKey, true)) { userAttributes[key] = value } } diff --git a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt index 5dd583e..b5c7c07 100644 --- a/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt +++ b/src/test/kotlin/com/mparticle/kits/RoktKitTests.kt @@ -359,7 +359,7 @@ class RoktKitTests { val filteredKey: String = KitUtils.hashForFiltering("ShouldFilter").toString() val filteredKey2: String = KitUtils.hashForFiltering("ShouldFilter_key_2").toString() jsonObject.put(filteredKey, 0) - jsonObject.put(filteredKey2, 1) + jsonObject.put(filteredKey2, 0) } catch (e: Exception) { println("Exception occurred: ${e.message}") } @@ -402,6 +402,81 @@ class RoktKitTests { unmockkObject(Rokt) } + @Test + fun test_prepareFinalAttributes_includesAttributeWhenFilterValueIsTrue() { + // Arrange + mockkObject(Rokt) + val capturedAttributesSlot = slot>() + every { + Rokt.execute( + any(), + capture(capturedAttributesSlot), + any(), + null, + null, + null, + ) + } just runs + + val mockFilterUser = mock(FilteredMParticleUser::class.java) + Mockito.`when`(mockFilterUser.userIdentities).thenReturn(HashMap()) + Mockito.`when`(mockFilterUser.id).thenReturn(12345L) + + val userAttributes = HashMap() + userAttributes["attr_non_null_string"] = "value" + userAttributes["attr_null"] = null + userAttributes["attr_non_string"] = 123 + userAttributes["user_key"] = "1231545" + Mockito.`when`(mockFilterUser.userAttributes).thenReturn(userAttributes) + // Set up the configuration with our test filters + val jsonObject = JSONObject() + try { + val filteredKey: String = KitUtils.hashForFiltering("ShouldFilter").toString() + val filteredKey2: String = KitUtils.hashForFiltering("ShouldFilter_key_2").toString() + jsonObject.put(filteredKey, 1) + jsonObject.put(filteredKey2, 0) + } catch (e: Exception) { + println("Exception occurred: ${e.message}") + } + val json = JSONObject() + json.put("ua", jsonObject) + roktKit.configuration = MockKitConfiguration.createKitConfiguration(JSONObject().put("hs", json)) + val inputAttributes: Map = mapOf( + "key1" to "value1", + "key2" to "value2", + "key3" to "value3", + "user_key" to "2223333", + "ShouldFilter" to "testData" + ) + // Act + roktKit.execute( + viewName = "test", + attributes = inputAttributes, + mpRoktEventCallback = null, + placeHolders = null, + fontTypefaces = null, + filterUser = mockFilterUser, + mpRoktConfig = null, + ) + + // Assert + val capturedAttributes = capturedAttributesSlot.captured + + + assertEquals(8, capturedAttributes.size) + assertEquals("value", capturedAttributes["attr_non_null_string"]) + assertEquals("123", capturedAttributes["attr_non_string"]) + assertEquals("2223333", capturedAttributes["user_key"]) + assertEquals("value1", capturedAttributes["key1"]) + assertEquals("value2", capturedAttributes["key2"]) + assertEquals("value3", capturedAttributes["key3"]) + assertEquals("12345", capturedAttributes["mpid"]) + + assertTrue(capturedAttributes.containsKey("ShouldFilter")) + assertFalse(capturedAttributes.containsKey("ShouldFilter_key_2")) + unmockkObject(Rokt) + } + private inner class TestKitManager : KitManagerImpl(context, null, TestCoreCallbacks(), mock(MParticleOptions::class.java)) { var attributes = HashMap() @@ -1012,7 +1087,7 @@ class RoktKitTests { val filteredKey: String = KitUtils.hashForFiltering("ShouldFilter").toString() val filteredKey2: String = KitUtils.hashForFiltering("ShouldFilter_key_2").toString() jsonObject.put(filteredKey, 0) - jsonObject.put(filteredKey2, 1) + jsonObject.put(filteredKey2, 0) } catch (e: Exception) { println("Exception occurred: ${e.message}") } diff --git a/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt b/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt index 5d18c20..56558c0 100644 --- a/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt +++ b/src/test/kotlin/com/mparticle/kits/mocks/MockKitConfiguration.kt @@ -41,7 +41,7 @@ open class MockKitConfiguration : KitConfiguration() { override fun get(key: Int, valueIfKeyNotFound: Boolean): Boolean { print("SparseArray getting: $key") return if (map.containsKey(key)) { - true + map[key] ?: valueIfKeyNotFound } else { valueIfKeyNotFound }