2026-06-23 15:59:37 +08:00
|
|
|
"""Tests for AI title batch generation core (docs/11 §17.1 / §17.7)."""
|
2026-06-23 11:04:38 +08:00
|
|
|
import sys
|
|
|
|
|
import unittest
|
|
|
|
|
from pathlib import Path
|
|
|
|
|
|
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class TestAiTitleCore(unittest.TestCase):
|
2026-06-23 15:59:37 +08:00
|
|
|
def test_generate_titles_one_request_returns_list(self):
|
|
|
|
|
from core.ai_title import generate_titles
|
2026-06-23 11:04:38 +08:00
|
|
|
|
2026-06-23 15:59:37 +08:00
|
|
|
client = _RecordingTextClient(["纯棉短袖T恤", "印花连衣裙", "碎花雪纺衫"])
|
|
|
|
|
titles = generate_titles("生成 3 条标题", model_config={}, api_client=client)
|
2026-06-23 11:04:38 +08:00
|
|
|
|
2026-06-23 15:59:37 +08:00
|
|
|
self.assertEqual(titles, ["纯棉短袖T恤", "印花连衣裙", "碎花雪纺衫"])
|
|
|
|
|
self.assertEqual(client.calls, 1) # 只请求一次
|
|
|
|
|
self.assertEqual(client.image_paths, [None]) # 纯文本,不传图
|
2026-06-23 11:04:38 +08:00
|
|
|
|
2026-06-23 15:59:37 +08:00
|
|
|
def test_generate_titles_propagates_client_error(self):
|
|
|
|
|
from core.ai_title import generate_titles
|
2026-06-23 11:04:38 +08:00
|
|
|
|
2026-06-23 15:59:37 +08:00
|
|
|
with self.assertRaises(RuntimeError):
|
|
|
|
|
generate_titles("x", model_config={}, api_client=_FailingTextClient())
|
2026-06-23 11:04:38 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class _RecordingTextClient:
|
2026-06-23 15:59:37 +08:00
|
|
|
def __init__(self, titles):
|
|
|
|
|
self._titles = titles
|
|
|
|
|
self.calls = 0
|
2026-06-23 11:04:38 +08:00
|
|
|
self.image_paths = []
|
|
|
|
|
|
2026-06-23 15:59:37 +08:00
|
|
|
def generate_texts(self, prompt, image_path=None, resolution="1K"):
|
|
|
|
|
self.calls += 1
|
|
|
|
|
self.image_paths.append(image_path)
|
|
|
|
|
return list(self._titles)
|
2026-06-23 11:04:38 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
class _FailingTextClient:
|
2026-06-23 15:59:37 +08:00
|
|
|
def generate_texts(self, prompt, image_path=None, resolution="1K"):
|
2026-06-23 11:04:38 +08:00
|
|
|
raise RuntimeError("boom")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
unittest.main()
|