"""Source checks for the gallery Settings-tab image-model picker. The Quick Edit model picker lives in the editor; HARNESS mirrors it into the gallery Settings tab, fed by GET /api/editor/image-models and sharing the same localStorage key (`ge-ai-command-model`) so the two stay in sync. """ from pathlib import Path ROOT = Path(__file__).resolve().parents[1] GALLERY_JS = (ROOT / "static/js/gallery.js").read_text(encoding="utf-8") def test_settings_tab_has_image_model_picker(): assert 'id="gallery-image-model"' in GALLERY_JS assert "/api/editor/image-models" in GALLERY_JS assert "ge-ai-command-model" in GALLERY_JS def test_image_model_picker_lives_in_the_settings_container(): settings_idx = GALLERY_JS.index('id="gallery-settings-container"') picker_idx = GALLERY_JS.index('id="gallery-image-model"') assert picker_idx > settings_idx def test_picker_persists_with_the_shared_localstorage_key(): assert "localStorage.setItem(_GE_MODEL_KEY" in GALLERY_JS assert "localStorage.getItem(_GE_MODEL_KEY)" in GALLERY_JS def test_cloud_image_models_are_listed_alongside_the_local_ones(): """Gateway endpoints (OpenRouter) register as llm but carry image models. The picker must surface those ids too — otherwise the only selectable edit model is the local Qwen server. """ routes = (ROOT / "routes/editor_agent_routes.py").read_text(encoding="utf-8") assert "from src.image_model_ids import looks_like_image_generation_model" in routes assert 'image_endpoint = getattr(ep, "model_type", None) == "image"' in routes assert "if not image_endpoint and not looks_like_image_generation_model(name):" in routes