77 lines
2.4 KiB
Python
77 lines
2.4 KiB
Python
from types import SimpleNamespace
|
|
|
|
from jarca_ledger_mcp import service
|
|
from jarca_ledger_mcp.application import imports_service
|
|
|
|
|
|
def _transaction(date, balance):
|
|
return SimpleNamespace(
|
|
transaction_date=date,
|
|
transaction_datetime=f"{date} 10:00:00",
|
|
amount=100,
|
|
counterparty="상대",
|
|
raw_summary="입금",
|
|
branch="",
|
|
remittance_memo="",
|
|
balance_after=balance,
|
|
type="income",
|
|
page=1,
|
|
action="입금",
|
|
external_id=lambda source_hash: f"review63:{source_hash}",
|
|
raw_payload=lambda: "{}",
|
|
)
|
|
|
|
|
|
def test_create_rejects_basis_only_without_mutation(tmp_path):
|
|
path = str(tmp_path / "ledger.sqlite3")
|
|
|
|
rejected = service.create_ledger_account(
|
|
"기준일만 있는 계좌",
|
|
last_balance_basis_date="2026-07-31",
|
|
db_path=path,
|
|
)
|
|
|
|
assert rejected == {
|
|
"success": False,
|
|
"error_code": "validation_error",
|
|
"error": "last_balance_basis_date requires last_balance",
|
|
}
|
|
baseline = service.create_ledger_account("정상 계좌", db_path=path)
|
|
assert baseline["success"] is True
|
|
listed = service.list_ledger_accounts(active_only=False, db_path=path)
|
|
assert listed["count"] == 1
|
|
assert listed["accounts"][0]["name"] == "정상 계좌"
|
|
|
|
|
|
def test_basis_only_create_cannot_block_later_dated_import(tmp_path, monkeypatch):
|
|
path = str(tmp_path / "ledger.sqlite3")
|
|
rejected = service.create_ledger_account(
|
|
"기준일만 있는 계좌",
|
|
last_balance_basis_date="2026-07-31",
|
|
db_path=path,
|
|
)
|
|
assert rejected["success"] is False
|
|
|
|
account = service.create_ledger_account("정상 계좌", db_path=path)["account"]["id"]
|
|
monkeypatch.setattr(
|
|
imports_service,
|
|
"parse_kb_bank_pdf",
|
|
lambda *_: {
|
|
"transactions": [_transaction("2026-06-30", 50)],
|
|
"validation": {"ok": True},
|
|
"source_hash": "review63",
|
|
"metadata": {"final_balance": 50, "account_number_masked": ""},
|
|
"file_path": "/tmp/synthetic.pdf",
|
|
"page_count": 1,
|
|
},
|
|
)
|
|
|
|
imported = imports_service.import_kb_bank_pdf(
|
|
"ignored", "pw", account_id=account, db_path=path,
|
|
)
|
|
|
|
current = service.list_ledger_accounts(active_only=False, db_path=path)["accounts"][0]
|
|
assert imported["success"] is True
|
|
assert current["last_balance"] == 50
|
|
assert current["last_balance_basis_date"] == "2026-06-30"
|