"""시간 손절이 시각 기준 불일치로 조기 발동하지 않는지 검증. 2026-09-23: 재배포로 DB 복원된 포지션의 entry_time 이 UTC 라 KST now 와의 차이가 +540분이 되어 진입 25분 만에 '시간 손절: 565분 경과'로 청산됐다(익절까지 가지 못함). """ from datetime import datetime, timedelta import pytz from app.services.day_trading_strategy import _elapsed_minutes KST = pytz.timezone("Asia/Seoul") def _kst_now(): return datetime.now(KST).replace(tzinfo=None) def test_normal_elapsed_is_returned(): v = _elapsed_minutes(_kst_now() - timedelta(minutes=40)) assert v is not None and 39 < v < 41 def test_utc_entry_time_is_rejected(): """UTC 로 저장된 진입시각(=KST-9h) → 경과 +540분 → 무시해야 한다.""" utc_entry = _kst_now() - timedelta(hours=9) + timedelta(minutes=25) # 실제 25분 전 assert _elapsed_minutes(utc_entry) is None def test_future_entry_time_is_rejected(): assert _elapsed_minutes(_kst_now() + timedelta(minutes=5)) is None def test_none_entry_time(): assert _elapsed_minutes(None) is None def test_boundary_is_market_day_length(): assert _elapsed_minutes(_kst_now() - timedelta(minutes=389)) is not None assert _elapsed_minutes(_kst_now() - timedelta(minutes=391)) is None