from backtesting import engine as backtest from scoring import engine as scoring def test_metric_specific_staleness_does_not_apply_generic_30_day_fill(): lookup = {"2024-01-01": 42} assert backtest._metric_observation(lookup, "2024-01-03", "fear_greed") == (42, "2024-01-01", 2) assert backtest._metric_observation(lookup, "2024-01-04", "fear_greed") == (None, None, None) assert backtest._metric_observation(lookup, "2024-01-08", "200w_sma") == (42, "2024-01-01", 7) assert backtest._metric_observation(lookup, "2024-01-02", "unknown_metric") == (None, None, None) def test_current_context_score_uses_only_the_common_backtest_panel(): cached_scored = { "composite_score": 100, "metrics": [ {"key": "fear_greed", "score": 10}, {"key": "puell_multiple", "score": 0}, {"key": "sopr", "score": 10}, {"key": "vdd_multiple", "score": 10}, ], } score, coverage = backtest._common_panel_current_score(cached_scored) assert score == 50.0 assert coverage == { "available_count": 2, "panel_count": len(backtest.BACKTEST_METRIC_PANEL), "available_keys": ["fear_greed", "puell_multiple"], } def test_live_and_backtest_outputs_publish_panel_and_coverage_metadata(): live = scoring.score_all({"fear_greed": {"value": 10}}) assert live["metric_panel"]["id"] == "live-all-v1" assert live["metric_panel"]["count"] == live["total_count"] assert live["coverage"]["available_count"] == live["scored_count"] assert live["coverage"]["ratio"] == live["scored_count"] / live["total_count"] assert "score_version" in live metadata = backtest._backtest_data_quality_metadata([3, 5, 9]) assert metadata["metric_panel"]["id"] == "historical-common-v1" assert metadata["metric_panel"]["keys"] == list(backtest.BACKTEST_METRIC_PANEL) assert metadata["coverage"] == { "minimum_metrics": 3, "maximum_metrics": 9, "average_metrics": 5.7, "panel_count": 9, } assert metadata["staleness_days"] == backtest.METRIC_MAX_AGE_DAYS def test_chart_data_exposes_metric_values_under_frontend_contract(): result = backtest.run_backtest() entries = [entry for entry in result["chart_data"] if entry.get("metric_values")] assert entries assert all("metrics" not in entry for entry in entries)