50 lines
1.8 KiB
Python
50 lines
1.8 KiB
Python
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 == ""
|