优化斗鱼充值日志与配置

This commit is contained in:
yml2213
2026-08-14 11:27:53 +08:00
parent 0bf69c1240
commit e2a45b7893
13 changed files with 193 additions and 52 deletions
+35 -5
View File
@@ -32,6 +32,7 @@ class DouyuGoldRechargeChannelTests(unittest.TestCase):
email="mail@example.com",
email_password="mail-password",
uid="10001",
nickname="罗炅729",
)
self.session.add(self.account)
self.session.commit()
@@ -52,7 +53,7 @@ class DouyuGoldRechargeChannelTests(unittest.TestCase):
self.engine.dispose()
@patch("web.backend.services.douyu_runner.FishFinRechargeClient")
def test_supplier_channel_creates_order_using_uid_and_finishes_on_success(self, client_class):
def test_supplier_channel_creates_order_using_nickname_and_finishes_on_success(self, client_class):
supplier = Mock()
supplier.create_order.return_value = {
"code": 200,
@@ -72,12 +73,13 @@ class DouyuGoldRechargeChannelTests(unittest.TestCase):
self.session, self.task, self.account, "acf_uid=10001", config,
)
expected_order_id = self.runner._supplier_out_order_id(self.task)
supplier.create_order.assert_called_once_with(
buy_num=10,
pay_amount=unittest.mock.ANY,
out_order_id=f"DYGF{self.task.id}",
out_order_id=expected_order_id,
product_id="gold-product",
recharge_arg=[{"templateName": "斗鱼账号", "templateVal": "10001"}],
recharge_arg=[{"templateName": "斗鱼账号", "templateVal": "罗炅729"}],
order_type=0,
notify_url=unittest.mock.ANY,
)
@@ -87,12 +89,40 @@ class DouyuGoldRechargeChannelTests(unittest.TestCase):
self.assertEqual(self.task.result["recharge_channel"], "supplier_api")
self.assertEqual(self.task.result["supplier_order_status"], 2)
self.assertEqual(self.task.result["buy_num"], 10)
self.assertEqual(self.task.result["out_order_id"], f"DYGF{self.task.id}")
self.assertEqual(self.task.result["out_order_id"], expected_order_id)
self.assertEqual(self.task.result["recharge_account"], "罗炅729")
self.assertEqual(self.task.result["douyu_uid"], "10001")
self.assertEqual(self.task.result["order_id"], "supplier-001")
self.assertEqual(self.task.result["pay_amount"], "10")
self.assertNotIn("pay_url", self.task.result)
self.assertNotIn("sign", self.task.result["supplier_order"])
@patch("web.backend.services.douyu_runner.FishFinRechargeClient")
def test_supplier_channel_rejects_account_without_nickname(self, client_class):
self.account.nickname = ""
self.session.commit()
config = {
"gold_recharge_channel": "supplier_api",
"gold_api_product_id": "gold-product",
"gold_api_account_template_name": "斗鱼昵称",
}
self.runner._execute_create_gold_qr(
self.session, self.task, self.account, "acf_uid=10001", config,
)
client_class.assert_not_called()
self.session.refresh(self.task)
self.assertEqual(self.task.status, "failed")
self.assertIn("斗鱼昵称", self.task.message)
def test_supplier_out_order_id_reuses_persisted_value(self):
self.task.supplier_out_order_id = "DYGFHISTORICAL-001"
self.assertEqual(
self.runner._supplier_out_order_id(self.task),
"DYGFHISTORICAL-001",
)
@patch("web.backend.services.douyu_runner.FishFinRechargeClient")
def test_supplier_channel_marks_non_200_create_response_as_failed(self, client_class):
supplier = Mock()
@@ -113,7 +143,7 @@ class DouyuGoldRechargeChannelTests(unittest.TestCase):
self.assertEqual(self.task.message, "商品已下架")
def test_supplier_callback_verifies_signature_and_updates_terminal_task(self):
self.task.supplier_out_order_id = f"DYGF{self.task.id}"
self.task.supplier_out_order_id = f"DYGFBATCHT{self.task.id}"
self.task.result = {"recharge_channel": "supplier_api", "out_order_id": self.task.supplier_out_order_id}
self.session.commit()
client = FishFinRechargeClient(FishFinRechargeConfig(