Spaces:
Running
Running
| 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) | |