mirror of
https://github.com/goldenfishs/MRobot.git
synced 2026-02-04 18:00:19 +08:00
97 lines
2.9 KiB
Python
97 lines
2.9 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
测试删除默认分类功能
|
|
"""
|
|
|
|
import shutil
|
|
from pathlib import Path
|
|
from app.tools.finance_manager import FinanceManager, Transaction, Account
|
|
|
|
# 清除旧数据
|
|
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] 新建账户的分类为空")
|
|
accounts = fm.get_all_accounts()
|
|
admin_acc = accounts[0]
|
|
print(f" 账户名称: {admin_acc.name}")
|
|
print(f" 分类数量: {len(admin_acc.categories)}")
|
|
print(f" 分类列表: {admin_acc.categories}")
|
|
assert len(admin_acc.categories) == 0, "新账户应该没有默认分类"
|
|
print(" ✓ 通过")
|
|
|
|
# 测试2: 用户创建分类
|
|
print("\n[测试2] 用户创建分类")
|
|
fm.add_category(admin_acc.id, "工资")
|
|
fm.add_category(admin_acc.id, "房租")
|
|
fm.add_category(admin_acc.id, "娱乐")
|
|
categories = fm.get_categories(admin_acc.id)
|
|
print(f" 创建的分类: {categories}")
|
|
assert len(categories) == 3, "应该有3个分类"
|
|
assert "工资" in categories
|
|
assert "房租" in categories
|
|
assert "娱乐" in categories
|
|
print(" ✓ 通过")
|
|
|
|
# 测试3: 创建交易时必须指定分类
|
|
print("\n[测试3] 创建交易时分类不能为空")
|
|
trans1 = Transaction(
|
|
date="2025-01-01",
|
|
amount=5000,
|
|
trader="工作所得",
|
|
notes="1月工资",
|
|
category="工资"
|
|
)
|
|
assert trans1.category == "工资", "交易应该有分类"
|
|
print(f" 交易分类: {trans1.category}")
|
|
print(" ✓ 通过")
|
|
|
|
# 测试4: 验证空分类的交易
|
|
print("\n[测试4] 检查默认分类为空字符串")
|
|
trans_no_cat = Transaction(
|
|
date="2025-01-01",
|
|
amount=100,
|
|
trader="测试用户"
|
|
)
|
|
print(f" 未指定分类的交易分类: '{trans_no_cat.category}'")
|
|
assert trans_no_cat.category == "", "未指定分类应该为空字符串"
|
|
print(" ✓ 通过")
|
|
|
|
# 测试5: 用户可以删除自定义分类
|
|
print("\n[测试5] 用户可以删除自定义分类")
|
|
success = fm.delete_category(admin_acc.id, "娱乐")
|
|
print(f" 删除 '娱乐' 分类: {'成功' if success else '失败'}")
|
|
assert success, "应该成功删除分类"
|
|
categories = fm.get_categories(admin_acc.id)
|
|
print(f" 删除后的分类: {categories}")
|
|
assert "娱乐" not in categories
|
|
assert len(categories) == 2
|
|
print(" ✓ 通过")
|
|
|
|
# 测试6: 验证分类持久化
|
|
print("\n[测试6] 分类数据持久化")
|
|
# 创建新的财务管理器实例,应该重新加载分类
|
|
fm2 = FinanceManager()
|
|
accounts2 = fm2.get_all_accounts()
|
|
admin_acc2 = accounts2[0]
|
|
categories2 = fm2.get_categories(admin_acc2.id)
|
|
print(f" 重新加载后的分类: {categories2}")
|
|
assert len(categories2) == 2, "应该有2个分类"
|
|
assert "工资" in categories2
|
|
assert "房租" in categories2
|
|
assert "娱乐" not in categories2
|
|
print(" ✓ 通过")
|
|
|
|
print("\n" + "=" * 60)
|
|
print("所有测试都通过了!✓")
|
|
print("=" * 60)
|