51 lines
2.1 KiB
Python
51 lines
2.1 KiB
Python
"""Provider-Layer: Fake-Umschaltung, harter Stopp ohne Rollen-Config, kein Fallback."""
|
|
import re
|
|
from pathlib import Path
|
|
|
|
import pytest
|
|
|
|
import agents
|
|
|
|
|
|
async def test_fake_umschaltung(fake_welt):
|
|
fake_welt.antwort_auf(r"-schneiden-", lambda prompt: "ANTWORT")
|
|
rc, out, err = await agents.run_agent("scan-x-schneiden-1", "egal", 5, role="schneiden")
|
|
assert (rc, out) == (0, "ANTWORT")
|
|
assert fake_welt.calls == ["scan-x-schneiden-1"]
|
|
|
|
|
|
async def test_stoerung_dann_fehler(fake_welt):
|
|
fake_welt.antwort_auf(r".", lambda prompt: "ok")
|
|
fake_welt.stoerungen.append({"muster": r"-schneiden-", "modus": "fehler", "mal": 1})
|
|
rc1, _, err1 = await agents.run_agent("scan-x-schneiden-1", "egal", 5, role="schneiden")
|
|
rc2, out2, _ = await agents.run_agent("scan-x-schneiden-1", "egal", 5, role="schneiden")
|
|
assert (rc1, err1) == (1, "fake-stoerung")
|
|
assert (rc2, out2) == (0, "ok")
|
|
|
|
|
|
async def test_infra_stoerung_wirft(fake_welt):
|
|
fake_welt.stoerungen.append({"muster": r".", "modus": "infra", "mal": 1})
|
|
with pytest.raises(agents.AgentInfraError):
|
|
await agents.run_agent("scan-x-schneiden-1", "egal", 5, role="schneiden")
|
|
|
|
|
|
async def test_unkonfigurierte_rolle_pausiert(monkeypatch):
|
|
"""Ohne Fake-Modus und ohne ROLLE_-Env: AgentInfraError (Lauf pausiert), kein Default."""
|
|
monkeypatch.delenv("PLANER_FAKE_AGENTS", raising=False)
|
|
monkeypatch.delenv("ROLLE_JUDGE", raising=False)
|
|
with pytest.raises(agents.AgentInfraError, match="kein Modell konfiguriert"):
|
|
await agents.run_agent("scan-x-judge-1", "egal", 5, role="judge")
|
|
|
|
|
|
def test_kein_fallback_codepfad():
|
|
"""Der Creator-Fallback (_available_cached / 'routed provider unavailable') darf
|
|
nicht mitportiert worden sein."""
|
|
quelle = Path(agents.__file__).read_text(encoding="utf-8")
|
|
assert "_available_cached" not in quelle
|
|
assert not re.search(r"run_provider", quelle)
|
|
|
|
|
|
def test_prioritaet_der_stufen():
|
|
assert agents._agent_priority("scan-p-sichten-1") < agents._agent_priority("scan-p-schneiden-9")
|
|
assert agents._agent_priority("irgendwas") == len(agents._STAGE_PRIORITY)
|