This commit is contained in:
team3
2026-07-24 11:23:18 +02:00
parent cb68cd671b
commit 1b054497ed
49 changed files with 935 additions and 408 deletions

View File

@@ -64,32 +64,20 @@ async def test_suche_dedupliziert_urls():
assert erg2.daten["neu"] == 0 # gleiche URL → kein zweiter Laden-Task
async def test_relevanz_filter_wirft_listen_raus(monkeypatch):
"""Läuft OHNE Fake-Kurzschluss — genau der Pfad, der im Echtlauf brach."""
monkeypatch.setattr(config, "FAKE", False)
from backend import llm as llm_mod
async def urteil(**kw):
assert "quellen-relevanz" in kw["skill_namen"]
assert "Pasta" in kw["werte"]["treffer"] # Wiki läuft MIT durchs Urteil
return "===RELEVANT===\nIDS: 0,1,3"
monkeypatch.setattr(llm_mod, "call", urteil)
treffer = [
{"titel": "Pomodoro-Technik Wikipedia",
"url": "https://de.wikipedia.org/wiki/X", "backend": "wikipedia_de"},
{"titel": "Guter Artikel", "url": "https://a.de/1", "backend": "ddgs"},
{"titel": "Pasta", "url": "https://en.wikipedia.org/wiki/Pasta",
"backend": "wikipedia_en"},
{"titel": "Anleitung", "url": "https://a.de/3", "backend": "ddgs"},
]
async def test_inhalts_urteil_sortiert_nach_dem_laden_aus():
"""Kein Titel-Filter mehr — das Urteil fällt auf dem geladenen Inhalt
(Lektion 102). Fake-Handler: Titel „Werbeliste" → nein."""
topic = topic_anlegen()
run_id = db.insert("runs", topic=topic, status="running")
task = {"run_id": run_id, "topic": topic, "item": "t", "runde": 1}
ergebnis = await suche._relevanz_filter(task, "Thema", treffer)
urls = [t["url"] for t in ergebnis]
assert "https://de.wikipedia.org/wiki/X" in urls
assert "https://a.de/1" in urls and "https://a.de/3" in urls
assert "https://en.wikipedia.org/wiki/Pasta" not in urls # Off-Topic-Wiki raus
qid = db.insert("quellen", topic=topic, titel="Werbeliste Tools 2026",
url="https://beispiel.de/grundlagen",
url_norm="w1", backend="ddgs", zweck="korpus")
erg = await laden.laden({"run_id": run_id, "topic": topic, "runde": 1,
"knoten": "laden", "payload": db.j({"quelle_id": qid})})
assert erg.daten.get("aussortiert")
q = db.one("SELECT status, grund FROM quellen WHERE id=?", qid)
assert q["status"] == "aussortiert" and q["grund"]
assert erg.neue_tasks == [] # keine Soll-Extraktion für Aussortierte
async def test_wikipedia_seed_umgeht_deckel(monkeypatch):
@@ -144,7 +132,7 @@ async def test_laden_snapshot_stabil():
qid = db.insert("quellen", topic=topic, url="https://beispiel.de/grundlagen",
url_norm="https://beispiel.de/grundlagen", zweck="korpus")
t = {"run_id": run_id, "topic": topic, "runde": 1,
"payload": db.j({"quelle_id": qid})}
"knoten": "laden", "payload": db.j({"quelle_id": qid})}
erg1 = await laden.laden({**t})
q = db.one("SELECT * FROM quellen WHERE id=?", qid)
assert q["status"] == "geladen" and q["snapshot"]
@@ -161,7 +149,30 @@ async def test_laden_leere_quelle_befund():
qid = db.insert("quellen", topic=topic, url="https://unbekannt.example/x",
url_norm="https://unbekannt.example/x")
erg = await laden.laden({"run_id": run_id, "topic": topic, "runde": 1,
"payload": db.j({"quelle_id": qid})})
"knoten": "laden", "payload": db.j({"quelle_id": qid})})
assert erg.neue_tasks == []
assert db.one("SELECT status FROM quellen WHERE id=?", qid)["status"] == "leer"
assert db.one("SELECT id FROM befunde WHERE run_id=? AND art='leer'", run_id)
async def test_seed_loest_wikipedia_titel_auf(monkeypatch):
"""Audit: Seed-Titel „AlpineJS" existiert nicht — Artikel heißt
„Alpine.js". Erst Wiki-Suche, direkter URL-Bau nur als Fallback."""
monkeypatch.setattr(config, "FAKE", False)
async def wiki(q):
assert q == "AlpineJS"
return [{"titel": "Alpine.js", "backend": "wikipedia_de",
"url": "https://de.wikipedia.org/wiki/Alpine.js"},
{"titel": "Nebentreffer", "backend": "wikipedia_de",
"url": "https://de.wikipedia.org/wiki/Nebentreffer"}]
monkeypatch.setattr(suche, "_wikipedia", wiki)
topic = topic_anlegen(name="seedaufl", titel="AlpineJS")
run_id = db.insert("runs", topic=topic, status="running")
await suche.suchen({"run_id": run_id, "topic": topic, "runde": 1,
"item": "r1:wikiseed", "payload": db.j({"seed": True})})
urls = [q["url"] for q in db.query("SELECT url FROM quellen WHERE topic=?",
topic)]
assert "https://de.wikipedia.org/wiki/Alpine.js" in urls # 1. Treffer zählt
assert any("en.wikipedia.org/wiki/AlpineJS" in u for u in urls) # Fallback