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
97 lines
3.0 KiB
Markdown
97 lines
3.0 KiB
Markdown
## 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 路由
|