mirror of
https://github.com/goldenfishs/MRobot.git
synced 2026-02-04 18:00:19 +08:00
124 lines
4.1 KiB
Python
124 lines
4.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
测试财务模块的分类功能完整流程
|
|
"""
|
|
|
|
import shutil
|
|
from pathlib import Path
|
|
from app.tools.finance_manager import FinanceManager, Transaction
|
|
|
|
# 清除旧数据
|
|
data_root = Path("assets/Finance_Data")
|
|
if data_root.exists():
|
|
shutil.rmtree(data_root)
|
|
|
|
print("=" * 60)
|
|
print("财务模块分类功能测试")
|
|
print("=" * 60)
|
|
|
|
# 初始化财务管理器
|
|
fm = FinanceManager()
|
|
|
|
# 测试1: 验证 admin 账户自动创建
|
|
print("\n[测试1] admin 账户自动创建")
|
|
accounts = fm.get_all_accounts()
|
|
print(f" 账户数量: {len(accounts)}")
|
|
assert len(accounts) == 1, "应该有1个账户"
|
|
admin_acc = accounts[0]
|
|
print(f" 账户名称: {admin_acc.name}")
|
|
assert admin_acc.name == "admin", "账户名称应该是 'admin'"
|
|
print(" ✓ 通过")
|
|
|
|
# 测试2: 验证默认分类
|
|
print("\n[测试2] 默认分类")
|
|
print(f" 分类数量: {len(admin_acc.categories)}")
|
|
print(f" 分类列表: {admin_acc.categories}")
|
|
assert len(admin_acc.categories) > 0, "应该有默认分类"
|
|
print(" ✓ 通过")
|
|
|
|
# 测试3: 添加新分类
|
|
print("\n[测试3] 添加新分类")
|
|
result = fm.add_category(admin_acc.id, "房租")
|
|
print(f" 添加 '房租' 分类: {'成功' if result else '失败'}")
|
|
assert result, "应该成功添加分类"
|
|
categories = fm.get_categories(admin_acc.id)
|
|
print(f" 分类数量: {len(categories)}")
|
|
assert "房租" in categories, "应该包含 '房租' 分类"
|
|
print(" ✓ 通过")
|
|
|
|
# 测试4: 创建带分类的交易记录
|
|
print("\n[测试4] 创建带分类的交易记录")
|
|
trans1 = Transaction(
|
|
date="2025-01-01",
|
|
amount=5000,
|
|
trader="工作所得",
|
|
notes="1月工资",
|
|
category="工资"
|
|
)
|
|
fm.add_transaction(admin_acc.id, trans1)
|
|
print(f" 交易1: {trans1.date} | {trans1.trader} | {trans1.category} | ¥{trans1.amount}")
|
|
|
|
trans2 = Transaction(
|
|
date="2025-01-05",
|
|
amount=-1500,
|
|
trader="房东",
|
|
notes="1月房租",
|
|
category="房租"
|
|
)
|
|
fm.add_transaction(admin_acc.id, trans2)
|
|
print(f" 交易2: {trans2.date} | {trans2.trader} | {trans2.category} | ¥{trans2.amount}")
|
|
|
|
# 重新加载以验证保存
|
|
fm.load_all_accounts()
|
|
admin_acc = fm.get_account(admin_acc.id)
|
|
print(f" 账户交易总数: {len(admin_acc.transactions)}")
|
|
assert len(admin_acc.transactions) == 2, "应该有2个交易"
|
|
print(" ✓ 通过")
|
|
|
|
# 测试5: 按分类查询
|
|
print("\n[测试5] 按分类查询")
|
|
results_salary = fm.query_transactions(admin_acc.id, category="工资")
|
|
print(f" '工salary' 分类的交易: {len(results_salary)} 条")
|
|
assert len(results_salary) == 1, "应该有1个工资交易"
|
|
assert results_salary[0].amount == 5000
|
|
|
|
results_rent = fm.query_transactions(admin_acc.id, category="房租")
|
|
print(f" '房租' 分类的交易: {len(results_rent)} 条")
|
|
assert len(results_rent) == 1, "应该有1个房租交易"
|
|
assert results_rent[0].amount == -1500
|
|
|
|
results_all = fm.query_transactions(admin_acc.id)
|
|
print(f" 全部分类的交易: {len(results_all)} 条")
|
|
assert len(results_all) == 2, "应该有2个交易"
|
|
print(" ✓ 通过")
|
|
|
|
# 测试6: 更新交易分类
|
|
print("\n[测试6] 更新交易分类")
|
|
fm.update_transaction(admin_acc.id, trans1.id, category="奖金")
|
|
fm.load_all_accounts()
|
|
admin_acc = fm.get_account(admin_acc.id)
|
|
updated_trans = fm.get_transaction(admin_acc.id, trans1.id)
|
|
print(f" 更新后的分类: {updated_trans.category}")
|
|
assert updated_trans.category == "奖金", "分类应该更新为 '奖金'"
|
|
print(" ✓ 通过")
|
|
|
|
# 测试7: CSV导出包含分类
|
|
print("\n[测试7] CSV导出包含分类")
|
|
csv_path = "/tmp/test_export.csv"
|
|
result = fm.export_to_csv(admin_acc.id, csv_path)
|
|
print(f" 导出结果: {'成功' if result else '失败'}")
|
|
assert result, "应该成功导出CSV"
|
|
# 验证CSV内容
|
|
with open(csv_path, 'r', encoding='utf-8-sig') as f:
|
|
lines = f.readlines()
|
|
print(f" CSV行数: {len(lines)}")
|
|
print(f" 标题行: {lines[0].strip()}")
|
|
assert "分类" in lines[0], "CSV应该包含 '分类' 列"
|
|
print(f" 数据行1: {lines[1].strip()}")
|
|
print(f" 数据行2: {lines[2].strip()}")
|
|
print(" ✓ 通过")
|
|
|
|
print("\n" + "=" * 60)
|
|
print("所有测试都通过了!✓")
|
|
print("=" * 60)
|