From d2083e71fbe70de2519e79eb631a1cd93af8c486 Mon Sep 17 00:00:00 2001 From: QiuSW <105186638@qq.com> Date: Thu, 8 Oct 2026 11:49:58 +0800 Subject: [PATCH] test(android): verify address and order observation integration (#365, #366) --- .../agent/PurchaseLiveAutomationTest.kt | 71 +++++++++++++++++++ 1 file changed, 71 insertions(+) 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 31d1e77..d3b55e5 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 @@ -18,6 +18,77 @@ import org.junit.Assert.assertTrue import org.junit.Test class PurchaseLiveAutomationTest { + @Test + fun `hint delayed address update preserves fresh payment back budget for late order evidence`() { + val observationDriver = OrderObservationDriver { sample -> + observationPage(when { + sample == 1 -> "payment" + sample < 140 -> "loading" + else -> "complete" + }) + }.apply { backDuration = 4_000 } + lateinit var addressDriver: LiveDriver + addressDriver = LiveDriver(initialEditFrame = { snapshot, sample -> + assertEquals(0, addressDriver.inputCount) + assertFalse(addressDriver.clicked.contains("保存")) + if (sample <= 4) observationDriver.elapsed += 10_000 + snapshot.changeAddressEditor { + it.copy( + text = if (sample <= 4) "合成提示占位标记" else "合成测试区域示例路段1号-old", + hintText = "合成提示占位标记", + showingHintText = sample <= 4, + ) + } + }) + var observingOrder = false + val driver = object : PurchaseUiDriver by addressDriver { + override fun capture(): UiSnapshot = + if (observingOrder) observationDriver.capture() else addressDriver.capture() + override fun backPurchase(): Boolean = + if (observingOrder) observationDriver.backPurchase() else addressDriver.backPurchase() + override fun clickFresh(target: SnapshotNode): FreshActionResult = + if (observingOrder) observationDriver.clickFresh(target) else addressDriver.clickFresh(target) + override fun swipePurchase(direction: SwipeDirection, durationMs: Long): Boolean = + if (observingOrder) observationDriver.swipePurchase(direction, durationMs) + else addressDriver.swipePurchase(direction, durationMs) + override fun bringPddToForeground(): Boolean = + if (observingOrder) observationDriver.bringPddToForeground() else addressDriver.bringPddToForeground() + } + val automation = PurchaseLiveAutomation( + driver, + pause = { observationDriver.elapsed += it }, + monotonicClockMs = { observationDriver.elapsed }, + ) + + val address = automation.updateShippingAddress("_cg366") + assertEquals(5, addressDriver.initialEditCaptures) + assertEquals("合成测试区域示例路段1号-old", addressDriver.lastInputTarget?.text) + assertTrue(address.expectedAddress.endsWith("_cg366")) + assertFalse(address.expectedAddress.contains("合成提示占位标记")) + assertAddressEditorActions(addressDriver, saved = true) + assertTrue(observationDriver.elapsed > 40_000) + assertEquals("_cg366", automation.finalConfirmation(input().copy(addressSuffix = "_cg366"), address).addressSuffix) + automation.submitOrderOnce() + val clicksBeforeObservation = addressDriver.clicked.toList() + observingOrder = true + + val order = automation.readOrderResult() + + assertEquals("PDD-DEMO-365", order?.orderNo) + assertEquals("2026-10-08T03:21:43Z", order?.submittedAt) + assertEquals(140, observationDriver.captures) + val elapsedAfterBack = observationDriver.elapsed - observationDriver.backCompletedAt!! + assertTrue(elapsedAfterBack in 28_000L until 30_000L) + assertTrue(elapsedAfterBack + observationDriver.backDuration > 30_000) + assertObservationActions(observationDriver, backs = 1) + assertEquals(1, addressDriver.inputCount) + assertEquals(1, addressDriver.clicked.count { it == "保存" }) + assertEquals(1, addressDriver.submitClicks) + assertEquals(clicksBeforeObservation, addressDriver.clicked) + assertEquals(0, addressDriver.genericSwipes + addressDriver.scopedSwipes) + assertFalse(addressDriver.clicked.any { it.contains("支付") }) + } + @Test fun `payment back observes late complete order beyond original sample budget`() { val driver = OrderObservationDriver { sample ->