58 lines
2.6 KiB
Python
58 lines
2.6 KiB
Python
from __future__ import annotations
|
|
|
|
from jarca_ledger_mcp import service
|
|
|
|
|
|
def test_ledger_category_create_list_delete_reactivate(tmp_path):
|
|
db_path = str(tmp_path / "ledger.sqlite3")
|
|
health = service.health_check(db_path)
|
|
assert health["schema_version"] == "14"
|
|
|
|
created = service.create_ledger_category("반려동물", "사료", sort_order=250, memo="test", db_path=db_path)
|
|
assert created["success"] is True
|
|
assert created["category"]["category"] == "반려동물"
|
|
assert created["category"]["subcategory"] == "사료"
|
|
assert created["category"]["cashflow_kind"] == "expense"
|
|
assert created["category"]["active"] is True
|
|
|
|
listed = service.list_ledger_categories(db_path=db_path)
|
|
assert listed["count"] == 1
|
|
assert listed["grouped"] == {"반려동물": ["사료"]}
|
|
|
|
deleted = service.delete_ledger_category("반려동물", "사료", db_path=db_path)
|
|
assert deleted["success"] is True
|
|
assert service.list_ledger_categories(db_path=db_path)["count"] == 0
|
|
assert service.list_ledger_categories(active_only=False, db_path=db_path)["categories"][0]["active"] is False
|
|
|
|
reactivated = service.create_ledger_category("반려동물", "사료", sort_order=260, db_path=db_path)
|
|
assert reactivated["success"] is True
|
|
assert reactivated["category"]["active"] is True
|
|
assert reactivated["category"]["sort_order"] == 260
|
|
|
|
|
|
def test_ledger_category_cashflow_kind(tmp_path):
|
|
db_path = str(tmp_path / "ledger.sqlite3")
|
|
income = service.create_ledger_category("기타수입", "상금", cashflow_kind="income", db_path=db_path)
|
|
assert income["success"] is True
|
|
assert income["category"]["cashflow_kind"] == "income"
|
|
invalid = service.create_ledger_category("테스트", "", cashflow_kind="bad", db_path=db_path)
|
|
assert invalid["success"] is False
|
|
assert invalid["error_code"] == "validation_error"
|
|
|
|
|
|
def test_ledger_category_hard_delete_requires_force_when_in_use(tmp_path):
|
|
db_path = str(tmp_path / "ledger.sqlite3")
|
|
service.create_ledger_category("식비", "마트", db_path=db_path)
|
|
service.create_ledger_transaction("2026-06-01", "expense", 10000, category="식비", subcategory="마트", merchant="테스트마트", db_path=db_path)
|
|
|
|
blocked = service.delete_ledger_category("식비", "마트", hard_delete=True, db_path=db_path)
|
|
assert blocked["success"] is False
|
|
assert blocked["error_code"] == "category_in_use"
|
|
|
|
soft = service.delete_ledger_category("식비", "마트", db_path=db_path)
|
|
assert soft["success"] is True
|
|
assert soft["transaction_count"] == 1
|
|
|
|
txs = service.list_ledger_transactions(category="식비", db_path=db_path)
|
|
assert txs["count"] == 1
|