fix: 售罄临时页仅下拉刷新一次 (#265)

This commit is contained in:
chengma
2026-08-18 11:58:23 +08:00
parent fc13b2c7a3
commit e7ac5a470f
8 changed files with 304 additions and 0 deletions
+33
View File
@@ -6,7 +6,9 @@ import xml.etree.ElementTree as ET
from src.pdd_page_classifier import (
ACTION_NETWORK_ERROR,
ACTION_OUT_OF_STOCK,
ACTION_READY,
ACTION_REFRESH,
ACTION_REOPEN,
ACTION_UNAVAILABLE,
ACTION_WAIT,
@@ -17,6 +19,7 @@ from src.pdd_page_classifier import (
PAGE_LOADING,
PAGE_LOGIN_REQUIRED,
PAGE_NETWORK_ERROR,
PAGE_OUT_OF_STOCK,
PAGE_RISK_CONTROL,
GoodsOpenTracker,
classify_pdd_page,
@@ -54,6 +57,7 @@ class PddPageClassifierTest(unittest.TestCase):
"请完成验证": PAGE_CAPTCHA,
"操作频繁": PAGE_RISK_CONTROL,
"立即购买": PAGE_GOODS,
"商品已售罄,推荐以下相似商品": PAGE_OUT_OF_STOCK,
}
for label, expected in cases.items():
with self.subTest(label=label):
@@ -103,6 +107,35 @@ class PddPageClassifierTest(unittest.TestCase):
decision = tracker.observe(observation("网络不给力"), 3.0)
self.assertEqual(ACTION_NETWORK_ERROR, decision.action)
def test_sold_out_page_refreshes_once_then_can_recover(self) -> None:
tracker = GoodsOpenTracker(None, 0.0)
sold_out = observation("商品已售罄,推荐以下相似商品")
self.assertEqual(ACTION_REFRESH, tracker.observe(sold_out, 0.2).action)
tracker.refreshed_out_of_stock(0.3)
self.assertTrue(tracker.out_of_stock_refreshed)
self.assertEqual(
ACTION_READY,
tracker.observe(observation("目标商品 立即购买"), 0.8).action,
)
def test_sold_out_after_refresh_is_unavailable_without_second_refresh(self) -> None:
tracker = GoodsOpenTracker(None, 0.0)
sold_out = observation("该商品已售罄")
self.assertEqual(ACTION_REFRESH, tracker.observe(sold_out, 0.2).action)
tracker.refreshed_out_of_stock(0.3)
self.assertEqual(
ACTION_OUT_OF_STOCK,
tracker.observe(sold_out, 0.8).action,
)
with self.assertRaises(RuntimeError):
tracker.refreshed_out_of_stock(0.9)
def test_sku_sold_out_text_is_still_a_normal_goods_page(self) -> None:
result = observation("立即购买 尺码 L(售罄)")
self.assertEqual(PAGE_GOODS, result.kind)
if __name__ == "__main__":
unittest.main()