"""Regression tests for #3691: provider-agnostic model-picker overflow groups.""" from __future__ import annotations import json import shutil import subprocess import sys import types import urllib.request from pathlib import Path import pytest import api.config as config REPO = Path(__file__).resolve().parents[1] UI_JS = (REPO / "static" / "ui.js").read_text(encoding="utf-8") I18N_JS = (REPO / "static" / "i18n.js").read_text(encoding="utf-8") PANELS_JS = (REPO / "static" / "panels.js").read_text(encoding="utf-8") NODE = shutil.which("node") class _FakeResponse: def __init__(self, payload: dict): self._buf = json.dumps(payload).encode() def __enter__(self): return self def __exit__(self, *_args): return None def read(self) -> bytes: return self._buf @pytest.fixture(autouse=True) def _clear_models_cache(): try: config.invalidate_models_cache() except Exception: pass yield try: config.invalidate_models_cache() except Exception: pass def _openrouter_group() -> dict: return next(g for g in config.get_available_models()["groups"] if g["provider_id"] == "openrouter") def test_populate_model_dropdown_persists_extra_models_for_picker_runtime(): assert "dataset.extraModels=JSON.stringify(g.extra_models)" in UI_JS, ( "populateModelDropdown() must persist extra_models onto the optgroup so " "renderModelDropdown() can search hidden overflow models before expansion." ) def test_native_model_selectors_include_overflow_extra_models(): """The non-picker native . // _appendOverflowOptionsToGroup appends to the