test(state): 用真实派发样例回放商店切片
This commit is contained in:
1 parent
94374d2f36
commit
b7afe07894
2 files changed
+37
-1
No files matched your search
@@ -155,7 +155,8 @@
|
||||
(`ShopLoaded`/`ResetShop`/…/`AddCategoriesWithBonus`/…),原名保留在 `ShopReducer.kt` 注释里。
|
||||
- `App/State/RootReducer.kt`:`ReduceRoot(State0, Action)` 只归约上述六片,其余 **83 个字段原样透传**;
|
||||
迁移进度用 `RootReducer.Coverage`(`已迁移 6/89`)与 `RootWiring.Unmigrated` 暴露。
|
||||
- 自检:`TankiOffline/tools/RunStateTest.ps1` **113 项全绿**,含 89 槽位完整性、六片一次归约互不串片、未迁移字段透传。
|
||||
- 自检:`TankiOffline/tools/RunStateTest.ps1` **120 项全绿**,含 89 槽位完整性、六片一次归约互不串片、未迁移字段透传,
|
||||
以及用 `action_trace_merged.json` 真实派发的两条商店动作(`SetCoinPaymentProviderUrl` / `ToggleShopActivity`)回放。
|
||||
- 委派表里的已知形态:`shop` / `home` / `localBattleUserState` / `partner` 是内联 IIFE,
|
||||
已按字段具名为 `(inline@<field>)` 并从函数体抓到顶层动作名(69 / 1 / 2 / 11 个);
|
||||
`launchParams` 是纯透传(`(pass-through)`,无 reducer)。
|
||||
|
||||
@@ -889,6 +889,41 @@ object StateCheck {
|
||||
R3.Shop.ShopItems == R2.Shop.ShopItems && R3.LoginByPassword == R0.LoginByPassword
|
||||
)
|
||||
Check("根:shop 迁移后无关动作仍返回等值状态", ReduceRoot(R3, AddFrags(1)) == R3)
|
||||
|
||||
// ⑯ shop 真实派发回放:用 action_trace_merged.json 里实际出现过的两条商店动作
|
||||
val UrlRaw = ActionSamples.Raw["SetCoinPaymentProviderUrl"]
|
||||
val ToggleRaw = ActionSamples.Raw["ToggleShopActivity"]
|
||||
Check("shop 回放:两条真实动作都在样例表里", UrlRaw != null && ToggleRaw != null)
|
||||
val Url = UrlRaw!!.substringAfter("url=").substringBeforeLast(")")
|
||||
val Enabled = ToggleRaw!!.substringAfter("enabled=").substringBeforeLast(")") == "true"
|
||||
Check(
|
||||
"shop 回放:样例值与运行时一致",
|
||||
Url.startsWith("https://open-api.3dtank.com/mgr/tank-pay/") && Enabled
|
||||
)
|
||||
|
||||
val P0 = RootState()
|
||||
val P1 = ReduceRoot(P0, SetCoinPaymentProviderUrl(Url))
|
||||
Check(
|
||||
"shop 回放:真实 SetCoinPaymentProviderUrl 写入完整 URL",
|
||||
P1.Shop.CoinPaymentProviderUrl == Url
|
||||
)
|
||||
val P2 = ReduceRoot(P1.copy(Shop = P1.Shop.copy(Enabled = false)), ToggleShopActivity(Enabled))
|
||||
Check(
|
||||
"shop 回放:真实 ToggleShopActivity(true) 把 enabled 置 true",
|
||||
P2.Shop.Enabled && P2.Shop.CoinPaymentProviderUrl == Url
|
||||
)
|
||||
Check(
|
||||
"shop 回放:只动 shop,其他切片不变",
|
||||
P2.LoginByPassword == P0.LoginByPassword && P2.Home == P0.Home &&
|
||||
P2.TwitchState == P0.TwitchState && P2.User == P0.User
|
||||
)
|
||||
Check(
|
||||
"shop 回放:两条动作都在动作目录里",
|
||||
listOf("SetCoinPaymentProviderUrl", "ToggleShopActivity").all { ActionCatalog.ByName[it] != null }
|
||||
)
|
||||
// 69 个动作里只有 x4 是标记接口(没有独立效果),其余都已有名字
|
||||
val ShopUnknown = RootWiring.ByField("shop")!!.Actions.filter { it.startsWith("?") }
|
||||
Check("shop 回放:唯一未具名的是标记 x4", ShopUnknown == listOf("?x4"))
|
||||
}
|
||||
|
||||
val Failed = Results.filter { !it.second }
|
||||
|
||||
Reference in new issue
Block a user