Skip to content

Commit

Permalink
fix: retain the original attribute value type when forwarded to kits (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
willpassidomo authored Jun 27, 2022
1 parent e9d5c30 commit acb6ec4
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 8 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@ import com.mparticle.MPEvent
import com.mparticle.MParticle
import com.mparticle.MParticleOptions
import com.mparticle.kits.testkits.BaseTestKit
import com.mparticle.kits.testkits.EventTestKit
import com.mparticle.networking.Matcher
import com.mparticle.testutils.MPLatch
import org.json.JSONArray
import org.json.JSONObject
import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull
import org.junit.Assert.assertTrue
import org.junit.Before
import org.junit.Test
Expand All @@ -21,10 +23,46 @@ class KitBatchingTest : BaseKitOptionsTest() {
.configuration(
KitOptions()
.addKit(123, BatchKit::class.java)
.addKit(456, EventTestKit::class.java)
)
startMParticle(options)
}

@Test
fun testEventAttributesRetainsOriginalTypes() {
val latch = MPLatch(1)
var receivedEvent: MPEvent? = null
(MParticle.getInstance()?.getKitInstance(456) as EventTestKit).let { kit ->
kit.onLogEvent = { event ->
receivedEvent = event
latch.countDown()
null
}
}
val event = MPEvent.Builder("some event")
.customAttributes(
mapOf(
"String" to "String",
"Long" to 100L,
"Double" to 1.1,
"Map" to mapOf("foo" to "bar", "buzz" to false)
)
)
.build()
MParticle.getInstance()?.logEvent(event)
latch.await()

assertNotNull(receivedEvent)
receivedEvent!!.customAttributes!!.let {
assertTrue(it["String"] is String)
assertTrue(it["Long"] is Long)
assertTrue(it["Double"] is Double)
assertTrue(it["Map"] is Map<*, *>)
val originalAttributes = event.customAttributes!!
it.forEach { key, value -> assertEquals(value, originalAttributes[key]) }
}
}

@Test
fun testBatchArrives() {
MParticle.getInstance()?.apply {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package com.mparticle.kits.testkits

import com.mparticle.MPEvent
import com.mparticle.kits.KitIntegration
import com.mparticle.kits.ReportingMessage

class EventTestKit : ListenerTestKit(), KitIntegration.EventListener {
var onLogEvent: (MPEvent) -> MutableList<ReportingMessage>? = { null }

override fun logEvent(baseEvent: MPEvent): MutableList<ReportingMessage>? {
return onLogEvent(baseEvent)
}
override fun leaveBreadcrumb(breadcrumb: String?): MutableList<ReportingMessage> {
TODO("Not yet implemented")
}

override fun logError(
message: String?,
errorAttributes: MutableMap<String, String>?
): MutableList<ReportingMessage> {
TODO("Not yet implemented")
}

override fun logException(
exception: Exception?,
exceptionAttributes: MutableMap<String, String>?,
message: String?
): MutableList<ReportingMessage> {
TODO("Not yet implemented")
}

override fun logScreen(
screenName: String?,
screenAttributes: MutableMap<String, String>?
): MutableList<ReportingMessage> {
TODO("Not yet implemented")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -430,24 +430,24 @@ private CommerceEvent filterCommerceEntityAttributes(CommerceEvent filteredEvent
return builder.build();
}

public final Map<String, String> filterEventAttributes(MPEvent event) {
return filterEventAttributes(event.getEventType(), event.getEventName(), mAttributeFilters, event.getCustomAttributeStrings());
public final Map<String, Object> filterEventAttributes(MPEvent event) {
return filterEventAttributes(event.getEventType(), event.getEventName(), mAttributeFilters, event.getCustomAttributes());
}

public final Map<String, String> filterScreenAttributes(MParticle.EventType eventType, String eventName, Map<String, String> eventAttributes) {
public final Map<String, Object> filterScreenAttributes(MParticle.EventType eventType, String eventName, Map<String, Object> eventAttributes) {
return filterEventAttributes(eventType, eventName, mScreenNameFilters, eventAttributes);
}

public final Map<String, String> filterEventAttributes(MParticle.EventType eventType, String eventName, SparseBooleanArray filter, Map<String, String> eventAttributes) {
public final Map<String, Object> filterEventAttributes(MParticle.EventType eventType, String eventName, SparseBooleanArray filter, Map<String, Object> eventAttributes) {
if (eventAttributes != null && eventAttributes.size() > 0 && filter != null && filter.size() > 0) {
String eventTypeStr = "0";
if (eventType != null) {
eventTypeStr = eventType.ordinal() + "";
}
Iterator<Map.Entry<String, String>> attIterator = eventAttributes.entrySet().iterator();
Map<String, String> newAttributes = new HashMap<String, String>();
Iterator<Map.Entry<String, Object>> attIterator = eventAttributes.entrySet().iterator();
Map<String, Object> newAttributes = new HashMap<>();
while (attIterator.hasNext()) {
Map.Entry<String, String> entry = attIterator.next();
Map.Entry<String, Object> entry = attIterator.next();
String key = entry.getKey();
int hash = KitUtils.hashForFiltering(eventTypeStr + eventName + key);
if (filter.get(hash, true)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -951,7 +951,7 @@ public void logScreen(MPEvent screenEvent) {
try {
if (provider instanceof KitIntegration.EventListener && !provider.isDisabled() && provider.getConfiguration().shouldLogScreen(screenEvent.getEventName())) {
MPEvent filteredEvent = new MPEvent.Builder(screenEvent)
.customAttributes(provider.getConfiguration().filterScreenAttributes(null, screenEvent.getEventName(), screenEvent.getCustomAttributeStrings()))
.customAttributes(provider.getConfiguration().filterScreenAttributes(null, screenEvent.getEventName(), screenEvent.getCustomAttributes()))
.build();

List<CustomMapping.ProjectionResult> projectedEvents = CustomMapping.projectEvents(
Expand Down

0 comments on commit acb6ec4

Please sign in to comment.