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