"""YYB 付款表单的离线回归测试。""" from __future__ import annotations import importlib.util import sys import unittest from pathlib import Path from urllib.parse import parse_qs _SCRIPT = Path(__file__).resolve().parents[1] / "scripts" / "jsdom-pay.py" _SPEC = importlib.util.spec_from_file_location("yyb_jsdom_pay", _SCRIPT) assert _SPEC and _SPEC.loader _MODULE = importlib.util.module_from_spec(_SPEC) sys.modules[_SPEC.name] = _MODULE _SPEC.loader.exec_module(_MODULE) class TestJsdomPay(unittest.TestCase): def test_build_save_body_has_current_payment_context(self): body = _MODULE.build_save_body( {"token_id": "token", "transaction_id": "transaction", "out_trade_no": "trade"}, {"openid": "openid", "accesstoken": "access-token", "logintype": "WX"}, "web-token", "anti-token", "cipher", "2", "mds_myappjp-__mds_myappjp_PC_aW9zd2hpdGVsaX0-iap", 600, ) fields = parse_qs(body, keep_blank_values=True) self.assertEqual(fields["type"], ["bg"]) self.assertEqual(fields["pf"], ["mds_myappjp-__mds_myappjp_PC_aW9zd2hpdGVsaX0-iap"]) self.assertEqual(fields["zoneid"], ["2"]) self.assertEqual(fields["pay_method"], ["wechat"]) self.assertEqual(fields["wcp"], ["type=CNY&amt=600"]) self.assertEqual(fields["encrypt_way"], ["web_new_encrypt"]) self.assertEqual(fields["webversion"], ["minipayv2"]) def test_qq_payment_uses_qq_oauth_session_fields(self): body = _MODULE.build_save_body( {"token_id": "token", "transaction_id": "transaction", "out_trade_no": "trade"}, {"openid": "openid", "accesstoken": "access-token", "logintype": "QC", "appid": "102033112"}, "web-token", "anti-token", "cipher", "1", "pf", 100, ) fields = parse_qs(body, keep_blank_values=True) self.assertEqual(fields["session_id"], ["openid"]) self.assertEqual(fields["session_type"], ["kp_accesstoken"]) self.assertEqual(fields["qq_appid"], ["102033112"]) self.assertEqual(fields["wx_appid"], [""]) if __name__ == "__main__": unittest.main()