From 5fca0ffe6d598921b75278ec215da5316c86bc45 Mon Sep 17 00:00:00 2001 From: Mansi Pandya Date: Mon, 24 Nov 2025 11:05:57 -0500 Subject: [PATCH 1/3] feat: Update Android Gradle plugin to 8.0.2 --- build.gradle | 22 ++++++++++++++++++---- gradle/wrapper/gradle-wrapper.properties | 2 +- src/main/AndroidManifest.xml | 3 +-- 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 8b181b7..9d00573 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ buildscript { - ext.kotlin_version = '1.8.10' + ext.kotlin_version = '2.0.20' if (!project.hasProperty('version') || project.version.equals('unspecified')) { project.version = '+' } @@ -9,8 +9,9 @@ buildscript { mavenLocal() mavenCentral() } + dependencies { - classpath 'com.android.tools.build:gradle:7.4.1' + classpath 'com.android.tools.build:gradle:8.1.4' classpath 'com.mparticle:android-kit-plugin:' + project.version classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } @@ -18,7 +19,7 @@ buildscript { plugins { id "org.sonarqube" version "3.5.0.2730" - id "org.jlleitschuh.gradle.ktlint" version "11.2.0" + id "org.jlleitschuh.gradle.ktlint" version "13.0.0" } sonarqube { @@ -30,14 +31,27 @@ sonarqube { } apply plugin: 'org.jlleitschuh.gradle.ktlint' -apply plugin: 'com.mparticle.kit' apply plugin: 'kotlin-android' +apply plugin: 'com.mparticle.kit' android { + namespace 'com.mparticle.kits.urbanairship' compileSdk = 33 defaultConfig { minSdkVersion 23 } + compileOptions { + sourceCompatibility JavaVersion.VERSION_17 + targetCompatibility JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = '17' + } + testOptions { + unitTests.all { + jvmArgs += ['--add-opens', 'java.base/java.lang=ALL-UNNAMED'] + } + } } dependencies { diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661..e1bef7e 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/src/main/AndroidManifest.xml b/src/main/AndroidManifest.xml index efa2c92..81e3d79 100755 --- a/src/main/AndroidManifest.xml +++ b/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - + From d6455a67b689053466cf413d865c1cc7fe33a103 Mon Sep 17 00:00:00 2001 From: Mansi Pandya Date: Tue, 20 Jan 2026 14:16:38 -0500 Subject: [PATCH 2/3] Fix Lint error --- build.gradle | 3 + .../com/mparticle/kits/MParticleAutopilot.kt | 56 ++-- .../kits/UrbanAirshipConfiguration.kt | 57 ++-- .../com/mparticle/kits/UrbanAirshipKit.kt | 236 +++++++++------ .../mparticle/kits/MockKitConfiguration.kt | 27 +- .../com/mparticle/kits/UrbanAirshipKitTest.kt | 252 ---------------- .../mparticle/kits/UrbanAirshipKitTest2.kt | 272 ++++++++++++++++++ 7 files changed, 493 insertions(+), 410 deletions(-) delete mode 100644 src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTest.kt create mode 100644 src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTest2.kt diff --git a/build.gradle b/build.gradle index 9d00573..7fb35b7 100644 --- a/build.gradle +++ b/build.gradle @@ -37,6 +37,9 @@ apply plugin: 'com.mparticle.kit' android { namespace 'com.mparticle.kits.urbanairship' compileSdk = 33 + buildFeatures { + buildConfig = true + } defaultConfig { minSdkVersion 23 } diff --git a/src/main/kotlin/com/mparticle/kits/MParticleAutopilot.kt b/src/main/kotlin/com/mparticle/kits/MParticleAutopilot.kt index 6c7713f..afcf39c 100644 --- a/src/main/kotlin/com/mparticle/kits/MParticleAutopilot.kt +++ b/src/main/kotlin/com/mparticle/kits/MParticleAutopilot.kt @@ -1,9 +1,7 @@ package com.mparticle.kits -import android.R import android.content.Context import android.graphics.Color -import android.util.TypedValue import com.mparticle.MParticle import com.mparticle.internal.Logger import com.mparticle.kits.UrbanAirshipKit.ChannelIdListener @@ -18,17 +16,21 @@ import com.urbanairship.util.UAStringUtil class MParticleAutopilot : Autopilot() { override fun createAirshipConfigOptions(context: Context): AirshipConfigOptions { val preferences = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE) - val optionsBuilder = AirshipConfigOptions.Builder() - .setNotificationIcon(preferences.getInt(NOTIFICATION_ICON_NAME, 0)) - .setNotificationAccentColor(preferences.getInt(NOTIFICATION_COLOR, 0)) - .setCustomPushProvider(MParticlePushProvider.instance) - .setIsPromptForPermissionOnUserNotificationsEnabled(false) + val optionsBuilder = + AirshipConfigOptions + .Builder() + .setNotificationIcon(preferences.getInt(NOTIFICATION_ICON_NAME, 0)) + .setNotificationAccentColor(preferences.getInt(NOTIFICATION_COLOR, 0)) + .setCustomPushProvider(MParticlePushProvider.instance) + .setIsPromptForPermissionOnUserNotificationsEnabled(false) if (MParticle.getInstance()?.environment == MParticle.Environment.Development) { - optionsBuilder.setDevelopmentAppKey(preferences.getString(APP_KEY, null)) + optionsBuilder + .setDevelopmentAppKey(preferences.getString(APP_KEY, null)) .setDevelopmentAppSecret(preferences.getString(APP_SECRET, null)) .setInProduction(false) } else { - optionsBuilder.setProductionAppKey(preferences.getString(APP_KEY, null)) + optionsBuilder + .setProductionAppKey(preferences.getString(APP_KEY, null)) .setProductionAppSecret(preferences.getString(APP_SECRET, null)) .setInProduction(true) } @@ -43,8 +45,10 @@ class MParticleAutopilot : Autopilot() { } override fun onAirshipReady(airship: UAirship) { - val preferences = UAirship.getApplicationContext() - .getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE) + val preferences = + UAirship + .getApplicationContext() + .getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE) if (preferences.getBoolean(FIRST_RUN_KEY, true)) { preferences.edit().putBoolean(FIRST_RUN_KEY, false).apply() airship.pushManager.userNotificationsEnabled = true @@ -68,11 +72,10 @@ class MParticleAutopilot : Autopilot() { override fun allowEarlyTakeOff(context: Context): Boolean = false - companion object { private const val PREFERENCE_NAME = "com.mparticle.kits.urbanairship" - //persistence keys + // persistence keys private const val APP_KEY = "applicationKey" private const val APP_SECRET = "applicationSecret" private const val DOMAIN = "domain" @@ -89,12 +92,18 @@ class MParticleAutopilot : Autopilot() { * @param context The application context. * @param configuration UrbanAirshipKit configuration. */ - fun updateConfig(context: Context, configuration: UrbanAirshipConfiguration) { - val editor = context.getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE).edit() - .putString(APP_KEY, configuration.applicationKey) - .putString(APP_SECRET, configuration.applicationSecret) - .putString(DOMAIN, configuration.domain) - .putString(CUSTOM_DOMAIN_PROXY_URL, configuration.customDomainProxyUrl) + fun updateConfig( + context: Context, + configuration: UrbanAirshipConfiguration, + ) { + val editor = + context + .getSharedPreferences(PREFERENCE_NAME, Context.MODE_PRIVATE) + .edit() + .putString(APP_KEY, configuration.applicationKey) + .putString(APP_SECRET, configuration.applicationSecret) + .putString(DOMAIN, configuration.domain) + .putString(CUSTOM_DOMAIN_PROXY_URL, configuration.customDomainProxyUrl) // Convert accent color hex string to an int val accentColor = configuration.notificationColor @@ -109,9 +118,12 @@ class MParticleAutopilot : Autopilot() { // Convert notification name to a drawable resource ID val notificationIconName = configuration.notificationIconName if (!UAStringUtil.isEmpty(notificationIconName)) { - val id = context.resources.getIdentifier( - notificationIconName, "drawable", context.packageName - ) + val id = + context.resources.getIdentifier( + notificationIconName, + "drawable", + context.packageName, + ) if (id != 0) { editor.putInt(NOTIFICATION_ICON_NAME, id) } else { diff --git a/src/main/kotlin/com/mparticle/kits/UrbanAirshipConfiguration.kt b/src/main/kotlin/com/mparticle/kits/UrbanAirshipConfiguration.kt index 31fe776..4502772 100644 --- a/src/main/kotlin/com/mparticle/kits/UrbanAirshipConfiguration.kt +++ b/src/main/kotlin/com/mparticle/kits/UrbanAirshipConfiguration.kt @@ -1,12 +1,14 @@ package com.mparticle.kits import com.mparticle.MParticle.IdentityType -import java.util.ArrayList import org.json.JSONArray import org.json.JSONException import java.lang.Exception +import java.util.ArrayList -class UrbanAirshipConfiguration(settings: Map) { +class UrbanAirshipConfiguration( + settings: Map, +) { val applicationKey: String? val applicationSecret: String? val domain: String? @@ -27,7 +29,6 @@ class UrbanAirshipConfiguration(settings: Map) { var notificationIconName: String? = null var notificationColor: String? = null - private fun parseTagsJson(tagsJson: JSONArray) { for (i in 0 until tagsJson.length()) { try { @@ -37,22 +38,22 @@ class UrbanAirshipConfiguration(settings: Map) { val hash = tagMap.getInt("map") val eventMap: MutableMap>? = when (mapType) { - "EventClass.Id" -> { - eventClass - } - "EventClassDetails.Id" -> { - eventClassDetails - } - "EventAttributeClass.Id" -> { - eventAttributeClass - } - "EventAttributeClassDetails.Id" -> { - eventAttributeClassDetails + "EventClass.Id" -> { + eventClass + } + "EventClassDetails.Id" -> { + eventClassDetails + } + "EventAttributeClass.Id" -> { + eventAttributeClass + } + "EventAttributeClassDetails.Id" -> { + eventAttributeClassDetails + } + else -> { + null + } } - else -> { - null - } - } if (eventMap != null) { if (!eventMap.containsKey(hash)) { eventMap[hash] = ArrayList() @@ -80,17 +81,19 @@ class UrbanAirshipConfiguration(settings: Map) { private const val NAMED_USER_TYPE_CUSTOMER_ID = "customerId" private const val NAMED_USER_TYPE_EMAIL = "email" private const val NAMED_USER_TYPE_OTHER = "other" - private fun parseNamedUserIdentityType(config: String?): IdentityType? { - return if (config == null) { + + private fun parseNamedUserIdentityType(config: String?): IdentityType? = + if (config == null) { null - } else when (config) { - NAMED_USER_TYPE_OTHER -> IdentityType.Other - NAMED_USER_TYPE_EMAIL -> IdentityType.Email - NAMED_USER_TYPE_CUSTOMER_ID -> IdentityType.CustomerId - NAMED_USER_TYPE_NONE -> null - else -> null + } else { + when (config) { + NAMED_USER_TYPE_OTHER -> IdentityType.Other + NAMED_USER_TYPE_EMAIL -> IdentityType.Email + NAMED_USER_TYPE_CUSTOMER_ID -> IdentityType.CustomerId + NAMED_USER_TYPE_NONE -> null + else -> null + } } - } } init { diff --git a/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt b/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt index d8a8bdc..d7ced6c 100644 --- a/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt +++ b/src/main/kotlin/com/mparticle/kits/UrbanAirshipKit.kt @@ -22,8 +22,12 @@ import java.util.LinkedList /** * mParticle-Urban Airship Kit integration */ -class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegration.EventListener, - CommerceListener, KitIntegration.AttributeListener { +class UrbanAirshipKit : + KitIntegration(), + KitIntegration.PushListener, + KitIntegration.EventListener, + CommerceListener, + KitIntegration.AttributeListener { private var channelIdListener: ChannelIdListener? = null private var configuration: UrbanAirshipConfiguration? = null @@ -33,20 +37,19 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr override fun getName(): String = KIT_NAME - override fun getInstance(): ChannelIdListener? { - return channelIdListener - } + override fun getInstance(): ChannelIdListener? = channelIdListener override fun onKitCreate( settings: Map, - context: Context + context: Context, ): List { setUrbanConfiguration(UrbanAirshipConfiguration(settings)) - channelIdListener = object : ChannelIdListener { - override fun channelIdUpdated() { - updateChannelIntegration() + channelIdListener = + object : ChannelIdListener { + override fun channelIdUpdated() { + updateChannelIntegration() + } } - } configuration?.let { MParticleAutopilot.updateConfig(context, it) } Autopilot.automaticTakeOff(context) updateChannelIntegration() @@ -63,14 +66,15 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr override fun setOptOut(optedOut: Boolean): List { UAirship.shared().privacyManager.setEnabledFeatures( - if (optedOut) PrivacyManager.Feature.NONE else PrivacyManager.Feature.ALL - ) - val message = ReportingMessage( - this, - ReportingMessage.MessageType.OPT_OUT, - System.currentTimeMillis(), - null + if (optedOut) PrivacyManager.Feature.NONE else PrivacyManager.Feature.ALL, ) + val message = + ReportingMessage( + this, + ReportingMessage.MessageType.OPT_OUT, + System.currentTimeMillis(), + null, + ) return listOf(message) } @@ -86,39 +90,50 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr } ?: return false } - override fun onPushMessageReceived(context: Context, intent: Intent?) { + override fun onPushMessageReceived( + context: Context, + intent: Intent?, + ) { intent?.extras?.let { val pushMessage = PushMessage(it) - PushProviderBridge.processPush(MParticlePushProvider::class.java, pushMessage) + PushProviderBridge + .processPush(MParticlePushProvider::class.java, pushMessage) .executeSync(context) } ?: return - } - override fun onPushRegistration(instanceId: String, senderId: String): Boolean { + override fun onPushRegistration( + instanceId: String, + senderId: String, + ): Boolean { MParticlePushProvider.instance.setRegistrationToken(instanceId) PushProviderBridge.requestRegistrationUpdate( context, MParticlePushProvider.instance::class.java, - instanceId + instanceId, ) return true } override fun leaveBreadcrumb(s: String): List = emptyList() - override fun logError(s: String, map: Map): List = emptyList() + override fun logError( + s: String, + map: Map, + ): List = emptyList() override fun logException( e: Exception, map: Map, - s: String + s: String, ): List = emptyList() override fun logEvent(event: MPEvent): List { val tagSet = extractTags(event) if (tagSet.isNotEmpty()) { - UAirship.shared().channel + UAirship + .shared() + .channel .editTags() .addTags(tagSet) .apply() @@ -129,22 +144,25 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr override fun logScreen( screenName: String, - attributes: Map + attributes: Map, ): List { val tagSet = extractScreenTags(screenName, attributes) if (tagSet.isNotEmpty()) { - UAirship.shared().channel + UAirship + .shared() + .channel .editTags() .addTags(tagSet) .apply() } UAirship.shared().analytics.trackScreen(screenName) - val message = ReportingMessage( - this, - ReportingMessage.MessageType.SCREEN_VIEW, - System.currentTimeMillis(), - attributes - ) + val message = + ReportingMessage( + this, + ReportingMessage.MessageType.SCREEN_VIEW, + System.currentTimeMillis(), + attributes, + ) return listOf(message) } @@ -152,25 +170,30 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr valueIncreased: BigDecimal, totalValue: BigDecimal, eventName: String, - contextInfo: Map + contextInfo: Map, ): List { - val customEvent = CustomEvent.Builder(eventName) - .setEventValue(valueIncreased) - .build() + val customEvent = + CustomEvent + .Builder(eventName) + .setEventValue(valueIncreased) + .build() UAirship.shared().analytics.recordCustomEvent(customEvent) - val message = ReportingMessage( - this, - ReportingMessage.MessageType.EVENT, - System.currentTimeMillis(), - contextInfo - ) + val message = + ReportingMessage( + this, + ReportingMessage.MessageType.EVENT, + System.currentTimeMillis(), + contextInfo, + ) return listOf(message) } override fun logEvent(commerceEvent: CommerceEvent): List { val tagSet = extractCommerceTags(commerceEvent) if (tagSet.isNotEmpty()) { - UAirship.shared().channel + UAirship + .shared() + .channel .editTags() .addTags(tagSet) .apply() @@ -187,10 +210,15 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr return messages } - override fun setUserIdentity(identityType: IdentityType, identity: String) { + override fun setUserIdentity( + identityType: IdentityType, + identity: String, + ) { val airshipId = getAirshipIdentifier(identityType) if (airshipId != null) { - UAirship.shared().analytics + UAirship + .shared() + .analytics .editAssociatedIdentifiers() .addIdentifier(airshipId, identity) .apply() @@ -203,7 +231,9 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr override fun removeUserIdentity(identityType: IdentityType) { val airshipId = getAirshipIdentifier(identityType) if (airshipId != null) { - UAirship.shared().analytics + UAirship + .shared() + .analytics .editAssociatedIdentifiers() .removeIdentifier(airshipId) .apply() @@ -213,15 +243,22 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr } } - override fun setUserAttribute(key: String, value: String) { + override fun setUserAttribute( + key: String, + value: String, + ) { if (configuration?.enableTags == true) { if (KitUtils.isEmpty(value)) { - UAirship.shared().channel + UAirship + .shared() + .channel .editTags() .addTag(KitUtils.sanitizeAttributeKey(key)) .apply() } else if (configuration?.includeUserAttributes == true) { - UAirship.shared().channel + UAirship + .shared() + .channel .editTags() .addTag(KitUtils.sanitizeAttributeKey(key) + "-" + value) .apply() @@ -229,7 +266,10 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr } } - override fun setUserAttributeList(s: String, list: List) { + override fun setUserAttributeList( + s: String, + list: List, + ) { // not supported } @@ -237,11 +277,14 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr override fun setAllUserAttributes( stringAttributes: Map, - listAttributes: Map> + listAttributes: Map>, ) { if (configuration?.enableTags == true) { - val editor = UAirship.shared().channel - .editTags() + val editor = + UAirship + .shared() + .channel + .editTags() for ((key, value) in stringAttributes) { if (KitUtils.isEmpty(value)) { editor.addTag(KitUtils.sanitizeAttributeKey(key)) @@ -254,7 +297,9 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr } override fun removeUserAttribute(attribute: String) { - UAirship.shared().channel + UAirship + .shared() + .channel .editTags() .removeTag(attribute) .apply() @@ -276,16 +321,16 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr } event.products?.let { eventProducts -> when (event.productAction) { - Product.PURCHASE -> for (product in eventProducts) { - val template = RetailEventTemplate - .newPurchasedTemplate() + val template = + RetailEventTemplate + .newPurchasedTemplate() if (!KitUtils.isEmpty( - event.transactionAttributes?.id + event.transactionAttributes?.id, ) ) { template.setTransactionId( - event.transactionAttributes?.id + event.transactionAttributes?.id, ) } populateRetailEventTemplate(template, product) @@ -295,9 +340,8 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr Product.ADD_TO_CART -> for (product in eventProducts) { populateRetailEventTemplate( RetailEventTemplate.newAddedToCartTemplate(), - product - ) - .createEvent() + product, + ).createEvent() .track() } Product.CLICK -> for (product in eventProducts) { @@ -308,9 +352,8 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr Product.ADD_TO_WISHLIST -> for (product in eventProducts) { populateRetailEventTemplate( RetailEventTemplate.newStarredProductTemplate(), - product - ) - .createEvent() + product, + ).createEvent() .track() } else -> return false @@ -328,14 +371,14 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr */ private fun populateRetailEventTemplate( template: RetailEventTemplate, - product: Product - ): RetailEventTemplate { - return template.setCategory(product.category) + product: Product, + ): RetailEventTemplate = + template + .setCategory(product.category) .setId(product.sku) .setDescription(product.name) .setValue(product.totalAmount) .setBrand(product.brand) - } /** * Logs an Urban Airship CustomEvent from an MPEvent. @@ -357,19 +400,19 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr if (configuration.eventClass.containsKey(event.eventHash)) { configuration.eventClass[event.eventHash]?.let { eventHashIt -> tags.addAll( - eventHashIt + eventHashIt, ) } - } event.customAttributeStrings?.let { for ((key, value) in it) { - val hash = KitUtils.hashForFiltering( - event.eventType.ordinal.toString() + + val hash = + KitUtils.hashForFiltering( + event.eventType.ordinal.toString() + event.eventName + - key - ) + key, + ) val tagValues: ArrayList? = configuration.eventAttributeClass[hash] if (tagValues != null) { tags.addAll(tagValues) @@ -387,12 +430,13 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr fun extractCommerceTags(commerceEvent: CommerceEvent?): Set { val tags: MutableSet = HashSet() - val commerceEventHash = KitUtils.hashForFiltering( - CommerceEventUtils.getEventType(commerceEvent).toString() + "" - ) + val commerceEventHash = + KitUtils.hashForFiltering( + CommerceEventUtils.getEventType(commerceEvent).toString() + "", + ) configuration?.let { configuration -> if (configuration.eventClassDetails.containsKey( - commerceEventHash + commerceEventHash, ) ) { configuration.eventClassDetails[commerceEventHash]?.let { tags.addAll(it) } @@ -401,10 +445,11 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr for (event in expandedEvents) { event.customAttributeStrings?.let { for ((key, value) in it) { - val hash = KitUtils.hashForFiltering( - CommerceEventUtils.getEventType(commerceEvent).toString() + - key - ) + val hash = + KitUtils.hashForFiltering( + CommerceEventUtils.getEventType(commerceEvent).toString() + + key, + ) val tagValues: List? = configuration.eventAttributeClassDetails[hash] if (tagValues != null) { @@ -422,23 +467,27 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr return tags } - fun extractScreenTags(screenName: String, attributes: Map?): Set { + fun extractScreenTags( + screenName: String, + attributes: Map?, + ): Set { val tags: MutableSet = HashSet() val screenEventHash = KitUtils.hashForFiltering("0$screenName") configuration?.let { configuration -> if (configuration.eventClassDetails.containsKey( - screenEventHash + screenEventHash, ) ) { configuration.eventClassDetails[screenEventHash]?.let { tags.addAll(it) } } if (attributes != null) { for ((key, value) in attributes) { - val hash = KitUtils.hashForFiltering( - "0" + + val hash = + KitUtils.hashForFiltering( + "0" + screenName + - key - ) + key, + ) val tagValues = configuration.eventAttributeClassDetails[hash] if (tagValues != null) { @@ -461,8 +510,8 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr * @param identityType The mParticle identity type. * @return The Urban Airship identifier, or `null` if one does not exist. */ - private fun getAirshipIdentifier(identityType: IdentityType): String? { - return when (identityType) { + private fun getAirshipIdentifier(identityType: IdentityType): String? = + when (identityType) { IdentityType.CustomerId -> IDENTITY_CUSTOMER_ID IdentityType.Facebook -> IDENTITY_FACEBOOK IdentityType.Twitter -> IDENTITY_TWITTER @@ -475,7 +524,6 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr null } } - } /** * Sets the Urban Airship Channel ID as an mParticle integration attribute. @@ -502,4 +550,4 @@ class UrbanAirshipKit : KitIntegration(), KitIntegration.PushListener, KitIntegr private const val KIT_NAME = "Urban Airship" const val CHANNEL_ID_INTEGRATION_KEY = "com.urbanairship.channel_id" } -} \ No newline at end of file +} diff --git a/src/test/kotlin/com/mparticle/kits/MockKitConfiguration.kt b/src/test/kotlin/com/mparticle/kits/MockKitConfiguration.kt index eb39b4e..3f14470 100644 --- a/src/test/kotlin/com/mparticle/kits/MockKitConfiguration.kt +++ b/src/test/kotlin/com/mparticle/kits/MockKitConfiguration.kt @@ -38,43 +38,40 @@ class MockKitConfiguration : KitConfiguration() { } internal inner class MockSparseBooleanArray : SparseBooleanArray() { - var map = HashMap() override fun get(key: Int): Boolean = get(key, false) - override fun get(key: Int, valueIfKeyNotFound: Boolean): Boolean { + override fun get( + key: Int, + valueIfKeyNotFound: Boolean, + ): Boolean { print("SparseArray getting: $key") - return if (map.containsKey(key)){ + return if (map.containsKey(key)) { map[key] return true - } - else { + } else { valueIfKeyNotFound } } - - - override fun put(key: Int, value: Boolean) { + override fun put( + key: Int, + value: Boolean, + ) { map[key] = value } override fun clear() = map.clear() - override fun size(): Int = map.size - override fun toString(): String = map.toString() - } companion object { @Throws(JSONException::class) - fun createKitConfiguration(json: JSONObject): KitConfiguration { - return MockKitConfiguration().parseConfiguration(json) - } + fun createKitConfiguration(json: JSONObject): KitConfiguration = MockKitConfiguration().parseConfiguration(json) @Throws(JSONException::class) fun createKitConfiguration(): KitConfiguration { @@ -83,4 +80,4 @@ class MockKitConfiguration : KitConfiguration() { return MockKitConfiguration().parseConfiguration(jsonObject) } } -} \ No newline at end of file +} diff --git a/src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTest.kt b/src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTest.kt deleted file mode 100644 index 07678a4..0000000 --- a/src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTest.kt +++ /dev/null @@ -1,252 +0,0 @@ -package com.mparticle.kits - -import android.content.Context -import com.mparticle.MPEvent -import com.mparticle.MParticle -import com.mparticle.MParticleOptions -import com.mparticle.commerce.CommerceEvent -import com.mparticle.commerce.Product -import com.mparticle.commerce.TransactionAttributes -import org.json.JSONObject -import org.junit.Assert -import org.junit.Test -import org.mockito.Mockito - -class UrbanAirshipKitTest2 { - private val kit: KitIntegration - get() = UrbanAirshipKit() - - @Test - @Throws(Exception::class) - fun testGetName() { - val name = kit.name - Assert.assertTrue(!name.isNullOrEmpty()) - } - - /** - * Kit *should* throw an exception when they're initialized with the wrong settings. - * - */ - @Test - @Throws(Exception::class) - fun testOnKitCreate() { - var e: Exception? = null - try { - val kit = kit - val settings = HashMap() - settings["fake setting"] = "fake" - kit.onKitCreate(settings, Mockito.mock(Context::class.java)) - } catch (ex: Exception) { - e = ex - } - Assert.assertNotNull(e) - } - - @Test - @Throws(Exception::class) - fun testClassName() { - val options = Mockito.mock(MParticleOptions::class.java) - val factory = KitIntegrationFactory(options) - val integrations = factory.supportedKits.values - val className = kit.javaClass.name - for (integration in integrations) { - if (integration.name == className) { - return - } - } - Assert.fail("$className not found as a known integration.") - } - - @Test - @Throws(Exception::class) - fun testParsing() { - val config = JSONObject( - "{ \"id\": 25, \"as\": { \"applicationKey\": \"this is the app key\", \"applicationSecret\": \"this is the app secret\", \"applicationMasterSecret\": \"mySecret\", \"domain\": \"EU\", \"enableTags\": \"True\", \"includeUserAttributes\": \"False\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"pressed\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"-1394780343\\\",\\\"value\\\":\\\"screen1\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"-2010155734\\\",\\\"value\\\":\\\"cart\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"245922523\\\",\\\"value\\\":\\\"gesture\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"245922523\\\",\\\"value\\\":\\\"a2ctid\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"1112195452\\\",\\\"value\\\":\\\"hello\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-897761755\\\",\\\"value\\\":\\\"a\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-635338283\\\",\\\"value\\\":\\\"b\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1165857198\\\",\\\"value\\\":\\\"c\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-2093257886\\\",\\\"value\\\":\\\"d\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"-599719438\\\",\\\"value\\\":\\\"e\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": {}, \"pr\": [] }" - ) - val kitConfig = MockKitConfiguration.createKitConfiguration(config) - val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) - Assert.assertEquals("this is the app key", urbanAirshipConfiguration.applicationKey) - Assert.assertEquals("this is the app secret", urbanAirshipConfiguration.applicationSecret) - Assert.assertEquals("EU", urbanAirshipConfiguration.domain) - Assert.assertEquals(true, urbanAirshipConfiguration.enableTags) - Assert.assertEquals(false, urbanAirshipConfiguration.includeUserAttributes) - Assert.assertEquals("Application Icon", urbanAirshipConfiguration.notificationIconName) - Assert.assertEquals("System default", urbanAirshipConfiguration.notificationColor) - Assert.assertEquals( - MParticle.IdentityType.CustomerId, - urbanAirshipConfiguration.userIdField - ) - var eventTags: MutableMap> = urbanAirshipConfiguration.eventClass - - Assert.assertTrue(eventTags[-1394780343]?.get(0) == "screen1") - eventTags = urbanAirshipConfiguration.eventAttributeClass - Assert.assertTrue( - eventTags[245922523]?.contains("gesture") == true && eventTags[245922523] - ?.contains("a2ctid") == true - ) - Assert.assertTrue(eventTags[-2093257886]?.get(0) == "d") - eventTags = urbanAirshipConfiguration.eventClassDetails - Assert.assertTrue(eventTags[-2010155734]?.get(0) == "cart") - Assert.assertTrue(eventTags[847138800]?.get(0) == "pressed") - eventTags = urbanAirshipConfiguration.eventAttributeClassDetails - Assert.assertTrue(eventTags[1112195452]?.get(0) == "hello") - Assert.assertTrue(eventTags[-897761755]?.get(0) == "a") - Assert.assertTrue(eventTags[-635338283]?.get(0) == "b") - Assert.assertTrue(eventTags[-1165857198]?.get(0) == "c") - Assert.assertTrue(eventTags[-599719438]?.get(0) == "e") - } - - @Test - @Throws(Exception::class) - fun testExtractEventName() { - MParticle.setInstance(Mockito.mock(MParticle::class.java)) - val config = JSONObject( - "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }" - ) - val kitConfig = MockKitConfiguration.createKitConfiguration(config) - val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) - val kit = UrbanAirshipKit() - kit.configuration = kitConfig - kit.setUrbanConfiguration(urbanAirshipConfiguration) - val event = - MPEvent.Builder("Navigation 2").eventType(MParticle.EventType.Navigation).build() - val set = kit.extractTags(event) - Assert.assertEquals(1, set.size.toLong()) - Assert.assertEquals("test even tag", set.iterator().next()) - } - - @Test - @Throws(Exception::class) - fun testExtractEventAttributes() { - MParticle.setInstance(Mockito.mock(MParticle::class.java)) - val config = JSONObject( - "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }" - ) - val kitConfig = MockKitConfiguration.createKitConfiguration(config) - val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) - val kit = UrbanAirshipKit() - kit.configuration = kitConfig - kit.setUrbanConfiguration(urbanAirshipConfiguration) - val attributes= HashMap() - attributes["searchTerm"] = "anything" - val event = MPEvent.Builder("search").eventType(MParticle.EventType.Search) - .customAttributes(attributes).build() - val set = kit.extractTags(event) - Assert.assertEquals(2, set.size.toLong()) - Assert.assertTrue(set.contains("test event attribute")) - Assert.assertTrue(set.contains("test event attribute-anything")) - } - - @Test - @Throws(Exception::class) - fun testExtractScreenName() { - MParticle.setInstance(Mockito.mock(MParticle::class.java)) - val config = JSONObject( - "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }" - ) - val kitConfig = MockKitConfiguration.createKitConfiguration(config) - val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) - val kit = UrbanAirshipKit() - kit.configuration = kitConfig - kit.setUrbanConfiguration(urbanAirshipConfiguration) - val set = kit.extractScreenTags("Screen Layout B", HashMap()) - Assert.assertEquals(1, set.size.toLong()) - Assert.assertEquals("test screen tag", set.iterator().next()) - } - - @Test - @Throws(Exception::class) - fun testExtractScreenAttribute() { - MParticle.setInstance(Mockito.mock(MParticle::class.java)) - val config = JSONObject( - "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }" - ) - val kitConfig = MockKitConfiguration.createKitConfiguration(config) - val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) - val kit = UrbanAirshipKit() - kit.configuration = kitConfig - kit.setUrbanConfiguration(urbanAirshipConfiguration) - val attributes = HashMap() - attributes["version"] = "anything" - val set = kit.extractScreenTags("Main Screen", attributes) - Assert.assertEquals(2, set.size.toLong()) - Assert.assertTrue(set.contains("test screen attribute")) - Assert.assertTrue(set.contains("test screen attribute-anything")) - } - - @Test - @Throws(Exception::class) - fun testExtractEcommEventType() { - MParticle.setInstance(Mockito.mock(MParticle::class.java)) - Mockito.`when`(MParticle.getInstance()?.environment) - .thenReturn(MParticle.Environment.Development) - val config = JSONObject( - "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }" - ) - val kitConfig = MockKitConfiguration.createKitConfiguration(config) - val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) - val kit = UrbanAirshipKit() - kit.configuration = kitConfig - kit.setUrbanConfiguration(urbanAirshipConfiguration) - val event = - CommerceEvent.Builder(Product.ADD_TO_CART, Product.Builder("name", "sku", 10.0).build()) - .build() - val set = kit.extractCommerceTags(event) - Assert.assertEquals(1, set.size.toLong()) - Assert.assertEquals("test ecomm add to cart tag", set.iterator().next()) - } - - @Test - @Throws(Exception::class) - fun testExtractEcommAttribute() { - MParticle.setInstance(Mockito.mock(MParticle::class.java)) - Mockito.`when`(MParticle.getInstance()!!.environment) - .thenReturn(MParticle.Environment.Development) - val config = JSONObject( - "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }" - ) - val kitConfig = MockKitConfiguration.createKitConfiguration(config) - val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) - val kit = UrbanAirshipKit() - kit.configuration = kitConfig - kit.setUrbanConfiguration(urbanAirshipConfiguration) - val event = - CommerceEvent.Builder(Product.PURCHASE, Product.Builder("name", "sku", 10.0).build()) - .transactionAttributes( - TransactionAttributes("id").setRevenue(10.0) - ).build() - val set = kit.extractCommerceTags(event) - Assert.assertEquals(2, set.size.toLong()) - Assert.assertTrue(set.contains("test eComm attribute total amount")) - Assert.assertTrue(set.toString(), set.contains("test eComm attribute total amount-10.0")) - } - - @Test - @Throws(Exception::class) - fun testExtractEcommAttribute2() { - MParticle.setInstance(Mockito.mock(MParticle::class.java)) - Mockito.`when`(MParticle.getInstance()?.environment) - .thenReturn(MParticle.Environment.Development) - val config = JSONObject( - "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }" - ) - val kitConfig = MockKitConfiguration.createKitConfiguration(config) - val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) - val kit = UrbanAirshipKit() - kit.configuration = kitConfig - kit.setUrbanConfiguration(urbanAirshipConfiguration) - val map = HashMap() - map["Promo Code"] = "this is a promo code" - val event = CommerceEvent.Builder( - Product.CHECKOUT, - Product.Builder("name", "sku", 10.0).customAttributes(map).build() - ).build() - val set = kit.extractCommerceTags(event) - Assert.assertEquals(2, set.size.toLong()) - Assert.assertTrue(set.contains("test eComm checkout promo code")) - Assert.assertTrue( - set.toString(), - set.contains("test eComm checkout promo code-this is a promo code") - ) - } -} diff --git a/src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTest2.kt b/src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTest2.kt new file mode 100644 index 0000000..b61d9ab --- /dev/null +++ b/src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTest2.kt @@ -0,0 +1,272 @@ +package com.mparticle.kits + +import android.content.Context +import com.mparticle.MPEvent +import com.mparticle.MParticle +import com.mparticle.MParticleOptions +import com.mparticle.commerce.CommerceEvent +import com.mparticle.commerce.Product +import com.mparticle.commerce.TransactionAttributes +import org.json.JSONObject +import org.junit.Assert +import org.junit.Test +import org.mockito.Mockito + +class UrbanAirshipKitTest2 { + private val kit: KitIntegration + get() = UrbanAirshipKit() + + @Test + @Throws(Exception::class) + fun testGetName() { + val name = kit.name + Assert.assertTrue(!name.isNullOrEmpty()) + } + + /** + * Kit *should* throw an exception when they're initialized with the wrong settings. + * + */ + @Test + @Throws(Exception::class) + fun testOnKitCreate() { + var e: Exception? = null + try { + val kit = kit + val settings = HashMap() + settings["fake setting"] = "fake" + kit.onKitCreate(settings, Mockito.mock(Context::class.java)) + } catch (ex: Exception) { + e = ex + } + Assert.assertNotNull(e) + } + + @Test + @Throws(Exception::class) + fun testClassName() { + val options = Mockito.mock(MParticleOptions::class.java) + val factory = KitIntegrationFactory(options) + val integrations = factory.supportedKits.values + val className = kit.javaClass.name + for (integration in integrations) { + if (integration.name == className) { + return + } + } + Assert.fail("$className not found as a known integration.") + } + + @Test + @Throws(Exception::class) + fun testParsing() { + val config = + JSONObject( + "{ \"id\": 25, \"as\": { \"applicationKey\": \"this is the app key\", \"applicationSecret\": \"this is the app secret\", \"applicationMasterSecret\": \"mySecret\", \"domain\": \"EU\", \"enableTags\": \"True\", \"includeUserAttributes\": \"False\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"pressed\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"-1394780343\\\",\\\"value\\\":\\\"screen1\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"-2010155734\\\",\\\"value\\\":\\\"cart\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"245922523\\\",\\\"value\\\":\\\"gesture\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"245922523\\\",\\\"value\\\":\\\"a2ctid\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"1112195452\\\",\\\"value\\\":\\\"hello\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-897761755\\\",\\\"value\\\":\\\"a\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-635338283\\\",\\\"value\\\":\\\"b\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1165857198\\\",\\\"value\\\":\\\"c\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-2093257886\\\",\\\"value\\\":\\\"d\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"-599719438\\\",\\\"value\\\":\\\"e\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": {}, \"pr\": [] }", + ) + val kitConfig = MockKitConfiguration.createKitConfiguration(config) + val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) + Assert.assertEquals("this is the app key", urbanAirshipConfiguration.applicationKey) + Assert.assertEquals("this is the app secret", urbanAirshipConfiguration.applicationSecret) + Assert.assertEquals("EU", urbanAirshipConfiguration.domain) + Assert.assertEquals(true, urbanAirshipConfiguration.enableTags) + Assert.assertEquals(false, urbanAirshipConfiguration.includeUserAttributes) + Assert.assertEquals("Application Icon", urbanAirshipConfiguration.notificationIconName) + Assert.assertEquals("System default", urbanAirshipConfiguration.notificationColor) + Assert.assertEquals( + MParticle.IdentityType.CustomerId, + urbanAirshipConfiguration.userIdField, + ) + var eventTags: MutableMap> = urbanAirshipConfiguration.eventClass + + Assert.assertTrue(eventTags[-1394780343]?.get(0) == "screen1") + eventTags = urbanAirshipConfiguration.eventAttributeClass + Assert.assertTrue( + eventTags[245922523]?.contains("gesture") == true && + eventTags[245922523] + ?.contains("a2ctid") == true, + ) + Assert.assertTrue(eventTags[-2093257886]?.get(0) == "d") + eventTags = urbanAirshipConfiguration.eventClassDetails + Assert.assertTrue(eventTags[-2010155734]?.get(0) == "cart") + Assert.assertTrue(eventTags[847138800]?.get(0) == "pressed") + eventTags = urbanAirshipConfiguration.eventAttributeClassDetails + Assert.assertTrue(eventTags[1112195452]?.get(0) == "hello") + Assert.assertTrue(eventTags[-897761755]?.get(0) == "a") + Assert.assertTrue(eventTags[-635338283]?.get(0) == "b") + Assert.assertTrue(eventTags[-1165857198]?.get(0) == "c") + Assert.assertTrue(eventTags[-599719438]?.get(0) == "e") + } + + @Test + @Throws(Exception::class) + fun testExtractEventName() { + MParticle.setInstance(Mockito.mock(MParticle::class.java)) + val config = + JSONObject( + "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }", + ) + val kitConfig = MockKitConfiguration.createKitConfiguration(config) + val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) + val kit = UrbanAirshipKit() + kit.configuration = kitConfig + kit.setUrbanConfiguration(urbanAirshipConfiguration) + val event = + MPEvent.Builder("Navigation 2").eventType(MParticle.EventType.Navigation).build() + val set = kit.extractTags(event) + Assert.assertEquals(1, set.size.toLong()) + Assert.assertEquals("test even tag", set.iterator().next()) + } + + @Test + @Throws(Exception::class) + fun testExtractEventAttributes() { + MParticle.setInstance(Mockito.mock(MParticle::class.java)) + val config = + JSONObject( + "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }", + ) + val kitConfig = MockKitConfiguration.createKitConfiguration(config) + val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) + val kit = UrbanAirshipKit() + kit.configuration = kitConfig + kit.setUrbanConfiguration(urbanAirshipConfiguration) + val attributes = HashMap() + attributes["searchTerm"] = "anything" + val event = + MPEvent + .Builder("search") + .eventType(MParticle.EventType.Search) + .customAttributes(attributes) + .build() + val set = kit.extractTags(event) + Assert.assertEquals(2, set.size.toLong()) + Assert.assertTrue(set.contains("test event attribute")) + Assert.assertTrue(set.contains("test event attribute-anything")) + } + + @Test + @Throws(Exception::class) + fun testExtractScreenName() { + MParticle.setInstance(Mockito.mock(MParticle::class.java)) + val config = + JSONObject( + "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }", + ) + val kitConfig = MockKitConfiguration.createKitConfiguration(config) + val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) + val kit = UrbanAirshipKit() + kit.configuration = kitConfig + kit.setUrbanConfiguration(urbanAirshipConfiguration) + val set = kit.extractScreenTags("Screen Layout B", HashMap()) + Assert.assertEquals(1, set.size.toLong()) + Assert.assertEquals("test screen tag", set.iterator().next()) + } + + @Test + @Throws(Exception::class) + fun testExtractScreenAttribute() { + MParticle.setInstance(Mockito.mock(MParticle::class.java)) + val config = + JSONObject( + "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }", + ) + val kitConfig = MockKitConfiguration.createKitConfiguration(config) + val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) + val kit = UrbanAirshipKit() + kit.configuration = kitConfig + kit.setUrbanConfiguration(urbanAirshipConfiguration) + val attributes = HashMap() + attributes["version"] = "anything" + val set = kit.extractScreenTags("Main Screen", attributes) + Assert.assertEquals(2, set.size.toLong()) + Assert.assertTrue(set.contains("test screen attribute")) + Assert.assertTrue(set.contains("test screen attribute-anything")) + } + + @Test + @Throws(Exception::class) + fun testExtractEcommEventType() { + MParticle.setInstance(Mockito.mock(MParticle::class.java)) + Mockito + .`when`(MParticle.getInstance()?.environment) + .thenReturn(MParticle.Environment.Development) + val config = + JSONObject( + "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }", + ) + val kitConfig = MockKitConfiguration.createKitConfiguration(config) + val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) + val kit = UrbanAirshipKit() + kit.configuration = kitConfig + kit.setUrbanConfiguration(urbanAirshipConfiguration) + val event = + CommerceEvent + .Builder(Product.ADD_TO_CART, Product.Builder("name", "sku", 10.0).build()) + .build() + val set = kit.extractCommerceTags(event) + Assert.assertEquals(1, set.size.toLong()) + Assert.assertEquals("test ecomm add to cart tag", set.iterator().next()) + } + + @Test + @Throws(Exception::class) + fun testExtractEcommAttribute() { + MParticle.setInstance(Mockito.mock(MParticle::class.java)) + Mockito + .`when`(MParticle.getInstance()!!.environment) + .thenReturn(MParticle.Environment.Development) + val config = + JSONObject( + "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }", + ) + val kitConfig = MockKitConfiguration.createKitConfiguration(config) + val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) + val kit = UrbanAirshipKit() + kit.configuration = kitConfig + kit.setUrbanConfiguration(urbanAirshipConfiguration) + val event = + CommerceEvent + .Builder(Product.PURCHASE, Product.Builder("name", "sku", 10.0).build()) + .transactionAttributes( + TransactionAttributes("id").setRevenue(10.0), + ).build() + val set = kit.extractCommerceTags(event) + Assert.assertEquals(2, set.size.toLong()) + Assert.assertTrue(set.contains("test eComm attribute total amount")) + Assert.assertTrue(set.toString(), set.contains("test eComm attribute total amount-10.0")) + } + + @Test + @Throws(Exception::class) + fun testExtractEcommAttribute2() { + MParticle.setInstance(Mockito.mock(MParticle::class.java)) + Mockito + .`when`(MParticle.getInstance()?.environment) + .thenReturn(MParticle.Environment.Development) + val config = + JSONObject( + "{ \"id\": 25, \"as\": { \"applicationKey\": \"1234456\", \"applicationSecret\": \"123456\", \"applicationMasterSecret\": \"123456\", \"enableTags\": \"True\", \"includeUserAttributes\": \"True\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"1824528343\\\",\\\"value\\\":\\\"test even tag\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"test screen tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"1567\\\",\\\"value\\\":\\\"test ecomm add to cart tag\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"-241024017\\\",\\\"value\\\":\\\"test event attribute\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"861397237\\\",\\\"value\\\":\\\"test screen attribute\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1854578855\\\",\\\"value\\\":\\\"test eComm attribute total amount\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1001670849\\\",\\\"value\\\":\\\"test eComm checkout promo code\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": { \"et\": { \"50\": 0, \"51\": 0 }, \"ec\": { \"-460386492\": 0, \"476338248\": 0, \"-1229406110\": 0, \"-1528980234\": 0, \"-138049017\": 0, \"360094366\": 0, \"-1711952615\": 0, \"1238657721\": 0, \"1057880655\": 0, \"-1415615126\": 0, \"-1573616412\": 0, \"-1417002190\": 0, \"1794482897\": 0, \"-1471969403\": 0, \"1981524391\": 0, \"1025548221\": 0, \"-956692642\": 0, \"-1535298586\": 0 }, \"ea\": { \"-1034789330\": 0, \"-820700541\": 0, \"454072115\": 0, \"1283264677\": 0, \"2132567239\": 0, \"644132244\": 0, \"-576148370\": 0, \"6478943\": 0, \"-1676187368\": 0, \"535860203\": 0, \"260811952\": 0, \"-2143124485\": 0, \"526806372\": 0, \"-261733467\": 0, \"-1809553213\": 0, \"1850278251\": 0 } }, \"pr\": [] }", + ) + val kitConfig = MockKitConfiguration.createKitConfiguration(config) + val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) + val kit = UrbanAirshipKit() + kit.configuration = kitConfig + kit.setUrbanConfiguration(urbanAirshipConfiguration) + val map = HashMap() + map["Promo Code"] = "this is a promo code" + val event = + CommerceEvent + .Builder( + Product.CHECKOUT, + Product.Builder("name", "sku", 10.0).customAttributes(map).build(), + ).build() + val set = kit.extractCommerceTags(event) + Assert.assertEquals(2, set.size.toLong()) + Assert.assertTrue(set.contains("test eComm checkout promo code")) + Assert.assertTrue( + set.toString(), + set.contains("test eComm checkout promo code-this is a promo code"), + ) + } +} From 795e93970c0e509236a18ffb6d977ce457e02697 Mon Sep 17 00:00:00 2001 From: Mansi Pandya Date: Thu, 22 Jan 2026 14:53:24 -0500 Subject: [PATCH 3/3] Rename file name --- .../{UrbanAirshipKitTest2.kt => UrbanAirshipKitTests.kt} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename src/test/kotlin/com/mparticle/kits/{UrbanAirshipKitTest2.kt => UrbanAirshipKitTests.kt} (98%) diff --git a/src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTest2.kt b/src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTests.kt similarity index 98% rename from src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTest2.kt rename to src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTests.kt index b61d9ab..fd6ff43 100644 --- a/src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTest2.kt +++ b/src/test/kotlin/com/mparticle/kits/UrbanAirshipKitTests.kt @@ -12,7 +12,7 @@ import org.junit.Assert import org.junit.Test import org.mockito.Mockito -class UrbanAirshipKitTest2 { +class UrbanAirshipKitTests { private val kit: KitIntegration get() = UrbanAirshipKit() @@ -62,7 +62,7 @@ class UrbanAirshipKitTest2 { fun testParsing() { val config = JSONObject( - "{ \"id\": 25, \"as\": { \"applicationKey\": \"this is the app key\", \"applicationSecret\": \"this is the app secret\", \"applicationMasterSecret\": \"mySecret\", \"domain\": \"EU\", \"enableTags\": \"True\", \"includeUserAttributes\": \"False\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"pressed\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"-1394780343\\\",\\\"value\\\":\\\"screen1\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"-2010155734\\\",\\\"value\\\":\\\"cart\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"245922523\\\",\\\"value\\\":\\\"gesture\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"245922523\\\",\\\"value\\\":\\\"a2ctid\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"1112195452\\\",\\\"value\\\":\\\"hello\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-897761755\\\",\\\"value\\\":\\\"a\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-635338283\\\",\\\"value\\\":\\\"b\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1165857198\\\",\\\"value\\\":\\\"c\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-2093257886\\\",\\\"value\\\":\\\"d\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"-599719438\\\",\\\"value\\\":\\\"e\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": {}, \"pr\": [] }", + "{ \"id\": 25, \"as\": { \"applicationKey\": \"this is the app key\", \"applicationSecret\": \"this is the app secret\", \"applicationMasterSecret\": \"mySecret\", \"domain\": \"EU\", \"enableTags\": \"True\", \"includeUserAttributes\": \"False\", \"notificationIconName\": \"Application Icon\", \"notificationColor\": \"System default\", \"namedUserIdField\": \"customerId\", \"eventUserTags\": \"[{\\\"map\\\":\\\"847138800\\\",\\\"value\\\":\\\"pressed\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"},{\\\"map\\\":\\\"-1394780343\\\",\\\"value\\\":\\\"screen1\\\",\\\"maptype\\\":\\\"EventClass.Id\\\"},{\\\"map\\\":\\\"-2010155734\\\",\\\"value\\\":\\\"cart\\\",\\\"maptype\\\":\\\"EventClassDetails.Id\\\"}]\", \"eventAttributeUserTags\": \"[{\\\"map\\\":\\\"245922523\\\",\\\"value\\\":\\\"gesture\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"245922523\\\",\\\"value\\\":\\\"a2ctid\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"1112195452\\\",\\\"value\\\":\\\"hello\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-897761755\\\",\\\"value\\\":\\\"a\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-635338283\\\",\\\"value\\\":\\\"b\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"},{\\\"map\\\":\\\"-1165857198\\\",\\\"value\\\":\\\"c\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"-2093257886\\\",\\\"value\\\":\\\"d\\\",\\\"maptype\\\":\\\"EventAttributeClass.Id\\\"},{\\\"map\\\":\\\"-599719438\\\",\\\"value\\\":\\\"e\\\",\\\"maptype\\\":\\\"EventAttributeClassDetails.Id\\\"}]\" }, \"hs\": {}, \"pr\": [] }", ) val kitConfig = MockKitConfiguration.createKitConfiguration(config) val urbanAirshipConfiguration = UrbanAirshipConfiguration(kitConfig.settings) @@ -87,6 +87,7 @@ class UrbanAirshipKitTest2 { ?.contains("a2ctid") == true, ) Assert.assertTrue(eventTags[-2093257886]?.get(0) == "d") + Assert.assertTrue(eventTags[-1165857198]?.get(0) == "c") eventTags = urbanAirshipConfiguration.eventClassDetails Assert.assertTrue(eventTags[-2010155734]?.get(0) == "cart") Assert.assertTrue(eventTags[847138800]?.get(0) == "pressed") @@ -94,7 +95,6 @@ class UrbanAirshipKitTest2 { Assert.assertTrue(eventTags[1112195452]?.get(0) == "hello") Assert.assertTrue(eventTags[-897761755]?.get(0) == "a") Assert.assertTrue(eventTags[-635338283]?.get(0) == "b") - Assert.assertTrue(eventTags[-1165857198]?.get(0) == "c") Assert.assertTrue(eventTags[-599719438]?.get(0) == "e") }