From 056fdf05770c8f2cdf7bb51cf5463cc6566f98b2 Mon Sep 17 00:00:00 2001 From: xyzcancer Date: Fri, 19 Jun 2026 17:44:32 +0400 Subject: [PATCH] DEV-3362: loyalty methods --- .../demo/LoyaltyIntegrationTest.kt | 37 ++++ .../com/personalization/demo/MainActivity.kt | 71 ++++++++ .../src/main/res/layout/activity_main.xml | 31 +++- demo-app/src/main/res/values/strings.xml | 6 + .../main/kotlin/com/personalization/SDK.kt | 4 + .../api/managers/LoyaltyManager.kt | 44 +++++ .../responses/loyalty/LoyaltyJoinResponse.kt | 18 ++ .../loyalty/LoyaltyStatusResponse.kt | 31 ++++ .../com/personalization/di/SdkModule.kt | 10 ++ .../loyalty/impl/LoyaltyManagerImpl.kt | 87 ++++++++++ .../loyalty/impl/LoyaltyManagerImplTest.kt | 162 ++++++++++++++++++ 11 files changed, 496 insertions(+), 5 deletions(-) create mode 100644 demo-app/src/androidTest/java/com/personalization/demo/LoyaltyIntegrationTest.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/managers/LoyaltyManager.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/loyalty/LoyaltyJoinResponse.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/loyalty/LoyaltyStatusResponse.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/features/loyalty/impl/LoyaltyManagerImpl.kt create mode 100644 personalization-sdk/src/test/kotlin/com/personalization/features/loyalty/impl/LoyaltyManagerImplTest.kt diff --git a/demo-app/src/androidTest/java/com/personalization/demo/LoyaltyIntegrationTest.kt b/demo-app/src/androidTest/java/com/personalization/demo/LoyaltyIntegrationTest.kt new file mode 100644 index 00000000..1cbdc049 --- /dev/null +++ b/demo-app/src/androidTest/java/com/personalization/demo/LoyaltyIntegrationTest.kt @@ -0,0 +1,37 @@ +package com.personalization.demo + +import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.action.ViewActions.click +import androidx.test.espresso.action.ViewActions.scrollTo +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 + +/** + * On-device E2E for the loyalty demo buttons. Launches [MainActivity] (which performs the real + * production Firebase + SDK initialization) and taps the loyalty buttons, exercising + * `loyaltyManager.join` / `loyaltyManager.getStatus` against the live REES46 API on the emulator. + * + * Mirrors [OrdersDemoE2ETest]: asserts the real on-device code path runs without crashing. + */ +@RunWith(AndroidJUnit4::class) +class LoyaltyIntegrationTest { + + @get:Rule + val activityRule = ActivityScenarioRule(MainActivity::class.java) + + @Test + fun loyaltyJoin_tapButton_noCrash() { + onView(withId(R.id.btnLoyaltyJoin)).perform(scrollTo(), click()) + Thread.sleep(3000) + } + + @Test + fun loyaltyStatus_tapButton_noCrash() { + onView(withId(R.id.btnLoyaltyStatus)).perform(scrollTo(), click()) + Thread.sleep(3000) + } +} 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 b24991d9..9131b62c 100644 --- a/demo-app/src/main/java/com/personalization/demo/MainActivity.kt +++ b/demo-app/src/main/java/com/personalization/demo/MainActivity.kt @@ -46,6 +46,13 @@ class MainActivity : AppCompatActivity() { val SHOP_SECRET = BuildConfig.SHOP_SECRET } + private object DemoLoyaltyConstants { + const val PHONE = "79991234567" + const val EMAIL = "demo@rees46.ru" + const val FIRST_NAME = "Demo" + const val LAST_NAME = "User" + } + private object DemoProductViewConstants { const val PRODUCT_ID = "demo-product-view-001" const val DEMO_PRICE = 2499.99 @@ -137,6 +144,70 @@ class MainActivity : AppCompatActivity() { findViewById