Files
jarca-ledger-mcp/tests/test_ledger_categories.py
T

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