Files
jarca-ledger-mcp/tests/test_account_snapshot_linking_display.py

48 lines
2.6 KiB
Python

from __future__ import annotations
from streamlit.testing.v1 import AppTest
def test_registration_dialog_exposes_real_account_snapshot_link_mode_and_fallback(monkeypatch):
from jarca_ledger_mcp.adapters.streamlit import overview_gateway, settlement_gateway
monkeypatch.setattr(overview_gateway, "get_monthly_settlement_summary", lambda *args, **kwargs: {
"success": True, "month": "2026-10", "selected_month": "2026-10", "basis_date": "2026-10-31",
"reports": {"cashflow": {}, "budget": {}, "assets": {}},
})
monkeypatch.setattr(settlement_gateway, "get_monthly_settlement_record", lambda *args, **kwargs: {
"success": True, "settlement": {"id": "ms-link-ui", "month": "2026-10", "basis_date": "2026-10-31", "status": "draft"},
})
monkeypatch.setattr(settlement_gateway, "list_account_snapshots_for_settlement", lambda *args, **kwargs: {
"success": True, "closed": False, "status": "draft", "count": 1, "registered_count": 0,
"unregistered_count": 1,
"snapshots": [{
"account_id": "acct-ui", "account_name": "실제 원본계정", "amount": None, "currency": "KRW",
"basis_date": None, "display_status": "미등록", "snapshot_id": None,
"unlinked_candidates": [
{"snapshot_id": "snap-exact", "basis_date": "2026-10-31", "amount": 777, "currency": "KRW", "verification_status": "unverified"},
],
"previous_ledger": {"id": "prev", "transaction_date": "2026-10-30", "balance_after": 1234, "currency": "KRW"},
"next_ledger": {"id": "next", "transaction_date": "2026-11-01", "balance_after": 2345, "currency": "KRW"},
}],
})
app = AppTest.from_string(
"import streamlit as st\n"
"st.query_params.update(page='monthly_settlement', id='ms-link-ui')\n"
"from dashboard.page_views.monthly_settlement import page_monthly_settlement\n"
"page_monthly_settlement(db_path='synthetic-unused.sqlite3')\n",
default_timeout=30,
).run()
assert not app.exception
dialog = [button for button in app.button if button.label == "실제 원본계정"][0].click().run()
assert not dialog.exception
assert {widget.label: widget for widget in dialog.text_input}["계정"].value == "실제 원본계정"
assert dialog.radio[0].value == "기존 스냅샷 연결"
assert dialog.selectbox[0].label == "기존 스냅샷"
assert "777" in dialog.selectbox[0].options[0]
assert {widget.label: widget for widget in dialog.text_input}["선택 금액"].disabled is True
fallback = dialog.radio[0].set_value("새 평가 등록").run()
assert not fallback.exception