from datetime import datetime, timezone import inspect from unittest.mock import patch def test_worker_publishes_completed_ml_prediction(): from scripts.hf_queue_worker import _compute_stocks now = datetime.now(timezone.utc) ml_result = { "signal": "BUY", "source": "ml_model", "signal_probability": 0.72, } with patch("services.predictor_service.get_ml_prediction_sync", return_value=ml_result): queue, changed = _compute_stocks(["2330"], {}, now) assert changed is True assert queue["2330"]["status"] == "done" assert queue["2330"]["source"] == "mac_worker" assert queue["2330"]["result"] == ml_result def test_worker_refuses_quick_rules_placeholder(): from scripts.hf_queue_worker import _compute_stocks now = datetime.now(timezone.utc) quick_result = { "signal": "HOLD", "source": "quick_rules", "signal_probability": 0.5, } with patch("services.predictor_service.get_ml_prediction_sync", return_value=quick_result): queue, changed = _compute_stocks(["2330"], {}, now) assert changed is True assert queue["2330"]["status"] == "error" assert queue["2330"]["source"] == "mac_worker" assert "quick_rules" in queue["2330"]["error"] def test_queue_cache_rejects_quick_rules_result(): from services.hf_queue_service import get_cached_result, is_publishable_result queue = { "2330": { "status": "done", "completed_at": datetime.now(timezone.utc).isoformat(), "result": { "signal": "HOLD", "source": "quick_rules", "disclaimer": "Quick estimate (technical rules only).", }, } } with patch("services.hf_queue_service.read_queue", return_value=queue): assert is_publishable_result(queue["2330"]["result"]) is False assert get_cached_result("2330") is None def test_queue_cache_accepts_ml_result(): from services.hf_queue_service import get_cached_result, is_publishable_result result = { "signal": "BUY", "source": "ml_model", "signal_probability": 0.72, } queue = { "2330": { "status": "done", "completed_at": datetime.now(timezone.utc).isoformat(), "result": result, } } with patch("services.hf_queue_service.read_queue", return_value=queue): assert is_publishable_result(result) is True assert get_cached_result("2330") == result def test_hf_startup_warmup_filters_placeholders(): from main import _warmup_from_queue source = inspect.getsource(_warmup_from_queue) assert "is_publishable_result" in source