import sys import types import pytest from src.models.gemini import GeminiModel class FakeGenaiModel: def __init__(self, name, supported_actions=None): self.name = name self.supported_actions = supported_actions def _install_fake_genai(models): fake_models = types.SimpleNamespace(list=lambda: models) fake_client_instance = types.SimpleNamespace(models=fake_models) fake_genai_module = types.SimpleNamespace(Client=lambda: fake_client_instance) google_module = types.ModuleType("google") google_module.genai = fake_genai_module sys.modules["google"] = google_module sys.modules["google.genai"] = fake_genai_module @pytest.fixture(autouse=True) def _reset_cache(): GeminiModel._models_cache = None yield GeminiModel._models_cache = None sys.modules.pop("google", None) sys.modules.pop("google.genai", None) def test_excludes_veo_model_missing_predict_long_running(): _install_fake_genai( [ FakeGenaiModel("models/veo-3.1-fast-generate-001", supported_actions=["generateContent"]), FakeGenaiModel("models/veo-3.1-fast-generate-preview", supported_actions=["predictLongRunning"]), ] ) models = GeminiModel.list_models() assert "veo-3.1-fast-generate-001" not in models assert "veo-3.1-fast-generate-preview" in models def test_keeps_veo_model_with_unknown_supported_actions(): _install_fake_genai( [ FakeGenaiModel("models/veo-3.1-generate-preview", supported_actions=None), ] ) models = GeminiModel.list_models() assert "veo-3.1-generate-preview" in models def test_omni_models_not_filtered_by_supported_actions(): _install_fake_genai( [ FakeGenaiModel("models/gemini-omni-flash-preview", supported_actions=["generateContent"]), ] ) models = GeminiModel.list_models() assert "gemini-omni-flash-preview" in models def test_falls_back_to_static_models_when_genai_list_fails(): def _raise(): raise RuntimeError("no api key") fake_models = types.SimpleNamespace(list=_raise) fake_client_instance = types.SimpleNamespace(models=fake_models) fake_genai_module = types.SimpleNamespace(Client=lambda: fake_client_instance) google_module = types.ModuleType("google") google_module.genai = fake_genai_module sys.modules["google"] = google_module sys.modules["google.genai"] = fake_genai_module models = GeminiModel.list_models() assert "veo-3.1-fast-generate-001" not in models assert "veo-3.1-fast-generate-preview" in models assert "gemini-omni-1.1-flash" in models