Explorer
/tmp/aa045f3_test_bcd.py
← Zurück ↓ Download
"""AA-045-F3 Tests B, C, D."""
import sys, json
sys.path.insert(0, "/opt/struktur/social-media-radar")
import sqlite3
conn = sqlite3.connect("/var/lib/sma-data/signals.db")
conn.row_factory = sqlite3.Row

# ── TEST B: vorhandenes Briefing nicht überschreiben ──────────────────────
SID_B = "88017f5a-01d2-4726-9d06-513339498080"
vorher = dict(conn.execute("SELECT briefing_winkel, briefing_nutzen FROM signals WHERE signal_id=?", (SID_B,)).fetchone())
from content_briefing import run as run_briefing
run_briefing(limit=100)   # Normalbetrieb: Signal hat briefing_winkel -> nicht in Auswahl
nachher = dict(conn.execute("SELECT briefing_winkel, briefing_nutzen FROM signals WHERE signal_id=?", (SID_B,)).fetchone())
n_rows = conn.execute("""SELECT COUNT(*) FROM signals WHERE COALESCE(briefing_winkel,'')='' AND status NOT IN ('ignoriert','veroeffentlicht') AND COALESCE(mallorca_relevance,0)>0""").fetchone()[0]
b_ok = (vorher == nachher and n_rows == 0)
print(f"TEST B: unveraendert={vorher==nachher} | Restbestand={n_rows} -> {'BESTANDEN' if b_ok else 'FEHLER'}")

# ── TEST C: ungeeignetes Signal -> sauberer Status, kein Leerfehler ───────
# Ein Signal mit mallorca_relevance=0 wird gar nicht gebrieft (Auswahlkriterium).
row_c = conn.execute("""SELECT signal_id FROM signals
    WHERE COALESCE(mallorca_relevance,0)=0 AND status NOT IN ('ignoriert','veroeffentlicht')
      AND radar_score >= 31 LIMIT 1""").fetchone()
if row_c:
    sid_c = row_c["signal_id"]
    import urllib.request
    with urllib.request.urlopen(f"http://127.0.0.1:8652/api/caption/{sid_c}", timeout=60) as resp:
        cap = json.loads(resp.read())
    print(f"TEST C: {sid_c[:12]} | caption success={cap['success']} | reason='{cap.get('reason','')[:60]}'")
    c_ok = (not cap["success"] and "mallorca_relevance=0" in cap.get("reason",""))
    print("TEST C:", "BESTANDEN" if c_ok else "PRUEFEN")
else:
    print("TEST C: kein ungeeignetes Signal vorhanden (alle relevant)")

# ── TEST D: Briefing-Fehler -> Fehlerstatus + Retry ───────────────────────
SID_D = None
# frisches Test-Signal anlegen (wird danach wieder geloescht - Testsignal, kein echtes)
import uuid
SID_D = str(uuid.uuid4())
conn.execute("""
    INSERT INTO signals (signal_id, timestamp, source_type, source_name, source_url,
        language, signal_category, topic, short_summary, extracted_hook,
        emotional_direction, urgency_level, mallorca_relevance, risk_relevance,
        suggested_cta, confidence_score, radar_score, expires_at, created_at,
        status, source_count)
    VALUES (?, ?, 'test', 'AA-045-F3 Test', '', 'de', 'feuchte',
        'Testsignal Feuchtigkeit Mallorca', 'Test', '',
        'neutral', 0, 25, 0, '', 0.5, 40,
        datetime('now','+7 days'), datetime('now'), 'neu', 1)
""", (SID_D, __import__("datetime").datetime.now(__import__("datetime").timezone.utc).isoformat()))
conn.commit()

# compute_briefing kontrolliert zum Scheitern bringen (monkeypatch)
from content_briefing import run as run_briefing, compute_briefing
_orig = compute_briefing
def _broken(sig): raise RuntimeError("kontrollierter Testfehler")
import content_briefing
content_briefing.compute_briefing = _broken
run_briefing(limit=50)
content_briefing.compute_briefing = _orig

r = dict(conn.execute("SELECT briefing_error, briefing_winkel FROM signals WHERE signal_id=?", (SID_D,)).fetchone())
d1 = bool(r["briefing_error"]) and r["briefing_error"].startswith("briefing-failed")
print(f"TEST D Teil1 (Fehlerstatus gesetzt): {d1} | error='{(r['briefing_error'] or '')[:60]}'")

# Retry: jetzt normal laufen lassen -> Signal wird erneut verarbeitet (briefing_winkel noch leer)
run_briefing(limit=200)
r2 = dict(conn.execute("SELECT briefing_error, briefing_winkel FROM signals WHERE signal_id=?", (SID_D,)).fetchone())
d2 = r2["briefing_winkel"] != "" and not r2["briefing_error"]
print(f"TEST D Teil2 (Retry erfolgreich): winkel='{(r2['briefing_winkel'] or '')[:40]}' error=''")

# Testsignal wieder aufraeumen (eigene Testressource, keine historischen Daten)
conn.execute("DELETE FROM signals WHERE signal_id=? AND source_type='test'", (SID_D,))
conn.commit()
print("TEST D:", "BESTANDEN" if (d1 and d2) else "FEHLER", "| Testsignal entfernt")