1
0
Files
PPTX/openspec/changes/archive/2026-03-02-add-comprehensive-tests/specs/e2e-tests/spec.md
lanyuanxiaoyao ab2510a400 test: add comprehensive pytest test suite
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
2026-03-02 23:11:34 +08:00

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 路由