feat(meals): enforce three lower-calorie dinners with media
CI / backend (pytest + alembic) (push) Canceled after 0s
CI / frontend (build) (push) Canceled after 0s

This commit is contained in:
2026-09-01 10:11:36 -07:00
parent 7838c49721
commit 2695ba0232
85 changed files with 8103 additions and 795 deletions
+42
View File
@@ -0,0 +1,42 @@
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()