Files
hermes-webui/tests/test_issue1807_codex_provider_card_live_models.py
T
hermes-agent d69d0eb35b stage-314 absorb: isolate CODEX_HOME in v0.51.19 codex provider card tests
PR #1827 introduced _read_visible_codex_cache_model_ids() merging
into the providers card live-fetch path. The two v0.51.19 tests in
tests/test_issue1807_codex_provider_card_live_models.py predate that
helper and didn't isolate CODEX_HOME, so the dev machine's real
~/.codex/models_cache.json (which contains entries like
gpt-5.3-codex-spark from #1680) was leaking into their assertions.

Add CODEX_HOME isolation in the existing _configure_codex helper —
matches the pattern PR #1827's own test already uses. Test-only fix;
production code unchanged. Caught by pre-release pytest gate.
2026-05-07 18:09:40 +00:00

90 lines
3.0 KiB
Python

"""Regression tests for #1807 -- Codex providers card uses live models."""
import sys
import types
import api.config as config
import api.profiles as profiles
def _install_fake_hermes_cli(monkeypatch, provider_model_ids):
fake_pkg = types.ModuleType("hermes_cli")
fake_pkg.__path__ = []
fake_models = types.ModuleType("hermes_cli.models")
fake_models.list_available_providers = lambda: []
fake_models.provider_model_ids = provider_model_ids
fake_auth = types.ModuleType("hermes_cli.auth")
fake_auth.get_auth_status = lambda pid: {
"logged_in": pid == "openai-codex",
"key_source": "oauth",
}
monkeypatch.setitem(sys.modules, "hermes_cli", fake_pkg)
monkeypatch.setitem(sys.modules, "hermes_cli.models", fake_models)
monkeypatch.setitem(sys.modules, "hermes_cli.auth", fake_auth)
def _configure_codex(monkeypatch, tmp_path):
monkeypatch.setattr(profiles, "get_active_hermes_home", lambda: tmp_path)
monkeypatch.setattr(config, "_get_config_path", lambda: tmp_path / "missing-config.yaml")
monkeypatch.setattr(config, "cfg", {
"model": {"provider": "openai-codex", "default": "gpt-5.5"},
"providers": {},
"fallback_providers": [],
})
monkeypatch.setattr(config, "_cfg_mtime", 0.0)
# Isolate the Codex local model cache so the dev machine's real
# ~/.codex/models_cache.json (which may include account-specific entries
# like gpt-5.3-codex-spark) doesn't leak into these tests. Stage-314
# added _read_visible_codex_cache_model_ids() merging via PR #1827, so
# CODEX_HOME isolation is now load-bearing for these v0.51.19 tests.
codex_home = tmp_path / "no-codex"
codex_home.mkdir()
monkeypatch.setenv("CODEX_HOME", str(codex_home))
def _codex_provider():
from api.providers import get_providers
providers = get_providers()["providers"]
return next(p for p in providers if p["id"] == "openai-codex")
def test_codex_provider_card_prefers_live_account_catalog(monkeypatch, tmp_path):
live_codex_ids = [
"gpt-5.5",
"gpt-5.4",
"gpt-5.4-mini",
"gpt-5.3-codex",
"gpt-5.2",
]
def provider_model_ids(pid):
return live_codex_ids if pid == "openai-codex" else []
_install_fake_hermes_cli(monkeypatch, provider_model_ids)
_configure_codex(monkeypatch, tmp_path)
codex = _codex_provider()
ids = [m["id"] for m in codex["models"]]
assert ids == live_codex_ids
assert codex["models_total"] == len(live_codex_ids)
assert "gpt-5.5-mini" not in ids
assert "gpt-5.2-codex" not in ids
assert "codex-mini-latest" not in ids
def test_codex_provider_card_keeps_static_fallback_when_live_catalog_empty(monkeypatch, tmp_path):
_install_fake_hermes_cli(monkeypatch, lambda _pid: [])
_configure_codex(monkeypatch, tmp_path)
codex = _codex_provider()
ids = [m["id"] for m in codex["models"]]
assert "gpt-5.5-mini" in ids
assert "codex-mini-latest" in ids
assert codex["models_total"] == len(ids)