Skip to content

Commit fb6bbba

Browse files
feat: Send ProductName to Braze (#174)
1 parent c648bdb commit fb6bbba

File tree

2 files changed

+87
-4
lines changed

2 files changed

+87
-4
lines changed

src/main/kotlin/com/mparticle/kits/AppboyKit.kt

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -613,8 +613,18 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
613613
}
614614
}
615615

616+
var sanitizedProductName: String = product.sku
617+
try {
618+
if (settings[REPLACE_SKU_AS_PRODUCT_NAME] == "True") {
619+
sanitizedProductName = product.name
620+
}
621+
} catch (e: Exception) {
622+
Logger.error(e, "The Braze kit threw an exception while searching for forward sku as product name flag.")
623+
624+
}
625+
616626
Braze.Companion.getInstance(context).logPurchase(
617-
product.sku,
627+
sanitizedProductName,
618628
currencyValue,
619629
BigDecimal(product.unitPrice),
620630
product.quantity.toInt(),
@@ -1076,6 +1086,8 @@ open class AppboyKit : KitIntegration(), AttributeListener, CommerceListener,
10761086
const val HOST = "host"
10771087
const val PUSH_ENABLED = "push_enabled"
10781088
const val NAME = "Appboy"
1089+
// if this flag is true, kit will send Product name as sku
1090+
const val REPLACE_SKU_AS_PRODUCT_NAME = "forwardSkuAsProductName"
10791091
private const val PREF_KEY_HAS_SYNCED_ATTRIBUTES = "appboy::has_synced_attributes"
10801092
private const val PREF_KEY_CURRENT_EMAIL = "appboy::current_email"
10811093
private const val FLUSH_DELAY = 5000

src/test/kotlin/com/mparticle/kits/AppboyKitTest.kt

Lines changed: 74 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -964,7 +964,7 @@ class AppboyKitTests {
964964
eaaObject.put("eaa", mapValue)
965965
jsonObject.put("hs", eaaObject)
966966

967-
Mockito.`when`(mTypeFilters!!.size()).thenReturn(0)
967+
Mockito.`when`(mTypeFilters!!.size()).thenReturn(0)
968968

969969
var kitConfiguration = MockKitConfiguration.createKitConfiguration(jsonObject)
970970
kit.configuration = kitConfiguration
@@ -1002,7 +1002,7 @@ class AppboyKitTests {
10021002
eaaObject.put("ear", mapValue)
10031003
jsonObject.put("hs", eaaObject)
10041004

1005-
Mockito.`when`(mTypeFilters!!.size()).thenReturn(0)
1005+
Mockito.`when`(mTypeFilters!!.size()).thenReturn(0)
10061006

10071007
var kitConfiguration = MockKitConfiguration.createKitConfiguration(jsonObject)
10081008
kit.configuration = kitConfiguration
@@ -1033,7 +1033,7 @@ class AppboyKitTests {
10331033
eaaObject.put("eas", mapValue)
10341034
jsonObject.put("hs", eaaObject)
10351035

1036-
Mockito.`when`(mTypeFilters!!.size()).thenReturn(0)
1036+
Mockito.`when`(mTypeFilters!!.size()).thenReturn(0)
10371037

10381038
var kitConfiguration = MockKitConfiguration.createKitConfiguration(jsonObject)
10391039
kit.configuration = kitConfiguration
@@ -1290,4 +1290,75 @@ class AppboyKitTests {
12901290
TestCase.assertEquals(0, currentUser.getCustomUserAttribute().size)
12911291

12921292
}
1293+
1294+
@Test
1295+
fun testPurchase_Forward_product_name() {
1296+
var settings = HashMap<String, String?>()
1297+
settings[AppboyKit.APPBOY_KEY] = "key"
1298+
settings[AppboyKit.REPLACE_SKU_AS_PRODUCT_NAME] = "True"
1299+
val kit = MockAppboyKit()
1300+
1301+
kit.configuration =
1302+
KitConfiguration.createKitConfiguration(JSONObject().put("as", settings))
1303+
kit.onKitCreate(settings, MockContextApplication())
1304+
val product = Product.Builder("product name", "sku1", 4.5)
1305+
.build()
1306+
val commerceEvent = CommerceEvent.Builder(Product.CHECKOUT, product)
1307+
.currency("Moon Dollars")
1308+
.build()
1309+
kit.logTransaction(commerceEvent, product)
1310+
val braze = Braze
1311+
val purchases = braze.purchases
1312+
Assert.assertEquals(1, purchases.size.toLong())
1313+
val purchase = purchases[0]
1314+
Assert.assertEquals("product name", purchase.sku)
1315+
Assert.assertNull(purchase.purchaseProperties.properties[CommerceEventUtils.Constants.ATT_ACTION_CURRENCY_CODE])
1316+
}
1317+
1318+
@Test
1319+
fun testPurchase_Forward_product_name_When_flag_IS_FALSE() {
1320+
var settings = HashMap<String, String?>()
1321+
settings[AppboyKit.APPBOY_KEY] = "key"
1322+
settings[AppboyKit.REPLACE_SKU_AS_PRODUCT_NAME] = "False"
1323+
val kit = MockAppboyKit()
1324+
1325+
kit.configuration =
1326+
KitConfiguration.createKitConfiguration(JSONObject().put("as", settings))
1327+
kit.onKitCreate(settings, MockContextApplication())
1328+
val product = Product.Builder("product name", "sku1", 4.5)
1329+
.build()
1330+
val commerceEvent = CommerceEvent.Builder(Product.CHECKOUT, product)
1331+
.currency("Moon Dollars")
1332+
.build()
1333+
kit.logTransaction(commerceEvent, product)
1334+
val braze = Braze
1335+
val purchases = braze.purchases
1336+
Assert.assertEquals(1, purchases.size.toLong())
1337+
val purchase = purchases[0]
1338+
Assert.assertEquals("sku1", purchase.sku)
1339+
Assert.assertNull(purchase.purchaseProperties.properties[CommerceEventUtils.Constants.ATT_ACTION_CURRENCY_CODE])
1340+
}
1341+
1342+
@Test
1343+
fun testPurchase_Forward_product_name_When_flag_IS_Null() {
1344+
var settings = HashMap<String, String?>()
1345+
settings[AppboyKit.APPBOY_KEY] = "key"
1346+
val kit = MockAppboyKit()
1347+
1348+
kit.configuration =
1349+
KitConfiguration.createKitConfiguration(JSONObject().put("as", settings))
1350+
kit.onKitCreate(settings, MockContextApplication())
1351+
val product = Product.Builder("product name", "sku1", 4.5)
1352+
.build()
1353+
val commerceEvent = CommerceEvent.Builder(Product.CHECKOUT, product)
1354+
.currency("Moon Dollars")
1355+
.build()
1356+
kit.logTransaction(commerceEvent, product)
1357+
val braze = Braze
1358+
val purchases = braze.purchases
1359+
Assert.assertEquals(1, purchases.size.toLong())
1360+
val purchase = purchases[0]
1361+
Assert.assertEquals("sku1", purchase.sku)
1362+
Assert.assertNull(purchase.purchaseProperties.properties[CommerceEventUtils.Constants.ATT_ACTION_CURRENCY_CODE])
1363+
}
12931364
}

0 commit comments

Comments
 (0)