@@ -43,9 +43,10 @@ def test_runtime_adapters_build_quote_and_portfolio_ports():
4343 portfolio = adapters .build_portfolio_port ().get_portfolio_snapshot ()
4444
4545 assert quote .last_price == 10.5
46- assert portfolio .total_equity == 120 .0
46+ assert portfolio .total_equity == 41 .0
4747 assert portfolio .cash_balance == 20.0
4848 assert portfolio .positions [0 ].symbol == "SPY"
49+ assert portfolio .metadata ["total_equity_source" ] == "cash_plus_positions"
4950
5051
5152def test_portfolio_snapshot_uses_account_value_balance_key ():
@@ -56,7 +57,6 @@ def get_balances(self, _account):
5657 adapters = build_runtime_broker_adapters (
5758 client = AccountValueClient (),
5859 account = "12345678" ,
59- strategy_symbols = ("SPY" ,),
6060 )
6161
6262 portfolio = adapters .build_portfolio_port ().get_portfolio_snapshot ()
@@ -66,6 +66,32 @@ def get_balances(self, _account):
6666 assert portfolio .metadata ["total_equity_source" ] == "balance_total"
6767
6868
69+ def test_managed_portfolio_snapshot_ignores_full_account_value_balance_key ():
70+ class AccountValueClient (FakeClient ):
71+ def get_balances (self , _account ):
72+ return {"account_value" : "$1,234.56" , "cash_balance" : "$200.00" }
73+
74+ def get_positions (self , _account ):
75+ return {
76+ "items" : [
77+ {"symbol" : "SPY" , "quantity" : "2" , "market_value" : "21.00" },
78+ {"symbol" : "AAPL" , "quantity" : "3" , "market_value" : "300.00" },
79+ ]
80+ }
81+
82+ adapters = build_runtime_broker_adapters (
83+ client = AccountValueClient (),
84+ account = "12345678" ,
85+ strategy_symbols = ("SPY" ,),
86+ )
87+
88+ portfolio = adapters .build_portfolio_port ().get_portfolio_snapshot ()
89+
90+ assert portfolio .total_equity == 221.0
91+ assert [position .symbol for position in portfolio .positions ] == ["SPY" ]
92+ assert portfolio .metadata ["total_equity_source" ] == "cash_plus_positions"
93+
94+
6995def test_portfolio_snapshot_falls_back_to_cash_when_total_value_missing ():
7096 class CashOnlyClient (FakeClient ):
7197 def get_balances (self , _account ):
0 commit comments