from __future__ import annotations from datetime import UTC, datetime, timedelta from typer.testing import CliRunner from broker_sync import __version__ from broker_sync.cli import app runner = CliRunner() def test_version_prints_package_version() -> None: result = runner.invoke(app, ["version"]) assert result.exit_code == 0 assert __version__ in result.stdout # -- invest-engine CLI -- def _future_iso() -> str: return (datetime.now(UTC) + timedelta(days=30)).isoformat() def _past_iso() -> str: return (datetime.now(UTC) - timedelta(days=1)).isoformat() def test_invest_engine_expired_token_exits_2() -> None: """Guard against burning a request on a token the user already knows is dead.""" result = runner.invoke( app, ["invest-engine"], env={ "WF_BASE_URL": "https://wf.example.com", "WF_USERNAME": "u", "WF_PASSWORD": "p", "IE_BEARER_TOKEN": "anything", "IE_TOKEN_EXPIRES_AT": _past_iso(), "BROKER_SYNC_DATA_DIR": "/tmp", }, ) assert result.exit_code == 2, result.output assert "expired" in result.output.lower() or "token" in result.output.lower() def test_invest_engine_unknown_mode_exits_2() -> None: result = runner.invoke( app, ["invest-engine", "--mode", "nonsense"], env={ "WF_BASE_URL": "https://wf.example.com", "WF_USERNAME": "u", "WF_PASSWORD": "p", "IE_BEARER_TOKEN": "t", "IE_TOKEN_EXPIRES_AT": _future_iso(), "BROKER_SYNC_DATA_DIR": "/tmp", }, ) assert result.exit_code == 2 def test_invest_engine_malformed_expires_exits_2() -> None: result = runner.invoke( app, ["invest-engine"], env={ "WF_BASE_URL": "https://wf.example.com", "WF_USERNAME": "u", "WF_PASSWORD": "p", "IE_BEARER_TOKEN": "t", "IE_TOKEN_EXPIRES_AT": "not-an-iso-date", "BROKER_SYNC_DATA_DIR": "/tmp", }, ) assert result.exit_code == 2