from app.notifiers.telegram_lotto import ( _format_urgent_signal, _format_signal_digest, ) def test_urgent_signal_format_basic(): event = { "fire_level": "urgent", "triggered_at": "2026-05-20T07:18:00.000Z", "results": [ {"metric": "sim_signal", "value": 1.84, "z_score": 3.9, "baseline_mu": 1.02, "baseline_sigma": 0.21, "payload": {}, "fire_level": "urgent"}, {"metric": "drift", "value": 0.18, "z_score": 3.0, "baseline_mu": 0.06, "baseline_sigma": 0.04, "fire_level": "normal", "payload": {"weights_now": {"gap_focus": 0.5, "hot_focus": 0.5}, "weights_prev": {"gap_focus": 0.3, "hot_focus": 0.7}}}, ], } text = _format_urgent_signal(event) assert "🚨" in text assert "Sim Consensus" in text assert "z=3.9" in text assert "Strategy Drift" in text def test_signal_digest_format_with_signals(): digest = { "evaluated": 6, "fired": 2, "signals": [ {"metric": "sim_signal", "fire_level": "normal", "z_score": 1.7, "triggered_at": "2026-05-20T16:18:00Z", "payload": {}}, {"metric": "confidence", "fire_level": "normal", "z_score": 1.6, "triggered_at": "2026-05-20T09:05:00Z", "payload": {}}, ], "weights_trend": {"gap_focus": +0.12, "hot_focus": -0.02, "pair_bias": -0.08}, } text = _format_signal_digest(digest) assert "πŸ“Š" in text assert "μ§€λ‚œ 24h" in text assert "z=1.7" in text def test_signal_digest_empty_returns_empty_string(): """λ°œν™” 0건이면 빈 λ¬Έμžμ—΄ β†’ λ°œμ†‘ 자체 skip κ°€λŠ₯.""" text = _format_signal_digest({"evaluated": 6, "fired": 0, "signals": [], "weights_trend": {}}) assert text == ""