import os from unittest.mock import Mock, patch from services.huihui_payment import HuihuiPaymentClient def test_create_payment_uses_huihui_payment_v3_contract(): client = HuihuiPaymentClient({ "HUIHUI_PAYMENT_BASE_URL": "https://open.example/api/payment-v3", "HUIHUI_APP_ID": "app-id", "HUIHUI_ACCESS_ID": "access-id", "HUIHUI_ACCESS_SECRET": "access-secret", }) response = Mock() response.status_code = 200 response.json.return_value = { "code": 0, "data": {"orderId": "provider-id", "status": "pending", "payMessage": "mock"}, } with patch("services.huihui_payment.httpx.post", return_value=response) as post: result = client.create_payment( huihui_token="user-token", huihui_user_id="user-id", real_name="测试用户", order_no="AV202608260001", amount="10.00", points_amount=2_000_000, pay_type="WECHAT", pay_way="APP", callback_url="https://digital.example/api/token/payment/callback/secret", ) assert result["orderId"] == "provider-id" assert post.call_args.args[0] == "https://open.example/api/payment-v3/payment/pay" assert post.call_args.kwargs["headers"] == { "Authorization": "Bearer user-token", "appId": "app-id", "windowAppId": "app-id", } params = post.call_args.kwargs["params"] assert params["appId"] == "app-id" assert params["accessId"] == "access-id" assert params["userId"] == "user-id" assert params["signature"] assert "accessSecret" not in params body = post.call_args.kwargs["json"] assert body["payType"] == "WECHAT" assert body["payWay"] == "APP" assert body["masterOrderAmt"] == "10.00" assert body["payAmt"] == 10.0 def test_request_refund_uses_configured_huihui_endpoint_without_exposing_secret(): client = HuihuiPaymentClient({ "HUIHUI_PAYMENT_BASE_URL": "https://open.example/api/payment-v3", "HUIHUI_APP_ID": "app-id", "HUIHUI_ACCESS_ID": "access-id", "HUIHUI_ACCESS_SECRET": "access-secret", }) response = Mock(status_code=200) response.json.return_value = {"code": 200, "data": {"status": "PROCESSING", "refundNo": "provider-rf"}} with patch.dict(os.environ, {"HUIHUI_PAYMENT_REFUND_PATH": "/payment/refund"}), patch( "services.huihui_payment.httpx.post", return_value=response ) as post: result = client.request_refund( huihui_token="user-token", huihui_user_id="user-id", order_no="AV1", refund_no="RF1", amount="10.00", reason="用户申请", ) assert result["refundNo"] == "provider-rf" assert post.call_args.args[0] == "https://open.example/api/payment-v3/payment/refund" assert post.call_args.kwargs["json"] == { "appId": "app-id", "masterOrderNo": "AV1", "refundOrderNo": "RF1", "refundAmt": 10.0, "refundReason": "用户申请", } assert "accessSecret" not in post.call_args.kwargs["params"]