- tests/docgen/:DC-UNIT/API/CONF/E2E/UI/REGRESSION/PERF 分组用例与可复跑脚本,报告逐条留痕(R1-R3 全记录) - 意图 30 条前后端同表双跑(pytest + node) - Playwright headless:docgen-ui/docgen-regression spec + b3 benchpanel 第 5 TAB 断言更新 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
62 lines
1.6 KiB
Python
62 lines
1.6 KiB
Python
"""test_md2pdf.py —— md2pdf 冒烟(tmpdir,不连任何服务)。"""
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
|
|
|
|
import pymupdf # noqa: E402
|
|
|
|
from app.services.docgen.md2pdf import pdf_from_markdown # noqa: E402
|
|
|
|
|
|
MD_SAMPLE = """# 项目总结报告
|
|
|
|
这是第一段正文,介绍项目背景与目标。
|
|
|
|
## 一、工作进展
|
|
|
|
- 完成模块一开发
|
|
- 完成模块二联调
|
|
|
|
| 指标 | 数值 |
|
|
|------|------|
|
|
| 完成率 | 95% |
|
|
"""
|
|
|
|
|
|
def test_pdf_smoke(tmp_path):
|
|
out = pdf_from_markdown(MD_SAMPLE, tmp_path / "out.pdf")
|
|
assert out.exists()
|
|
assert out.stat().st_size > 500 # 非空 PDF
|
|
doc = pymupdf.open(str(out))
|
|
try:
|
|
assert doc.page_count >= 1
|
|
text = "".join(p.get_text() for p in doc)
|
|
# 中文必须可提取(真实 CJK 字体渲染;wps-office 缺失时 Noto 兜底)
|
|
assert "项目总结报告" in text
|
|
assert "工作进展" in text
|
|
finally:
|
|
doc.close()
|
|
|
|
|
|
def test_pdf_empty_markdown(tmp_path):
|
|
out = pdf_from_markdown("", tmp_path / "empty.pdf")
|
|
assert out.exists()
|
|
doc = pymupdf.open(str(out))
|
|
try:
|
|
assert doc.page_count >= 1
|
|
finally:
|
|
doc.close()
|
|
|
|
|
|
def test_pdf_long_markdown_multi_page(tmp_path):
|
|
body = "\n\n".join(f"第 {i} 段内容,用于填充多页文档。" for i in range(200))
|
|
out = pdf_from_markdown("# 长文档\n\n" + body, tmp_path / "long.pdf")
|
|
doc = pymupdf.open(str(out))
|
|
try:
|
|
assert doc.page_count >= 2
|
|
finally:
|
|
doc.close()
|