"""Tests for AI title batch generation core (docs/11 §17.1 / §17.7).""" import sys import unittest from pathlib import Path sys.path.insert(0, str(Path(__file__).parent.parent / "src")) class TestAiTitleCore(unittest.TestCase): def test_generate_titles_one_request_returns_list(self): from core.ai_title import generate_titles client = _RecordingTextClient(["纯棉短袖T恤", "印花连衣裙", "碎花雪纺衫"]) titles = generate_titles("生成 3 条标题", model_config={}, api_client=client) self.assertEqual(titles, ["纯棉短袖T恤", "印花连衣裙", "碎花雪纺衫"]) self.assertEqual(client.calls, 1) # 只请求一次 self.assertEqual(client.image_paths, [None]) # 纯文本,不传图 def test_generate_titles_uses_4k_read_timeout(self): # §19.30/§17.8:标题生成借 4K 档(600s 读取超时),不用默认 1K 的 240s from core.ai_title import _TITLE_TIMEOUT_RESOLUTION, generate_titles self.assertEqual(_TITLE_TIMEOUT_RESOLUTION, "4K") client = _RecordingTextClient(["a", "b"]) generate_titles("生成 2 条标题", model_config={}, api_client=client) self.assertEqual(client.resolutions, ["4K"]) def test_generate_titles_propagates_client_error(self): from core.ai_title import generate_titles with self.assertRaises(RuntimeError): generate_titles("x", model_config={}, api_client=_FailingTextClient()) class _RecordingTextClient: def __init__(self, titles): self._titles = titles self.calls = 0 self.image_paths = [] self.resolutions = [] def generate_texts(self, prompt, image_path=None, resolution="1K"): self.calls += 1 self.image_paths.append(image_path) self.resolutions.append(resolution) return list(self._titles) class _FailingTextClient: def generate_texts(self, prompt, image_path=None, resolution="1K"): raise RuntimeError("boom") if __name__ == "__main__": unittest.main()