This commit is contained in:
@@ -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 ->
|
||||
|
||||
Reference in New Issue
Block a user