Files
EvoScientist/tests/test_image_gen_config.py
T
m4 aae8d0a379 feat: workspace file references, read-file-images middleware, image model enabled flag
In-progress work committed to unblock the config import/export plan:
- prompts: FILE_REFERENCES section for workspace-relative file citation
- backends: resolve quoted virtual absolute paths onto the sandbox workspace
- middleware: read_file_images middleware; message_budget extensions
- image_gen/model_registry: image model 'enabled' flag refactor
- memory/launch, gateway/background_runs, tools/image follow-ons
- scripts: dev_backend.sh, release.sh
- tests for the above
2026-08-12 19:43:35 +08:00

144 lines
4.5 KiB
Python

"""Tests for image_gen.config."""
import os
import pytest
from EvoScientist.image_gen.adapters.base import ImageGenError
from EvoScientist.image_gen.config import (
ImageGenerationSettings,
ImageModelEntry,
is_image_generation_model,
load_image_generation_settings,
)
def _write_config(tmp_path, body: str):
path = tmp_path / "config.yaml"
path.write_text(body, encoding="utf-8")
return path
def test_load_full_section(tmp_path, monkeypatch):
monkeypatch.setenv("TEST_IMG_KEY", "sk-secret-123")
path = _write_config(
tmp_path,
"""
image_generation:
default_model: gpt-image-2
timeout_seconds: 90
models:
- id: gpt-image-2
name: GPT Image 2
provider: openai
api_key: ${TEST_IMG_KEY}
base_url: https://api.openai.com
default_size: "1024x1024"
- id: imagen-4.0-generate-001
provider: gemini
api_key: ${TEST_IMG_KEY}
enabled: false
""",
)
settings = load_image_generation_settings(config_path=path)
assert settings.default_model == "gpt-image-2"
assert settings.timeout_seconds == 90
assert len(settings.models) == 2
openai_entry = settings.models[0]
assert openai_entry.resolved_api_key() == "sk-secret-123"
assert openai_entry.resolved_base_url() == "https://api.openai.com"
assert openai_entry.display_name() == "GPT Image 2"
gemini_entry = settings.models[1]
assert gemini_entry.provider == "gemini"
assert gemini_entry.enabled is False
assert gemini_entry.display_name() == "imagen-4.0-generate-001"
def test_missing_file_returns_empty_settings(tmp_path):
settings = load_image_generation_settings(config_path=tmp_path / "nope.yaml")
assert settings == ImageGenerationSettings()
def test_missing_section_returns_empty_settings(tmp_path):
path = _write_config(tmp_path, "webui_port: 4716\n")
settings = load_image_generation_settings(config_path=path)
assert settings.models == []
def test_unresolved_env_ref_yields_empty(tmp_path, monkeypatch):
monkeypatch.delenv("NOPE_NOT_SET", raising=False)
path = _write_config(
tmp_path,
"""
image_generation:
models:
- id: gpt-image-2
provider: openai
api_key: ${NOPE_NOT_SET}
""",
)
settings = load_image_generation_settings(config_path=path)
assert settings.models[0].resolved_api_key() == ""
def test_plain_value_passthrough(tmp_path):
path = _write_config(
tmp_path,
"""
image_generation:
models:
- id: gpt-image-2
provider: openai
api_key: sk-literal
""",
)
settings = load_image_generation_settings(config_path=path)
assert settings.models[0].resolved_api_key() == "sk-literal"
def test_validation_error_never_echoes_config_values(tmp_path):
"""A malformed section must raise a sanitized error: field locations and
error types only, never the offending input values (key-leak red line)."""
path = _write_config(
tmp_path,
"""
image_generation:
models:
- id: gpt-image-2
provider: sk-secret-value-123
api_key: sk-secret-value-123
""",
)
with pytest.raises(ImageGenError) as excinfo:
load_image_generation_settings(config_path=path)
message = str(excinfo.value)
assert "sk-secret-value-123" not in message
assert "provider" in message
def test_is_image_generation_model():
assert is_image_generation_model("gpt-image-2") is True
assert is_image_generation_model("dall-e-3") is True
assert is_image_generation_model("openai/gpt-image-1") is True
assert is_image_generation_model("imagen-4.0-generate-001") is True
assert is_image_generation_model("doubao-seedream-4-0") is True
assert is_image_generation_model("wanx2.1-t2i-turbo") is True
assert is_image_generation_model("glm-5.2") is False
assert is_image_generation_model("gpt-4o") is False
assert is_image_generation_model(None) is False
assert is_image_generation_model("") is False
def test_evoscientist_config_ignores_section(tmp_path, monkeypatch):
"""The platform config loader filters unknown keys, so the image section
never leaks through EvoScientistConfig / its API surface."""
from EvoScientist.config import settings as config_settings
path = _write_config(
tmp_path,
"image_generation:\n models:\n - id: gpt-image-2\n api_key: sk-x\n",
)
monkeypatch.setattr(config_settings, "get_config_path", lambda: path)
cfg = config_settings.load_config()
assert not hasattr(cfg, "image_generation")