fix: 充值核账按绑定账号和角色整组
This commit is contained in:
@@ -2042,6 +2042,7 @@ class TestCollabRecharge(TestCollabBase):
|
||||
gift_name: str,
|
||||
required_points: int | None,
|
||||
role: str = ROLE,
|
||||
account: str = BIND,
|
||||
) -> HuyaExternalOrder:
|
||||
order = self._create(
|
||||
order_no=order_no,
|
||||
@@ -2055,11 +2056,11 @@ class TestCollabRecharge(TestCollabBase):
|
||||
self.user,
|
||||
order,
|
||||
client=FakeProbeClient(
|
||||
FakeBindResp(nick=self.BIND, role=role, plat="苹果(iOS)", area="微信")
|
||||
FakeBindResp(nick=account, role=role, plat="苹果(iOS)", area="微信")
|
||||
),
|
||||
)
|
||||
assert order.status == collab.STATUS_TO_RECHARGE
|
||||
assert order.bind_game_account == self.BIND
|
||||
assert order.bind_game_account == account
|
||||
return order
|
||||
|
||||
@staticmethod
|
||||
@@ -2100,7 +2101,9 @@ class TestCollabRecharge(TestCollabBase):
|
||||
assert order.points_surplus == 50
|
||||
assert order.points_threshold == 100
|
||||
assert order.points_check_reason == "ok"
|
||||
assert order.points_check_detail["group_key"] == self.BIND
|
||||
assert (
|
||||
order.points_check_detail["group_key"] == f"{self.BIND} / {self.ROLE}"
|
||||
)
|
||||
# 同一 uid 只验一次 CK、只查一次积分
|
||||
assert len(client.calls) == 1
|
||||
assert len(client.score_calls) == 1
|
||||
@@ -2167,6 +2170,43 @@ class TestCollabRecharge(TestCollabBase):
|
||||
assert first.status == second.status == collab.STATUS_RECHARGED
|
||||
assert [call["uid"] for call in client.score_calls] == [1005, 1006]
|
||||
|
||||
def test_same_generic_nickname_with_different_roles_are_separate_groups(self):
|
||||
"""生产回归:bind_game_account 可能都是「微信用户」,必须再按角色分组。
|
||||
|
||||
只按账号分组会把不同买家合成一组,required_total 被放大成 48000。
|
||||
"""
|
||||
first = self._ready(
|
||||
"RC-NICK-1",
|
||||
"1013",
|
||||
gift_name="礼包A",
|
||||
required_points=200,
|
||||
role="角色A",
|
||||
account="微信用户",
|
||||
)
|
||||
second = self._ready(
|
||||
"RC-NICK-2",
|
||||
"1014",
|
||||
gift_name="礼包B",
|
||||
required_points=200,
|
||||
role="角色B",
|
||||
account="微信用户",
|
||||
)
|
||||
client = FakeRechargeClient(
|
||||
FakeBindResp(nick="微信用户", role="角色A"),
|
||||
FakeBindResp(nick="微信用户", role="角色B"),
|
||||
scores=[self._score(250), self._score(300)],
|
||||
)
|
||||
|
||||
result = self._check([first, second], client)
|
||||
|
||||
assert len(result["groups"]) == 2
|
||||
assert {group["balance"] for group in result["groups"]} == {250, 300}
|
||||
assert {group["required_total"] for group in result["groups"]} == {200}
|
||||
assert first.status == second.status == collab.STATUS_RECHARGED
|
||||
assert first.points_required_total == second.points_required_total == 200
|
||||
assert first.points_check_detail["group_key"] == "微信用户 / 角色A"
|
||||
assert second.points_check_detail["group_key"] == "微信用户 / 角色B"
|
||||
|
||||
def test_ck_invalid_keeps_group_status_unchanged(self):
|
||||
order = self._ready("RC-9", "1007", gift_name="礼包A", required_points=200)
|
||||
client = FakeRechargeClient(
|
||||
|
||||
Reference in New Issue
Block a user