主要变更: - 将 templates_dir 参数改为 template_file,支持单个模板库 YAML 文件 - 添加模板库 YAML 验证功能 - 为模板添加 base_dir 支持,正确解析相对路径资源 - 内联模板与外部模板同名时改为警告(内联优先) - 移除模板缓存机制,直接使用模板库字典 - 更新所有相关测试以适配新的模板加载方式 此重构简化了模板管理,使模板资源的路径解析更加清晰明确。
62 lines
1.8 KiB
Python
62 lines
1.8 KiB
Python
"""
|
|
Preview 命令端到端测试
|
|
|
|
测试 yaml2pptx.py preview 命令的 HTML 生成功能(不启动真实服务器)
|
|
"""
|
|
|
|
import pytest
|
|
from pathlib import Path
|
|
from unittest.mock import patch, MagicMock
|
|
from preview.server import generate_preview_html, create_flask_app
|
|
|
|
|
|
class TestGeneratePreviewHtml:
|
|
"""generate_preview_html 函数测试类"""
|
|
|
|
def test_generate_html_from_valid_yaml(self, sample_yaml):
|
|
"""测试从有效 YAML 生成 HTML"""
|
|
html = generate_preview_html(str(sample_yaml), None)
|
|
|
|
assert isinstance(html, str)
|
|
assert "<!DOCTYPE html>" in html
|
|
assert "<html>" in html
|
|
assert "</html>" in html
|
|
|
|
|
|
def test_html_contains_css_styles(self, sample_yaml):
|
|
"""测试 HTML 包含 CSS 样式"""
|
|
html = generate_preview_html(str(sample_yaml), None)
|
|
|
|
assert "<style>" in html
|
|
assert ".slide" in html
|
|
assert "position: absolute" in html
|
|
|
|
|
|
def test_html_with_invalid_yaml(self, temp_dir):
|
|
"""测试无效 YAML 返回错误页面"""
|
|
yaml_path = temp_dir / "invalid.yaml"
|
|
yaml_path.write_text("invalid: [unclosed")
|
|
|
|
html = generate_preview_html(str(yaml_path), None)
|
|
|
|
# 应该返回错误页面
|
|
assert "<!DOCTYPE html>" in html
|
|
assert "错误" in html or "error" in html.lower()
|
|
|
|
|
|
def test_html_contains_slide_number(self, sample_yaml):
|
|
"""测试 HTML 包含幻灯片编号"""
|
|
html = generate_preview_html(str(sample_yaml), None)
|
|
|
|
assert "slide-number" in html
|
|
|
|
def test_html_contains_sse_script(self, sample_yaml):
|
|
"""测试 HTML 包含 SSE 事件脚本"""
|
|
html = generate_preview_html(str(sample_yaml), None)
|
|
|
|
assert "EventSource" in html
|
|
assert "/events" in html
|
|
|
|
|
|
|