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

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