fix(huya): 改状态时自动校验 CK
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user