from datetime import date import pandas as pd import pytest from data.fund_fetcher import _parse_mobile_recent_nav from services.predictor_service import _fund_nav_fallback_prediction def test_moneydj_mobile_recent_nav_parser_handles_year_boundary(): html = """ \u7f8e\u5143(2026/01/02)
01/029.3700
12/319.3300
""" rows = _parse_mobile_recent_nav(html) assert rows[0]["date"] == date(2026, 1, 2) assert rows[0]["close"] == 9.37 assert rows[1]["date"] == date(2025, 12, 31) assert rows[1]["volume"] == 1.0 def test_short_moneydj_fund_history_returns_degraded_nav_prediction(): df = pd.DataFrame({ "date": pd.date_range("2026-05-01", periods=6), "open": [9.30, 9.31, 9.32, 9.34, 9.35, 9.37], "high": [9.30, 9.31, 9.32, 9.34, 9.35, 9.37], "low": [9.30, 9.31, 9.32, 9.34, 9.35, 9.37], "close": [9.30, 9.31, 9.32, 9.34, 9.35, 9.37], "volume": [1.0] * 6, }) result = _fund_nav_fallback_prediction("PIM91", df) assert result["signal"] == "HOLD" assert result["degraded"] is True assert result["history_rows"] == 6 assert result["feature_version"] == "fund-nav-fallback-v1" assert result["source"] == "MoneyDJ mobile recent NAV fallback" assert result["signal_probability"] == pytest.approx(0.5376, abs=0.0001)