55 lines
2.1 KiB
Python
55 lines
2.1 KiB
Python
import unittest
|
||
|
||
from api.services.memoir_images.parser import (
|
||
build_initial_image_assets,
|
||
parse_image_placeholders,
|
||
)
|
||
|
||
|
||
class MemoirImageParserTest(unittest.TestCase):
|
||
def test_parse_image_placeholders_preserves_order_and_offsets(self):
|
||
content = (
|
||
"那条路我一直记得。\n\n"
|
||
"{{{{IMAGE:南方小镇的青石板路}}}}\n\n"
|
||
"奶奶总坐在门口。\n\n"
|
||
"{{{{IMAGE:奶奶坐在院子里的藤椅上}}}}"
|
||
)
|
||
|
||
items = parse_image_placeholders(content, max_images=3)
|
||
|
||
self.assertEqual([item["index"] for item in items], [0, 1])
|
||
self.assertEqual(items[0]["description"], "南方小镇的青石板路")
|
||
self.assertEqual(items[1]["placeholder"], "{{{{IMAGE:奶奶坐在院子里的藤椅上}}}}")
|
||
self.assertLess(items[0]["start_offset"], items[1]["start_offset"])
|
||
|
||
def test_build_initial_image_assets_marks_every_item_pending(self):
|
||
placeholders = [
|
||
{
|
||
"index": 0,
|
||
"description": "南方小镇的青石板路",
|
||
"placeholder": "{{{{IMAGE:南方小镇的青石板路}}}}",
|
||
"start_offset": 10,
|
||
}
|
||
]
|
||
|
||
assets = build_initial_image_assets(
|
||
placeholders=placeholders,
|
||
provider="liblib",
|
||
style="watercolor",
|
||
size="1024x1024",
|
||
now_iso="2026-03-10T10:00:00Z",
|
||
)
|
||
|
||
self.assertEqual(assets[0]["status"], "pending")
|
||
self.assertEqual(assets[0]["provider"], "liblib")
|
||
self.assertEqual(assets[0]["url"], None)
|
||
|
||
def test_parse_image_placeholders_accepts_double_brace_variant(self):
|
||
content = "开头。\n\n{{IMAGE:1938年初的上海弄堂口,冬日萧瑟}}\n\n结尾。"
|
||
|
||
items = parse_image_placeholders(content, max_images=2)
|
||
|
||
self.assertEqual(len(items), 1)
|
||
self.assertEqual(items[0]["placeholder"], "{{IMAGE:1938年初的上海弄堂口,冬日萧瑟}}")
|
||
self.assertEqual(items[0]["description"], "1938年初的上海弄堂口,冬日萧瑟")
|