fix(product-suite): allow braces in business prompts
This commit is contained in:
@@ -294,6 +294,21 @@ class ProductSuiteTests(unittest.TestCase):
|
||||
self.assertIn("商品ID:未绑定商品", rendered)
|
||||
self.assertIn("参考图序号:2", rendered)
|
||||
|
||||
def test_business_prompt_braces_are_not_reparsed_as_template_variables(self):
|
||||
template = prompts.load_default_product_suite_prompt()
|
||||
business_prompt = "适合 {儿童} 使用,支持 {日常通勤} 场景"
|
||||
|
||||
rendered = product_suite.build_suite_prompt(
|
||||
business_prompt,
|
||||
product_suite.default_suite_settings(),
|
||||
"白底图",
|
||||
"51100639510",
|
||||
template_text=template,
|
||||
)
|
||||
|
||||
self.assertIn(business_prompt, rendered)
|
||||
self.assertEqual([], product_suite.product_suite_prompt_errors(template))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
|
||||
@@ -3501,6 +3501,70 @@ class ProductSuiteGuiTests(TempDirMixin, unittest.TestCase):
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_generation_accepts_business_prompt_with_braces(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
config = self._config(temp_dir)
|
||||
project, _assets = self._create_project_with_assets(temp_dir, config, 1)
|
||||
tab = ProductSuiteTab(config=config, db_path=config["db_path"])
|
||||
self.addCleanup(tab.close)
|
||||
state = tab._displayed_state
|
||||
state.account_alias = "alias-a"
|
||||
state.item_id = project.item_id
|
||||
state.project_id = project.id
|
||||
state.project_binding_state = project.binding_state
|
||||
state.prompt = "适合 {儿童} 使用"
|
||||
tab._load_state(state)
|
||||
captured = []
|
||||
tab._start_generation_price_confirmation = (
|
||||
lambda _state, _assets, specs, *_args: captured.extend(specs) or True
|
||||
)
|
||||
|
||||
self.assertTrue(tab.start_generation(state))
|
||||
|
||||
self.assertTrue(captured)
|
||||
self.assertIn("适合 {儿童} 使用", captured[0]["prompt"])
|
||||
self.assertEqual([], image_studio.list_jobs(project.id, path=config["db_path"]))
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_generation_renders_error_as_chinese_feedback_without_side_effects(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
config = self._config(temp_dir)
|
||||
project, _assets = self._create_project_with_assets(temp_dir, config, 1)
|
||||
tab = ProductSuiteTab(config=config, db_path=config["db_path"])
|
||||
self.addCleanup(tab.close)
|
||||
state = tab._displayed_state
|
||||
state.account_alias = "alias-a"
|
||||
state.item_id = project.item_id
|
||||
state.project_id = project.id
|
||||
state.project_binding_state = project.binding_state
|
||||
state.prompt = "正常商品卖点"
|
||||
tab._load_state(state)
|
||||
messages = []
|
||||
statuses = []
|
||||
tab._message = lambda title, message, **_kwargs: messages.append((title, message))
|
||||
tab._status = lambda message, level=None: statuses.append((message, level))
|
||||
|
||||
with mock.patch(
|
||||
"app.gui.tabs.product_suite.product_suite.build_job_specs",
|
||||
side_effect=product_suite.ProductSuitePromptError("内部渲染失败"),
|
||||
), mock.patch.object(tab, "_start_generation_price_confirmation") as confirmation:
|
||||
self.assertFalse(tab.start_generation(state))
|
||||
|
||||
self.assertEqual(
|
||||
[("无法生成商品套图", "提示词渲染失败,请检查提示词设置中的变量格式。")],
|
||||
messages,
|
||||
)
|
||||
self.assertEqual(
|
||||
[("提示词渲染失败,请检查提示词设置中的变量格式。", "danger")],
|
||||
statuses,
|
||||
)
|
||||
confirmation.assert_not_called()
|
||||
self.assertIsNone(state.worker)
|
||||
self.assertEqual([], image_studio.list_jobs(project.id, path=config["db_path"]))
|
||||
|
||||
self.assert_removed(temp_dir)
|
||||
|
||||
def test_generation_confirmation_uses_planned_specs_for_cached_image_price(self):
|
||||
with self.make_temp_dir() as temp_dir:
|
||||
config = self._config(temp_dir)
|
||||
|
||||
Reference in New Issue
Block a user