From 7ea34e32c1d9a40a66af4a318be66d73eb518917 Mon Sep 17 00:00:00 2001 From: QiuSW <105186638@qq.com> Date: Wed, 9 Sep 2026 09:48:10 +0800 Subject: [PATCH] fix(android): restore address evidence after returning to spec panel #246 --- android/app/build.gradle.kts | 4 +-- .../automation/PurchaseLiveAutomation.kt | 7 +++-- .../agent/PurchaseLiveAutomationTest.kt | 30 +++++++++++++++++++ 3 files changed, 37 insertions(+), 4 deletions(-) diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 4204c63..3ded304 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -11,8 +11,8 @@ android { applicationId = "cn.ilapage.goauto.agent" minSdk = 23 targetSdk = 34 - versionCode = 76 - versionName = "0.9.63" + versionCode = 77 + versionName = "0.9.64" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" diff --git a/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PurchaseLiveAutomation.kt b/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PurchaseLiveAutomation.kt index b68517a..4bdcab8 100644 --- a/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PurchaseLiveAutomation.kt +++ b/android/app/src/main/java/cn/ilapage/goauto/agent/automation/PurchaseLiveAutomation.kt @@ -491,8 +491,11 @@ class PurchaseLiveAutomation( restoreFinalEvidenceInCurrentPanel(savedEvidence, expected, suffix) } else { if (!driver.backPurchase()) fail("PURCHASE_ADDRESS_UPDATE_FAILED", "地址保存后无法返回订单页面,未创建订单") - waitFor("PURCHASE_ADDRESS_SAVE_TIMEOUT", "地址保存后无法返回订单页面,未创建订单") { - hasFinalSavedAddressEvidence(it, expected, suffix) + val returned = waitFor("PURCHASE_ADDRESS_SAVE_TIMEOUT", "地址保存后无法返回订单页面,未创建订单") { + hasFinalSavedAddressEvidence(it, expected, suffix) || isPurchaseConfirmationPanel(it) + } + if (!hasFinalSavedAddressEvidence(returned, expected, suffix)) { + restoreFinalEvidenceInCurrentPanel(returned, expected, suffix) } } } diff --git a/android/app/src/test/java/cn/ilapage/goauto/agent/PurchaseLiveAutomationTest.kt b/android/app/src/test/java/cn/ilapage/goauto/agent/PurchaseLiveAutomationTest.kt index 7b6a5b7..5041a11 100644 --- a/android/app/src/test/java/cn/ilapage/goauto/agent/PurchaseLiveAutomationTest.kt +++ b/android/app/src/test/java/cn/ilapage/goauto/agent/PurchaseLiveAutomationTest.kt @@ -141,6 +141,34 @@ class PurchaseLiveAutomationTest { assertEquals(0, driver.submitClicks) } + @Test + fun `saved address back into spec panel restores final evidence with one back`() { + val driver = LiveDriver(savedTransitionWithoutLegacyContext = true, backReturnsToSpecPanel = true) + val automation = PurchaseLiveAutomation(driver, pause = {}) + + val address = automation.updateShippingAddress("_cg81") + val final = automation.finalConfirmation(input().copy(addressSuffix = "_cg81"), address) + + assertEquals("_cg81", final.addressSuffix) + assertEquals(1, driver.backCount) + assertEquals(1, driver.scopedSwipes) + assertEquals(0, driver.submitClicks) + } + + @Test + fun `saved address back into stuck spec panel fails without another back or submit`() { + val driver = LiveDriver(savedTransitionWithoutLegacyContext = true, backReturnsToSpecPanel = true, + savedSpecPanelRecoveryStuck = true) + + val error = runCatching { PurchaseLiveAutomation(driver, pause = {}).updateShippingAddress("_cg81") } + .exceptionOrNull() as PurchaseLiveException + + assertEquals("PURCHASE_ADDRESS_SAVE_TIMEOUT", error.code) + assertEquals(1, driver.backCount) + assertTrue(driver.scopedSwipes in 1..5) + assertEquals(0, driver.submitClicks) + } + @Test fun `saved address returning to spec panel is recovered without pressing back`() { val driver = LiveDriver(saveReturnsToSpecPanel = true) @@ -645,6 +673,7 @@ class PurchaseLiveAutomationTest { private val savedTransitionWithoutLegacyContext: Boolean = false, private val savedTransitionHidesSuffix: Boolean = false, private val saveReturnsToSpecPanel: Boolean = false, + private val backReturnsToSpecPanel: Boolean = false, private val savedSpecPanelRecoveryStuck: Boolean = false, private val duplicatePhoneNodesSameCard: Boolean = false, private val duplicateSemanticAddressCards: Boolean = false, @@ -863,6 +892,7 @@ class PurchaseLiveAutomationTest { page = when (page) { "chooser" -> "payment" "payment" -> if (orderEvidenceBelowFold) "order-folded" else "order" + "saved-transition" -> if (backReturnsToSpecPanel) "post-save-spec" else "confirmation" else -> "confirmation" } return true