@@ -101,6 +101,54 @@ def _pm(monkeypatch, account, initial=300_000, cash_delta=0.0, deposits=0.0,
101101 return pm
102102
103103
104+ class TestBasketCapitalResolution :
105+ """바스켓 계정 키만으로 PM을 열어도 baskets.yaml 자본이 분모여야 한다.
106+
107+ 6차 점검 E2E 실측: 주문 리스크 가드(_drawdown_pre_order_check)가 account_key만으로
108+ PM을 열어 전역 10M 폴백 → 30만 pocket의 손실 한도가 사실상 무력화되던 결함.
109+ """
110+
111+ def test_basket_key_resolves_basket_capital (self , monkeypatch ):
112+ import core .portfolio_manager as pm_mod
113+
114+ monkeypatch .setattr (pm_mod , "get_latest_peak_value" , lambda account_key = "" : None )
115+ from unittest .mock import patch
116+ with patch (
117+ "core.basket_rebalancer.BasketRebalancer._load_baskets_config" ,
118+ return_value = {"kr_pocket" : {"initial_capital" : 300_000 }},
119+ ):
120+ pm = PortfolioManager (account_key = "basket_rebalance:kr_pocket" )
121+ assert pm .initial_capital == 300_000
122+
123+ def test_unknown_basket_falls_back_to_global (self , monkeypatch ):
124+ import core .portfolio_manager as pm_mod
125+
126+ monkeypatch .setattr (pm_mod , "get_latest_peak_value" , lambda account_key = "" : None )
127+ from unittest .mock import patch
128+ with patch (
129+ "core.basket_rebalancer.BasketRebalancer._load_baskets_config" ,
130+ return_value = {},
131+ ):
132+ pm = PortfolioManager (account_key = "basket_rebalance:no_such" )
133+ assert pm .initial_capital >= 1_000_000 # 전역 폴백(설정값)
134+
135+ def test_non_basket_key_unchanged (self , monkeypatch ):
136+ import core .portfolio_manager as pm_mod
137+
138+ monkeypatch .setattr (pm_mod , "get_latest_peak_value" , lambda account_key = "" : None )
139+ pm = PortfolioManager (account_key = "scoring" )
140+ assert pm .initial_capital >= 1_000_000 # 기존 동작 그대로
141+
142+ def test_explicit_capital_still_wins (self , monkeypatch ):
143+ import core .portfolio_manager as pm_mod
144+
145+ monkeypatch .setattr (pm_mod , "get_latest_peak_value" , lambda account_key = "" : None )
146+ pm = PortfolioManager (
147+ account_key = "basket_rebalance:kr_pocket" , initial_capital = 777 ,
148+ )
149+ assert pm .initial_capital == 777
150+
151+
104152class TestSummaryWithDeposits :
105153 def test_no_flows_keeps_legacy_formula (self , monkeypatch ):
106154 # 입금 0건: 총평가/초기자본 그대로 (하위 호환)
0 commit comments