Add complete test infrastructure for yaml2pptx project with 245+ tests covering unit, integration, and end-to-end scenarios. Test structure: - Unit tests: elements, template system, validators, loaders, utils - Integration tests: presentation and rendering flows - E2E tests: CLI commands (convert, check, preview) Key features: - PptxFileValidator for Level 2 PPTX validation (file structure, element count, content matching, position tolerance) - Comprehensive fixtures for test data consistency - Mock-based testing for external dependencies - Test images generated with PIL/Pillow - Boundary case coverage for edge scenarios Dependencies added: - pytest, pytest-cov, pytest-mock - pillow (for test image generation) Documentation updated: - README.md: test running instructions - README_DEV.md: test development guide Co-authored-by: OpenSpec change: add-comprehensive-tests
3.0 KiB
3.0 KiB
ADDED Requirements
Requirement: Convert 命令端到端测试
系统 SHALL 提供 convert 命令的端到端测试。
Scenario: 基本转换
- WHEN 执行
yaml2pptx.py convert input.yaml output.pptx - THEN 输出文件成功生成
- AND 文件可以打开并包含正确内容
Scenario: 自动输出文件名
- WHEN 执行
yaml2pptx.py convert input.yaml(不指定输出) - THEN 使用输入文件名生成 .pptx 文件
Scenario: 使用模板
- WHEN 执行转换时指定 --template-dir
- THEN 模板被正确加载和应用
Scenario: 跳过验证
- WHEN 执行转换时指定 --skip-validation
- THEN 验证步骤被跳过
Scenario: 强制覆盖
- WHEN 输出文件已存在并使用 --force
- THEN 现有文件被覆盖
Scenario: 文件已存在不强制
- WHEN 输出文件已存在且不使用 --force
- THEN 程序提示文件已存在并退出
Scenario: 无效输入文件
- WHEN 输入文件不存在
- THEN 程序显示错误信息并退出
Scenario: 包含所有元素类型的转换
- WHEN YAML 包含所有元素类型(文本、图片、形状、表格)
- THEN 生成的 PPTX 包含所有元素并正确渲染
Requirement: Check 命令端到端测试
系统 SHALL 提供 check 命令的端到端测试。
Scenario: 验证通过
- WHEN 执行
yaml2pptx.py check valid.yaml - THEN 显示验证通过消息
- AND 退出码为 0
Scenario: 验证失败
- WHEN 执行
yaml2pptx.py check invalid.yaml - THEN 显示错误信息
- AND 退出码非 0
Scenario: 验证包含警告
- WHEN YAML 文件有问题但不阻止转换
- THEN 显示警告信息
- AND 验证标记为通过
Scenario: 使用模板验证
- WHEN YAML 使用模板并指定 --template-dir
- THEN 模板文件也被验证
Scenario: 多错误报告
- WHEN YAML 文件包含多个错误
- THEN 所有错误被列出
- AND 每个错误包含位置信息
Requirement: Preview 命令端到端测试
系统 SHALL 提供 preview 命令的端到端测试(不启动真实服务器)。
Scenario: HTML 生成
- WHEN 调用 generate_preview_html() 并传入有效 YAML
- THEN 返回完整的 HTML 页面
- AND HTML 包含所有幻灯片的渲染
Scenario: HTML 包含幻灯片元素
- WHEN 生成的预览 HTML
- THEN 每张幻灯片包含正确的元素渲染
- AND CSS 样式正确应用
Scenario: 错误处理
- WHEN YAML 文件包含错误
- THEN generate_preview_html() 返回错误页面 HTML
- AND 错误信息正确显示
Scenario: SSE 事件流路由
- WHEN 访问 /events 路由
- THEN 返回 text/event-stream 内容类型
Scenario: 文件变化处理
- WHEN YAML 文件被修改
- THEN YAMLChangeHandler 检测到变化
- AND 将 'reload' 消息放入队列
Scenario: Flask 应用创建
- WHEN 调用 create_flask_app()
- THEN 返回配置好的 Flask 应用
- AND 包含 / 和 /events 路由