From 1b9f00c849461a743813e2308021c13b2b04eb5d Mon Sep 17 00:00:00 2001 From: xyzcancer Date: Wed, 17 Jun 2026 10:32:18 +0400 Subject: [PATCH] DEV-648: order methods --- demo-app/build.gradle | 3 + demo-app/local.properties.template | 8 ++ .../personalization/demo/OrdersDemoE2ETest.kt | 29 ++++++ .../com/personalization/demo/MainActivity.kt | 63 ++++++++++++ .../src/main/res/layout/activity_main.xml | 14 +++ demo-app/src/main/res/values/strings.xml | 6 ++ .../main/kotlin/com/personalization/SDK.kt | 4 + .../api/managers/OrdersManager.kt | 46 +++++++++ .../orders/GetLastOrderProductsResponse.kt | 13 +++ .../responses/orders/GetUserOrdersResponse.kt | 18 ++++ .../api/responses/orders/Order.kt | 47 +++++++++ .../api/responses/orders/OrderItem.kt | 28 ++++++ .../com/personalization/di/SdkModule.kt | 10 ++ .../features/orders/impl/OrdersManagerImpl.kt | 95 +++++++++++++++++++ 14 files changed, 384 insertions(+) create mode 100644 demo-app/local.properties.template create mode 100644 demo-app/src/androidTest/java/com/personalization/demo/OrdersDemoE2ETest.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/managers/OrdersManager.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/orders/GetLastOrderProductsResponse.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/orders/GetUserOrdersResponse.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/orders/Order.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/api/responses/orders/OrderItem.kt create mode 100644 personalization-sdk/src/main/kotlin/com/personalization/features/orders/impl/OrdersManagerImpl.kt diff --git a/demo-app/build.gradle b/demo-app/build.gradle index 16927520..c569e864 100644 --- a/demo-app/build.gradle +++ b/demo-app/build.gradle @@ -19,6 +19,8 @@ android { localProperties.load(new FileInputStream(localPropertiesFile)) } def shopId = localProperties.getProperty('shop.id', '357382bf66ac0ce2f1722677c59511') + // Server-side shop secret (orders/by_user). Kept out of source — set shop.secret in local.properties. + def shopSecret = localProperties.getProperty('shop.secret', 'demo-shop-secret') defaultConfig { applicationId "com.personalization.demo" @@ -32,6 +34,7 @@ android { // Add shop ID to BuildConfig buildConfigField "String", "SHOP_ID", "\"${shopId}\"" + buildConfigField "String", "SHOP_SECRET", "\"${shopSecret}\"" } productFlavors { diff --git a/demo-app/local.properties.template b/demo-app/local.properties.template new file mode 100644 index 00000000..c7f0e700 --- /dev/null +++ b/demo-app/local.properties.template @@ -0,0 +1,8 @@ +# Template for demo-app credentials. Copy the relevant lines into your local.properties +# (root local.properties is read first, then demo-app/local.properties). Never commit real values. + +# Public shop identifier (sent on every request). +shop.id=YOUR_SHOP_ID + +# Server-side shop secret — required only for orders/by_user. Keep it local, never commit. +shop.secret=YOUR_SHOP_SECRET diff --git a/demo-app/src/androidTest/java/com/personalization/demo/OrdersDemoE2ETest.kt b/demo-app/src/androidTest/java/com/personalization/demo/OrdersDemoE2ETest.kt new file mode 100644 index 00000000..6934b78a --- /dev/null +++ b/demo-app/src/androidTest/java/com/personalization/demo/OrdersDemoE2ETest.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 OrdersDemoE2ETest { + + @get:Rule + val activityRule = ActivityScenarioRule(MainActivity::class.java) + + @Test + fun getLastOrderProducts_tapButton_noCrash() { + onView(withId(R.id.btnGetLastOrderProducts)).perform(click()) + Thread.sleep(1500) + } + + @Test + fun getUserOrders_tapButton_noCrash() { + onView(withId(R.id.btnGetUserOrders)).perform(click()) + Thread.sleep(1500) + } +} 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 f210c8fe..b24991d9 100644 --- a/demo-app/src/main/java/com/personalization/demo/MainActivity.kt +++ b/demo-app/src/main/java/com/personalization/demo/MainActivity.kt @@ -38,6 +38,14 @@ class MainActivity : AppCompatActivity() { const val COLLISION_PLACEHOLDER_VALUE = "collision_demo" } + private object DemoOrdersConstants { + /** + * Server-side shop secret for `orders/by_user`. Sourced from `shop.secret` in local.properties + * (gitignored) via BuildConfig — never hardcode a real secret here. Falls back to a placeholder. + */ + val SHOP_SECRET = BuildConfig.SHOP_SECRET + } + private object DemoProductViewConstants { const val PRODUCT_ID = "demo-product-view-001" const val DEMO_PRICE = 2499.99 @@ -121,6 +129,61 @@ class MainActivity : AppCompatActivity() { findViewById