From 88ea953b88b387bfafce17bd6c0586a0e5290fb0 Mon Sep 17 00:00:00 2001 From: xyzcancer Date: Tue, 21 Apr 2026 11:49:39 +0400 Subject: [PATCH] DEV-4091: strict contract for order tracking + deprcation warnings --- .../demo/TrackPurchaseDemoE2ETest.kt | 29 ++++ .../com/personalization/demo/MainActivity.kt | 114 ++++++++++++ .../src/main/res/layout/activity_main.xml | 14 ++ demo-app/src/main/res/values/strings.xml | 4 + personalization-sdk/CHANGELOG.md | 15 ++ ...haseTrackingJsonBuilderInstrumentedTest.kt | 81 +++++++++ .../main/kotlin/com/personalization/Params.kt | 4 + .../main/kotlin/com/personalization/SDK.kt | 13 ++ .../api/managers/TrackEventManager.kt | 9 + .../models/purchase/PurchaseItemRequest.kt | 16 ++ .../purchase/PurchaseTrackingRequest.kt | 31 ++++ .../purchase/PurchaseTrackingWireKeys.kt | 30 ++++ .../impl/PurchaseTrackingJsonBuilder.kt | 162 ++++++++++++++++++ .../trackEvent/impl/TrackEventManagerImpl.kt | 35 ++++ .../network/NetworkRepositoryImpl.kt | 32 +++- .../PurchaseTrackingJsonBuilderJvmTest.kt | 36 ++++ 16 files changed, 623 insertions(+), 2 deletions(-) create mode 100644 demo-app/src/androidTest/java/com/personalization/demo/TrackPurchaseDemoE2ETest.kt create mode 100644 personalization-sdk/CHANGELOG.md create mode 100644 personalization-sdk/src/androidTest/kotlin/com/personalization/features/trackEvent/impl/PurchaseTrackingJsonBuilderInstrumentedTest.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/models/purchase/PurchaseItemRequest.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/models/purchase/PurchaseTrackingRequest.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/models/purchase/PurchaseTrackingWireKeys.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/features/trackEvent/impl/PurchaseTrackingJsonBuilder.kt create mode 100644 personalization-sdk/src/test/kotlin/com/personalization/features/trackEvent/impl/PurchaseTrackingJsonBuilderJvmTest.kt diff --git a/demo-app/src/androidTest/java/com/personalization/demo/TrackPurchaseDemoE2ETest.kt b/demo-app/src/androidTest/java/com/personalization/demo/TrackPurchaseDemoE2ETest.kt new file mode 100644 index 00000000..ad9175b2 --- /dev/null +++ b/demo-app/src/androidTest/java/com/personalization/demo/TrackPurchaseDemoE2ETest.kt @@ -0,0 +1,29 @@ +package com.personalization.demo + +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.matcher.ViewMatchers.withId +import androidx.test.ext.junit.rules.ActivityScenarioRule +import androidx.test.ext.junit.runners.AndroidJUnit4 +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class TrackPurchaseDemoE2ETest { + + @get:Rule + val activityRule = ActivityScenarioRule(MainActivity::class.java) + + @Test + fun trackPurchaseMinimal_tapButton_noCrash() { + onView(withId(R.id.btnTrackPurchaseMinimal)).perform(click()) + Thread.sleep(800) + } + + @Test + fun trackPurchaseFull_tapButton_noCrash() { + onView(withId(R.id.btnTrackPurchaseFull)).perform(click()) + Thread.sleep(800) + } +} diff --git a/demo-app/src/main/java/com/personalization/demo/MainActivity.kt b/demo-app/src/main/java/com/personalization/demo/MainActivity.kt index 3975207a..f210c8fe 100644 --- a/demo-app/src/main/java/com/personalization/demo/MainActivity.kt +++ b/demo-app/src/main/java/com/personalization/demo/MainActivity.kt @@ -9,6 +9,8 @@ import com.personalization.Params import com.personalization.Params.TrackEvent import com.personalization.SDK import com.personalization.api.OnApiCallbackListener +import com.personalization.api.models.purchase.PurchaseItemRequest +import com.personalization.api.models.purchase.PurchaseTrackingRequest import com.personalization.api.params.ProductItemParams import com.personalization.api.params.PurchasePredictParams import com.personalization.demo.BuildConfig @@ -42,6 +44,16 @@ class MainActivity : AppCompatActivity() { const val DEMO_AMOUNT = 1 } + private object DemoPurchaseTrackingConstants { + const val ORDER_ID_MINIMAL = "android-demo-order-minimal" + const val ORDER_ID_FULL = "android-demo-order-full" + const val ORDER_PRICE_MINIMAL = 199.0 + const val ORDER_PRICE_FULL = 999.0 + const val ITEM_ID = "android-demo-sku-001" + const val ITEM_AMOUNT = 1 + const val ITEM_PRICE = 99.0 + } + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) @@ -101,6 +113,108 @@ class MainActivity : AppCompatActivity() { PurchasePredictParams(email = getString(R.string.predict_demo_email)) ) } + + findViewById