"""promptlens gateway wiring (no network: client construction only).""" import pytest from mathcompose.teachers import get_teacher, PROMPTLENS_BASE_URL def test_promptlens_requires_key(monkeypatch): for k in ("TFY_API_KEY", "PROMPTLENS_API_KEY", "OPENAI_API_KEY"): monkeypatch.delenv(k, raising=False) # also neutralize any .env on disk monkeypatch.setattr("mathcompose.common.env.load_dotenv", lambda *a, **k: False) with pytest.raises(RuntimeError, match="TFY_API_KEY"): get_teacher("promptlens") def _hermetic(monkeypatch): """Isolate from any on-disk .env / ambient TFY_* vars.""" monkeypatch.setattr("mathcompose.common.env.load_dotenv", lambda *a, **k: False) for k in ("TFY_MODEL", "TFY_BASE_URL", "PROMPTLENS_API_KEY", "OPENAI_API_KEY"): monkeypatch.delenv(k, raising=False) monkeypatch.setenv("TFY_API_KEY", "tfy-test-key") def test_promptlens_presets_base_url_and_model(monkeypatch): pytest.importorskip("openai") _hermetic(monkeypatch) t = get_teacher("promptlens") assert t.base_url == PROMPTLENS_BASE_URL assert t.model == "claude-sonnet-4-6" # default slug def test_promptlens_overrides(monkeypatch): pytest.importorskip("openai") _hermetic(monkeypatch) t = get_teacher("promptlens", model="claude-opus-4-8", base_url="https://example/api") assert t.model == "claude-opus-4-8" assert t.base_url == "https://example/api"