48 lines
2.6 KiB
Python
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
|