feat(android): add device readiness checks
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
package com.roubao.autopilot.readiness
|
||||
|
||||
import org.junit.Assert.assertEquals
|
||||
import org.junit.Assert.assertFalse
|
||||
import org.junit.Assert.assertTrue
|
||||
import org.junit.Test
|
||||
|
||||
class ReadinessModelsTest {
|
||||
@Test
|
||||
fun `risk control takes precedence over verification and login`() {
|
||||
val result = LoginBlockerDetector.detect(
|
||||
listOf("手机号登录", "请输入验证码", "账号存在风险,请完成安全验证")
|
||||
)
|
||||
|
||||
assertEquals(LoginBlocker.RISK_CONTROL, result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `verification is distinct from login`() {
|
||||
val result = LoginBlockerDetector.detect(listOf("登录后继续", "获取验证码"))
|
||||
|
||||
assertEquals(LoginBlocker.VERIFICATION_REQUIRED, result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `normal page has no detected blocker`() {
|
||||
val result = LoginBlockerDetector.detect(listOf("百亿补贴", "搜索商品"))
|
||||
|
||||
assertEquals(LoginBlocker.NONE, result)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `probe requires installed app and connected accessibility`() {
|
||||
val blocked = snapshot(
|
||||
pinduoduoInstalled = false,
|
||||
accessibilityEnabled = false,
|
||||
accessibilityConnected = false
|
||||
)
|
||||
assertFalse(blocked.canStartProbe)
|
||||
assertEquals(
|
||||
listOf(
|
||||
ReadinessBlocker.PINDUODUO_NOT_INSTALLED,
|
||||
ReadinessBlocker.ACCESSIBILITY_DISABLED
|
||||
),
|
||||
blocked.blockers
|
||||
)
|
||||
|
||||
val ready = snapshot(
|
||||
pinduoduoInstalled = true,
|
||||
accessibilityEnabled = true,
|
||||
accessibilityConnected = true
|
||||
)
|
||||
assertTrue(ready.canStartProbe)
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `detected login blocker prevents probe start`() {
|
||||
val snapshot = snapshot(
|
||||
pinduoduoInstalled = true,
|
||||
accessibilityEnabled = true,
|
||||
accessibilityConnected = true
|
||||
).copy(loginBlocker = LoginBlocker.LOGIN_REQUIRED)
|
||||
|
||||
assertFalse(snapshot.canStartProbe)
|
||||
assertEquals(listOf(ReadinessBlocker.LOGIN_REQUIRED), snapshot.blockers)
|
||||
}
|
||||
|
||||
private fun snapshot(
|
||||
pinduoduoInstalled: Boolean,
|
||||
accessibilityEnabled: Boolean,
|
||||
accessibilityConnected: Boolean
|
||||
) = DeviceReadinessSnapshot(
|
||||
manufacturer = "test",
|
||||
model = "device",
|
||||
androidVersion = "16",
|
||||
androidApi = 36,
|
||||
buyerApp = InstalledAppVersion(true, "1.4.2", 7),
|
||||
pinduoduo = InstalledAppVersion(pinduoduoInstalled, "8.17.0", 81700),
|
||||
accessibilityEnabled = accessibilityEnabled,
|
||||
accessibilityConnected = accessibilityConnected,
|
||||
foregroundPackage = null,
|
||||
loginBlocker = LoginBlocker.UNKNOWN,
|
||||
pinduoduoObservedAtMillis = null
|
||||
)
|
||||
}
|
||||
Reference in New Issue
Block a user