Public Access
43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
import base64
|
|
from types import SimpleNamespace
|
|
from unittest.mock import Mock
|
|
from uuid import UUID
|
|
|
|
from app.services import image_generation
|
|
|
|
|
|
def test_generate_image_persists_local_url_and_openai_provenance(tmp_path, monkeypatch):
|
|
recipe = SimpleNamespace(
|
|
id=UUID("12345678-1234-5678-1234-567812345678"),
|
|
name="Spiced Chickpea Bowl",
|
|
ingredients=[{"name": "chickpeas"}],
|
|
cuisine_tags=["Mediterranean"],
|
|
image_url=None,
|
|
image_source=None,
|
|
)
|
|
db = Mock()
|
|
image_bytes = b"mock-png-bytes"
|
|
response = Mock(status_code=200)
|
|
response.json.return_value = {
|
|
"data": [{"b64_json": base64.b64encode(image_bytes).decode()}]
|
|
}
|
|
post = Mock(return_value=response)
|
|
|
|
monkeypatch.setattr(image_generation.settings, "AI_IMAGE_ENABLED", True)
|
|
monkeypatch.setattr(image_generation, "_openai_api_key", lambda: "test-key")
|
|
monkeypatch.setattr(image_generation, "STATIC_IMAGES_DIR", tmp_path)
|
|
monkeypatch.setattr(image_generation.httpx, "post", post)
|
|
monkeypatch.setenv("AI_IMAGE_MODEL", "gpt-image-1")
|
|
|
|
image_url = image_generation.generate_image_for_recipe(recipe, db=db)
|
|
|
|
assert image_url is not None
|
|
assert image_url.startswith("/static/images/")
|
|
assert (tmp_path / image_url.removeprefix("/static/images/")).read_bytes() == image_bytes
|
|
assert recipe.image_url == image_url
|
|
db.add.assert_called_once_with(recipe)
|
|
db.commit.assert_called_once_with()
|
|
assert recipe.image_source
|
|
assert "openai" in recipe.image_source.lower()
|
|
assert "gpt-image-1" in recipe.image_source.lower()
|