Files
2026-06-23 14:52:00 +08:00

110 lines
3.4 KiB
Python

import pytest
from pydantic import ValidationError
from models.account import (
AccountType,
BankAccount,
CashAccount,
EWalletAccount,
)
from models.ref import AccountRef
def test_bank_account():
"""测试银行账户模型"""
# 正常创建(最简)
bank = BankAccount(name="招行工资卡", issuer_name="招商银行", account_suffix="8888")
assert bank.account_type == AccountType.ASSET
assert bank.name == "招行工资卡"
assert bank.issuer_name == "招商银行"
assert bank.account_suffix == "8888"
assert bank.account_number is None
assert bank.sub_accounts == []
assert bank.is_active is True
assert bank.deleted_at is None
# 带可选字段
ref = AccountRef(ref_id=bank.id)
bank_full = BankAccount(
name="招行工资卡",
issuer_name="招商银行",
account_suffix="8888",
account_number="6225880000008888",
sub_accounts=[ref],
primary_currency="CNY",
supported_currencies=["CNY", "HKD", "USD"],
remark="主账户",
)
assert bank_full.account_number == "6225880000008888"
assert len(bank_full.sub_accounts) == 1
assert bank_full.primary_currency == "CNY"
assert len(bank_full.supported_currencies) == 3
# 负债类型(信用卡)
credit = BankAccount(
name="招行信用卡",
issuer_name="招商银行",
account_suffix="1234",
account_type=AccountType.LIABILITY,
)
assert credit.account_type == AccountType.LIABILITY
# 必填字段缺失
with pytest.raises(ValidationError):
BankAccount(name="", issuer_name="招商银行", account_suffix="8888")
with pytest.raises(ValidationError):
BankAccount(name="招行工资卡", issuer_name="", account_suffix="8888")
def test_ewallet_account():
"""测试电子钱包账户模型"""
# 正常创建(最简)
wallet = EWalletAccount(name="支付宝日常", platform="Alipay")
assert wallet.account_type == AccountType.ASSET
assert wallet.platform == "Alipay"
assert wallet.account_id is None
# 带可选字段
wallet_full = EWalletAccount(
name="支付宝日常",
platform="Alipay",
account_id="138****0000",
primary_currency="CNY",
remark="日常消费",
)
assert wallet_full.account_id == "138****0000"
# platform 必填
with pytest.raises(ValidationError):
EWalletAccount(name="支付宝", platform="")
with pytest.raises(ValidationError):
EWalletAccount(platform="Alipay")
def test_cash_account():
"""测试现金账户模型"""
# 正常创建(最简)
cash = CashAccount(name="家里现金")
assert cash.account_type == AccountType.ASSET
assert cash.location is None
# 带可选字段
cash_full = CashAccount(name="家里现金", location="保险箱")
assert cash_full.location == "保险箱"
# name 必填
with pytest.raises(ValidationError):
CashAccount(name="")
def test_account_ref():
"""测试账户引用"""
from models.account import BankAccount
from ulid import ULID
bank = BankAccount(name="测试账户", issuer_name="测试银行", account_suffix="0000")
ref = AccountRef(ref_id=bank.id)
assert ref.ref_type == "ACCOUNT"
assert ref.ref_id == bank.id