功能: 增加鱼翅直充接口基础层

This commit is contained in:
yml2213
2026-08-13 16:44:20 +08:00
parent 2e207f726c
commit 420ee3d95c
6 changed files with 328 additions and 0 deletions
+79
View File
@@ -0,0 +1,79 @@
"""鱼翅直充供应商 API 客户端测试。"""
import unittest
from unittest.mock import Mock
from core.douyu.recharge_api import (
FishFinRechargeClient,
FishFinRechargeConfig,
FishFinRechargeConfigError,
)
class FishFinRechargeClientTests(unittest.TestCase):
def setUp(self):
self.config = FishFinRechargeConfig(
base_url="https://supplier.example/",
app_id="15945681",
app_secret="ac9fa79db418fd2c61d9bd4c60956f2d5db3a6d781d6f91f2e96327c74dfaccd",
)
self.session = Mock()
self.client = FishFinRechargeClient(self.config, session=self.session)
def test_sign_matches_document_example(self):
sign = self.client.sign({
"app_id": "15945681 ",
"timestamp": 1740916504,
"charge_account": "18888888888",
"buy_num": 2,
"customer_price": 1.21,
"customer_order_no": "DD202507010010208888",
"product_id": "66668888",
"empty": " \n",
"sign": "ignored",
}, "POST")
self.assertEqual(sign, "4087a959f3488ecb13efe6ef58e3bc67")
def test_create_order_posts_json_with_signed_nested_arguments(self):
response = Mock()
response.json.return_value = {"code": 200, "order_status": 0}
self.session.post.return_value = response
result = self.client.create_order(
charge_account="10001",
buy_num=2,
customer_price="1.20",
customer_order_no="merchant-001",
product_id="product-1",
recharge_arg=[{"templateName": "斗鱼账号", "templateVal": "10001"}],
ext_arg={"skuid": 12},
)
self.assertEqual(result["code"], 200)
kwargs = self.session.post.call_args.kwargs
self.assertEqual(self.session.post.call_args.args[0], "https://supplier.example/adapter-apiaccess/open/api/createOrderV2")
self.assertEqual(kwargs["json"]["customer_price"], "1.2")
self.assertEqual(kwargs["json"]["sign"], self.client.sign(kwargs["json"], "POST"))
self.assertEqual(kwargs["timeout"], (8, 20))
def test_query_order_requires_identifier_and_uses_get_params(self):
with self.assertRaisesRegex(ValueError, "订单标识"):
self.client.query_order()
response = Mock()
response.json.return_value = {"code": 200, "order_status": 2}
self.session.get.return_value = response
self.client.query_order(customer_order_no="merchant-001")
kwargs = self.session.get.call_args.kwargs
self.assertEqual(self.session.get.call_args.args[0], "https://supplier.example/adapter-apiaccess/open/api/queryOrderV2")
self.assertEqual(kwargs["params"]["customer_order_no"], "merchant-001")
self.assertEqual(kwargs["params"]["sign"], self.client.sign(kwargs["params"], "GET"))
def test_missing_configuration_is_rejected_before_request(self):
with self.assertRaises(FishFinRechargeConfigError):
FishFinRechargeClient(FishFinRechargeConfig(base_url="", app_id="", app_secret=""))
if __name__ == "__main__":
unittest.main()