#!/usr/bin/env python """测试模板预览功能""" import sys from pathlib import Path # 添加后端路径 sys.path.insert(0, str(Path(__file__).parent.parent / "backend")) from app.services.renderer import renderer # 测试用例1:简单模板 test_template_1 = """ {% set greeting = ["嗨", "哈喽"] %} {{ greeting | random }},我是你的洗衣小助手! """ # 测试用例2:带程序名称的模板 test_template_2 = """ {% set program_id = program_id | string | trim %} {% set program_name = program_name_map.get(program_id, "智慧洗") %} 推荐使用{{ program_name }}程序,洗衣更省心! """ # 测试用例3:X11 真实 common 模板片段 test_template_3 = """ {% set greeting = ["嗨", "哈喽"] %} {% set assistant1 = ["小优来啦", "你的洗护小管家来啦"] %} {% set assistant2 = ["洗衣推荐来啦", "洗衣小贴士来啦"] %} {{ greeting | random }},{{ assistant1 | random }},{{ assistant2 | random }} """ # 测试用例4:带条件分支 test_template_4 = """ {% if rerank_reason == "PIN_CONSECUTIVE" %} 发现你连续使用了{{ program_name }}程序,这个程序很适合日常使用哦! {% elif rerank_reason == "POPULAR" %} 为你推荐人气程序{{ program_name }},很多用户都喜欢用! {% else %} 为您推荐{{ program_name }}程序! {% endif %} """ def test_preview(template_body, name, params=None): print(f"\n{'='*60}") print(f"测试: {name}") print(f"{'='*60}") try: params = params or {} result = renderer.preview(type('obj', (object,), { 'template_body': template_body, 'parameters': params })()) print(f"✅ 成功") print(f"\n生成结果:\n{result}") return True except Exception as e: print(f"❌ 失败: {e}") return False if __name__ == "__main__": print("开始测试模板预览功能...") all_passed = True # 测试1:简单模板 all_passed &= test_preview(test_template_1, "简单模板") # 测试2:带程序名称 all_passed &= test_preview(test_template_2, "带程序名称", { 'program_id': '15' }) # 测试3:X11 真实模板 all_passed &= test_preview(test_template_3, "X11 common模板") # 测试4:条件分支(无参数时应触发默认值) all_passed &= test_preview(test_template_4, "条件分支模板", { 'program_name': '速洗' }) # 测试5:缺失参数(应自动填充默认值) all_passed &= test_preview(test_template_4, "条件分支-缺失参数自动填充") print(f"\n{'='*60}") if all_passed: print("✅ 所有测试通过!") else: print("❌ 部分测试失败") print(f"{'='*60}")