fix(huya): 改状态时自动校验 CK

This commit is contained in:
yml
2026-11-14 10:22:18 +08:00
parent 5b117e7641
commit b4801336c5
4 changed files with 245 additions and 14 deletions
+92 -2
View File
@@ -39,6 +39,7 @@ from web.backend.schemas import (
HuyaExternalOrderOut,
HuyaExternalOrderRechargeOut,
HuyaExternalOrderStatusBatchRequest,
HuyaExternalOrderStatusRequest,
HuyaExternalOrderUpdate,
)
from web.backend.services import huya_collab_service as collab
@@ -371,6 +372,61 @@ class TestCollabStatusMachine(TestCollabBase):
)
assert order.status == collab.STATUS_TO_RECHARGE
def test_status_change_auto_verifies_ck_for_to_recharge(self):
"""工作台改状态时不再要求用户先手工点「验证 CK」。"""
order = self._create(
order_no="AUTO-STATUS-CK",
gift_name="不朽伊人大礼包",
required_points=8000,
home_images=["collab/2026/10/16/home01.png"],
)
collab.set_ck(self.db, self.user, order, fake_ck("1199647001234"))
assert order.ck_status == "unverified"
assert order.bind_game_role == ""
collab.set_status(
self.db,
self.user,
order,
collab.STATUS_TO_RECHARGE,
auto_verify_ck=True,
client=FakeProbeClient(FakeBindResp(nick="微信用户", role="吃鸡199706")),
)
assert order.status == collab.STATUS_TO_RECHARGE
assert order.ck_status == collab.CK_VALID
assert order.bind_game_account == "微信用户"
assert order.bind_game_role == "吃鸡199706"
def test_status_route_auto_verifies_unverified_ck(self, monkeypatch):
order = self._create(
order_no="AUTO-STATUS-ROUTE",
gift_name="不朽伊人大礼包",
required_points=8000,
home_images=["collab/2026/10/16/home01.png"],
)
collab.set_ck(self.db, self.user, order, fake_ck("1199647005678"))
monkeypatch.setattr(
collab,
"_build_probe_client",
lambda: FakeProbeClient(FakeBindResp(nick="微信用户", role="吃鸡199706")),
)
out = collab_api.update_external_order_status(
order.id,
HuyaExternalOrderStatusRequest(
status=collab.STATUS_TO_RECHARGE,
expected_version=order.version,
),
db=self.db,
current=self.user,
)
self.db.refresh(order)
assert out["status"] == collab.STATUS_TO_RECHARGE
assert order.ck_status == collab.CK_VALID
assert order.bind_game_role == "吃鸡199706"
def test_forward_flow_sets_timestamps(self):
order = self._bind_ready(self._create())
assert order.status == collab.STATUS_TO_RECHARGE
@@ -2459,6 +2515,40 @@ class TestCollabRecharge(TestCollabBase):
row.action for row in self._audits(first)
]
def test_recharge_auto_refreshes_changed_binding_and_requires_retry(self):
"""核账前自动验 CK;换绑时保存新快照并中止,不把旧单充到新角色。"""
order = self._ready("RC-AUTO-1", "1015", gift_name="礼包A", required_points=200)
assert order.bind_game_role == self.ROLE
changed = self._check(
[order],
FakeRechargeClient(
FakeBindResp(nick=self.BIND, role="角色B"),
score=self._score(200),
),
)
assert changed["updated"] == 0
assert changed["failed"] == 1
assert changed["groups"] == []
assert "CK 已自动刷新" in changed["failures"][0]["message"]
assert "角色B" in changed["failures"][0]["message"]
assert order.status == collab.STATUS_TO_RECHARGE
assert order.bind_game_role == "角色B"
assert order.points_checked_at is None
retried = self._check(
[order],
FakeRechargeClient(
FakeBindResp(nick=self.BIND, role="角色B"),
score=self._score(200),
),
)
assert retried["updated"] == 1
assert retried["failed"] == 0
assert order.status == collab.STATUS_RECHARGED
def test_threshold_boundary_is_allowed(self):
order = self._ready("RC-3", "1002", gift_name="礼包A", required_points=500)
client = FakeRechargeClient(
@@ -2724,8 +2814,8 @@ class TestCollabRecharge(TestCollabBase):
result = self._check([order], client)
assert result["failed"] == 1
assert result["groups"][0]["status"] == ""
assert "CK 验证失败" in result["groups"][0]["message"]
assert result["groups"] == []
assert "CK 验证失败" in result["failures"][0]["message"]
assert order.status == collab.STATUS_TO_RECHARGE
assert order.points_checked_at is None