99 lines
3.5 KiB
Python
99 lines
3.5 KiB
Python
"""冒烟测试:build_plan 结构 + aura 引擎直接渲染。
|
|
|
|
用法:
|
|
python tests/smoke_build_plan.py # 仅构建 plan 并打印结构
|
|
python tests/smoke_build_plan.py --render # 追加真实渲染 + 保真验证
|
|
"""
|
|
|
|
import json
|
|
import sys
|
|
import tempfile
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
|
|
|
|
from src.agent.perception import GenerateConfig # noqa: E402
|
|
from src.agent.planning import build_plan # noqa: E402
|
|
|
|
SAMPLE_ZH = """# 本月完成情况
|
|
完成模块A开发,进度符合计划
|
|
修复线上3个缺陷,系统可用性提升至99.9%
|
|
新增用户反馈收集通道
|
|
# 下月计划
|
|
启动模块B概要设计
|
|
组织跨部门代码评审
|
|
开展性能压测与容量评估
|
|
补充核心链路自动化测试用例
|
|
# 风险与求助
|
|
人力存在缺口,希望增援1名后端
|
|
第三方接口联调依赖对方排期
|
|
"""
|
|
|
|
SAMPLE_JA = """# 今月の進捗
|
|
モジュールAの開発完了、予定どおり
|
|
本番障害3件を修正し、可用性99.9%を達成
|
|
# 来月の計画
|
|
モジュールBの概要設計を開始
|
|
性能テストを実施する
|
|
"""
|
|
|
|
|
|
def make_cfg(lang="zh"):
|
|
return GenerateConfig(
|
|
title="七月项目周报" if lang == "zh" else "7月度プロジェクト報告",
|
|
user_id=1, content=SAMPLE_ZH if lang == "zh" else SAMPLE_JA,
|
|
scene="report", language=lang, canvas="ppt169",
|
|
image_strategy="off",
|
|
color_scheme="blue", page_min=6, page_max=10,
|
|
)
|
|
|
|
|
|
def show(plan):
|
|
print(f"design={plan['design']} slides={len(plan['slides'])}")
|
|
for i, s in enumerate(plan["slides"], 1):
|
|
n = len(s.get("content") or [])
|
|
print(f" {i:02d}. [{s['type']:9s}] {s.get('title','')[:30]} bullets={n}")
|
|
|
|
|
|
def main():
|
|
failures = []
|
|
for lang in ("zh", "ja"):
|
|
r = build_plan(make_cfg(lang))
|
|
plan = r.plan
|
|
print(f"\n===== {lang} ===== warnings={r.warnings}")
|
|
show(plan)
|
|
types = [s["type"] for s in plan["slides"]]
|
|
if types[0] != "cover" or types[-1] != "end":
|
|
failures.append(f"{lang}: 首尾页面类型错误")
|
|
if not (6 <= len(plan["slides"]) <= 10) and lang == "zh":
|
|
failures.append(f"{lang}: 页数 {len(plan['slides'])} 超出目标区间")
|
|
if lang == "ja" and plan["design"] != "report-jp":
|
|
failures.append("ja 未映射到 report-jp")
|
|
if lang == "zh" and plan["design"] != "corp-blue":
|
|
failures.append("zh/blue 未映射到 corp-blue")
|
|
|
|
if "--render" in sys.argv:
|
|
from config import COMPANY_TEMPLATE
|
|
from src.engine_bridge import render_plan, verify_output
|
|
tmp = Path(tempfile.mkdtemp(prefix="aura_smoke_"))
|
|
for lang in ("zh", "ja"):
|
|
r = build_plan(make_cfg(lang))
|
|
p = tmp / f"plan_{lang}.json"
|
|
p.write_text(json.dumps(r.plan, ensure_ascii=False, indent=2),
|
|
encoding="utf-8")
|
|
out = tmp / f"smoke_{lang}.pptx"
|
|
tpl = COMPANY_TEMPLATE if (lang == "ja" and COMPANY_TEMPLATE.exists()) else None
|
|
render_plan(p, out, template=tpl)
|
|
ok, detail = verify_output(out, p)
|
|
print(f"\n[render {lang}] -> {out}")
|
|
print(f"[verify {lang}] passed={ok}\n{detail}")
|
|
if not ok:
|
|
failures.append(f"{lang}: 渲染保真验证未通过")
|
|
|
|
print("\n" + ("ALL SMOKE PASSED" if not failures else "FAILURES: " + "; ".join(failures)))
|
|
sys.exit(1 if failures else 0)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|