fix/various fixes

This commit is contained in:
Kevin
2026-03-20 15:15:35 +08:00
parent 7f57f96c25
commit 7317bf10cd
112 changed files with 3790 additions and 2242 deletions

View File

@@ -4,7 +4,7 @@ from types import SimpleNamespace
from unittest.mock import Mock, patch
from app.ports.image_gen import ImageResult, TaskStatus
from app.tasks.memoir_tasks import generate_chapter_images
from app.tasks.memoir_tasks import build_cos_key, generate_chapter_images
_ONE_BY_ONE_PNG = base64.b64decode(
@@ -12,9 +12,10 @@ _ONE_BY_ONE_PNG = base64.b64decode(
)
def _image_record(img_dict):
def _cover_image_record(img_dict):
d = dict(img_dict or {})
return SimpleNamespace(
id="cover-img-1",
order_index=d.get("index", 0),
placeholder=d.get("placeholder"),
description=d.get("description"),
@@ -33,7 +34,7 @@ def _image_record(img_dict):
def _chapter_stub():
rec = _image_record(
rec = _cover_image_record(
{
"index": 0,
"placeholder": "{{{{IMAGE:南方小镇的青石板路}}}}",
@@ -42,19 +43,14 @@ def _chapter_stub():
"url": None,
}
)
section = SimpleNamespace(
content="那条路我一直记得。",
image_id="image-1",
image_record=rec,
order_index=0,
)
return SimpleNamespace(
id="chapter-1",
user_id="user-1",
title="童年的夏天",
category="childhood",
sections=[section],
images=[],
canonical_markdown="# 标题\n\n那条路我一直记得。",
sections=[],
images=[rec],
cover_image=None,
)
@@ -76,6 +72,7 @@ class GenerateChapterImagesPersistenceTest(unittest.TestCase):
get_sync_db_mock,
):
chapter = _chapter_stub()
cover = chapter.images[0]
db = Mock()
db.execute.return_value.unique.return_value.scalar_one_or_none.return_value = (
chapter
@@ -83,11 +80,13 @@ class GenerateChapterImagesPersistenceTest(unittest.TestCase):
get_sync_db_mock.return_value.__enter__.return_value = db
get_sync_db_mock.return_value.__exit__.return_value = False
prompt_service_cls.return_value.build_prompt.return_value = {
prompt_data = {
"prompt": "A serene southern China town",
"style": "watercolor",
"size": "1024x1024",
"prompt_context": "childhood: 童年的夏天",
}
prompt_service_cls.return_value.build_cover_prompt.return_value = prompt_data
mock_gen = Mock()
mock_gen.generate.return_value = ImageResult(
status=TaskStatus.COMPLETED,
@@ -97,14 +96,18 @@ class GenerateChapterImagesPersistenceTest(unittest.TestCase):
mock_gen.download_image.return_value = _ONE_BY_ONE_PNG
get_image_generator_mock.return_value = mock_gen
storage_cls.from_env.return_value.upload_bytes.return_value = (
"https://cos.example.com/memoirs/user-1/chapter-1/0.png"
"https://cos.example.com/memoirs/user-1/chapter-1/cover.png"
)
generate_chapter_images.run("chapter-1")
record = chapter.sections[0].image_record
self.assertEqual(record.status, "completed")
self.assertEqual(cover.status, "completed")
self.assertEqual(
record.url, "https://cos.example.com/memoirs/user-1/chapter-1/0.png"
cover.url,
"https://cos.example.com/memoirs/user-1/chapter-1/cover.png",
)
self.assertEqual(cover.prompt, "A serene southern China town")
self.assertEqual(
cover.storage_key,
build_cos_key("user-1", "chapter-1", "cover", prompt_data["prompt"]),
)
self.assertEqual(record.prompt, "A serene southern China town")