Spaces:
Running
Running
File size: 1,529 Bytes
20fef51 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | 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 = """
<html>
<body>
<span>\u7f8e\u5143(2026/01/02)</span>
<table>
<tr><td>01/02</td><td><span>9.3700</span></td></tr>
<tr><td>12/31</td><td><span>9.3300</span></td></tr>
</table>
</body>
</html>
"""
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)
|