test(android): verify address and order observation integration (#365, #366)

This commit is contained in:
QiuSW
2026-10-08 11:49:58 +08:00
parent 5206a6fd7d
commit d2083e71fb
@@ -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 ->