From e8a697a3b78236ea3a6b43d107e2397266bc4fd5 Mon Sep 17 00:00:00 2001 From: xyzcancer Date: Thu, 25 Jun 2026 14:17:33 +0400 Subject: [PATCH 1/3] feat: add profile, product counters, category and collection read methods DEV-3362 --- .../demo/CatalogReadIntegrationTest.kt | 50 +++++++ .../com/personalization/demo/MainActivity.kt | 127 ++++++++++++++++++ .../src/main/res/layout/activity_main.xml | 28 ++++ demo-app/src/main/res/values/strings.xml | 12 ++ .../main/kotlin/com/personalization/SDK.kt | 12 ++ .../api/managers/CategoryManager.kt | 32 +++++ .../api/managers/CollectionManager.kt | 32 +++++ .../api/managers/ProductsManager.kt | 15 +++ .../api/managers/ProfileManager.kt | 20 +++ .../responses/category/CategoryResponse.kt | 35 +++++ .../collection/CollectionResponse.kt | 14 ++ .../counters/ProductCountersResponse.kt | 33 +++++ .../responses/profile/GetProfileResponse.kt | 36 +++++ .../com/personalization/di/SdkModule.kt | 30 +++++ .../category/impl/CategoryManagerImpl.kt | 63 +++++++++ .../collection/impl/CollectionManagerImpl.kt | 61 +++++++++ .../products/impl/ProductsManagerImpl.kt | 29 ++++ .../profile/impl/ProfileManagerImpl.kt | 43 ++++++ .../category/impl/CategoryManagerImplTest.kt | 113 ++++++++++++++++ .../impl/CollectionManagerImplTest.kt | 109 +++++++++++++++ .../products/impl/ProductsManagerImplTest.kt | 92 +++++++++++++ .../profile/impl/ProfileManagerImplTest.kt | 92 +++++++++++++ 22 files changed, 1078 insertions(+) create mode 100644 demo-app/src/androidTest/java/com/personalization/demo/CatalogReadIntegrationTest.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/managers/CategoryManager.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/managers/CollectionManager.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/managers/ProfileManager.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/category/CategoryResponse.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/collection/CollectionResponse.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/products/counters/ProductCountersResponse.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/profile/GetProfileResponse.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/features/category/impl/CategoryManagerImpl.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/features/collection/impl/CollectionManagerImpl.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/features/profile/impl/ProfileManagerImpl.kt create mode 100644 personalization-sdk/src/test/kotlin/com/personalization/features/category/impl/CategoryManagerImplTest.kt create mode 100644 personalization-sdk/src/test/kotlin/com/personalization/features/collection/impl/CollectionManagerImplTest.kt create mode 100644 personalization-sdk/src/test/kotlin/com/personalization/features/products/impl/ProductsManagerImplTest.kt create mode 100644 personalization-sdk/src/test/kotlin/com/personalization/features/profile/impl/ProfileManagerImplTest.kt diff --git a/demo-app/src/androidTest/java/com/personalization/demo/CatalogReadIntegrationTest.kt b/demo-app/src/androidTest/java/com/personalization/demo/CatalogReadIntegrationTest.kt new file mode 100644 index 00000000..2c2960dc --- /dev/null +++ b/demo-app/src/androidTest/java/com/personalization/demo/CatalogReadIntegrationTest.kt @@ -0,0 +1,50 @@ +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 catalog/profile read demo buttons. Launches [MainActivity] + * (real production Firebase + SDK init) and taps the buttons, exercising + * `profileManager.getProfile`, `productsManager.getProductCounters` and + * `categoryManager.getCategory` against the live REES46 API on the emulator. + * + * Mirrors [LoyaltyIntegrationTest]: asserts the real on-device code path runs without crashing. + */ +@RunWith(AndroidJUnit4::class) +class CatalogReadIntegrationTest { + + @get:Rule + val activityRule = ActivityScenarioRule(MainActivity::class.java) + + @Test + fun getProfile_tapButton_noCrash() { + onView(withId(R.id.btnGetProfile)).perform(scrollTo(), click()) + Thread.sleep(3000) + } + + @Test + fun getProductCounters_tapButton_noCrash() { + onView(withId(R.id.btnGetProductCounters)).perform(scrollTo(), click()) + Thread.sleep(3000) + } + + @Test + fun getCategory_tapButton_noCrash() { + onView(withId(R.id.btnGetCategory)).perform(scrollTo(), click()) + Thread.sleep(3000) + } + + @Test + fun getCollection_tapButton_noCrash() { + onView(withId(R.id.btnGetCollection)).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 9131b62c..484d9ceb 100644 --- a/demo-app/src/main/java/com/personalization/demo/MainActivity.kt +++ b/demo-app/src/main/java/com/personalization/demo/MainActivity.kt @@ -53,6 +53,12 @@ class MainActivity : AppCompatActivity() { const val LAST_NAME = "User" } + private object DemoCatalogConstants { + const val ITEM_ID = "300275" + const val CATEGORY_SLUG = "smartfony-i-gadzhety" + const val COLLECTION_ID = "1" + } + private object DemoProductViewConstants { const val PRODUCT_ID = "demo-product-view-001" const val DEMO_PRICE = 2499.99 @@ -152,6 +158,127 @@ class MainActivity : AppCompatActivity() { findViewById