test: add tests

This commit is contained in:
2026-06-23 14:52:00 +08:00
parent b46265cade
commit 5a7dd536b8
3 changed files with 1080 additions and 0 deletions
+113
View File
@@ -0,0 +1,113 @@
import pytest
from pydantic import ValidationError
from models.channel import (
CashChannel,
ChannelType,
EWalletChannel,
PaymentCardChannel,
)
from models.ref import AccountRef
@pytest.fixture
def account_ref():
"""创建账户引用 fixture"""
from ulid import ULID
return AccountRef(ref_id=ULID())
def test_payment_card_channel(account_ref):
"""测试支付卡渠道模型"""
# 正常创建
card = PaymentCardChannel(
ref_accounts=[account_ref],
region="HK",
issuer_name="HSBC HK",
card_suffix="8335",
card_brand="UnionPay",
)
assert card.channel_type == ChannelType.PAYMENT_CARD
assert card.region == "HK"
assert card.issuer_name == "HSBC HK"
assert card.card_suffix == "8335"
assert card.card_brand == "UnionPay"
assert len(card.ref_accounts) == 1
# card_brand 可为空
card_without_brand = PaymentCardChannel(
ref_accounts=[account_ref],
region="HK",
issuer_name="AMEX HK",
card_suffix="12345",
)
assert card_without_brand.card_brand is None
# card_suffix 至少一位
with pytest.raises(ValidationError):
PaymentCardChannel(
ref_accounts=[account_ref], region="CN", issuer_name="渣打中国", card_suffix=""
)
# issuer_name 至少一位
with pytest.raises(ValidationError):
PaymentCardChannel(
ref_accounts=[account_ref], region="SG", issuer_name="", card_suffix="7431"
)
# 无效国家代码
with pytest.raises(ValidationError):
PaymentCardChannel(
ref_accounts=[account_ref], region="XX", issuer_name="Fake Bank", card_suffix="0000"
)
# ref_accounts 至少一个
with pytest.raises(ValidationError):
PaymentCardChannel(ref_accounts=[], region="CN", issuer_name="招商银行", card_suffix="8888")
def test_ewallet_channel(account_ref):
"""测试电子钱包渠道模型"""
# 正常创建
wallet = EWalletChannel(
ref_accounts=[account_ref],
region="CN",
platform="支付宝",
platform_account_id="138****0000",
sub_channel="余额",
)
assert wallet.channel_type == ChannelType.E_WALLET
assert wallet.region == "CN"
assert wallet.platform == "支付宝"
assert wallet.platform_account_id == "138****0000"
assert wallet.sub_channel == "余额"
# 可选字段可以为空
wallet_minimal = EWalletChannel(ref_accounts=[account_ref], region="CN", platform="WeChat")
assert wallet_minimal.platform_account_id is None
assert wallet_minimal.sub_channel is None
# platform 至少一位
with pytest.raises(ValidationError):
EWalletChannel(ref_accounts=[account_ref], region="CN", platform="")
def test_cash_channel(account_ref):
"""测试现金渠道模型"""
# 正常创建
cash = CashChannel(ref_accounts=[account_ref])
assert cash.channel_type == ChannelType.CASH
assert len(cash.ref_accounts) == 1
# 多个关联账户
cash_multi = CashChannel(ref_accounts=[account_ref, account_ref])
assert len(cash_multi.ref_accounts) == 2
# ref_accounts 至少一个
with pytest.raises(ValidationError):
CashChannel(ref_accounts=[])
if __name__ == "__main__":
pytest.main([__file__, "-v"])