1
0

feat: 添加模板变量验证功能

- 在 ResourceValidator 中添加 validate_template_vars 方法
- 在验证阶段检查用户是否提供了模板所需的必需变量
- 缺少必需变量时返回 ERROR 级别错误
- 添加 9 个单元测试用例验证功能
- 同步更新 OpenSpec 规格文档
This commit is contained in:
2026-03-03 01:00:21 +08:00
parent e31a7e9bed
commit ef3fa6a06a
9 changed files with 468 additions and 89 deletions

View File

@@ -0,0 +1,59 @@
# Template Variable Validation
## Purpose
验证器在检查阶段验证模板必需变量是否提供。当 YAML 使用模板时,系统验证用户是否提供了模板所需的必需变量,避免在转换阶段才发现问题。
## Requirements
### Requirement: 验证器必须检查模板必需变量
当 YAML 使用模板时,系统 SHALL 验证用户是否提供了模板所需的必需变量。
#### Scenario: 提供所有必需变量
- **WHEN** 模板定义了 `vars: [{name: title, required: true}]`,且用户 YAML 提供了 `vars: {title: "Hello"}`
- **THEN** 验证通过,不报错
#### Scenario: 缺少必需变量
- **WHEN** 模板定义了 `vars: [{name: title, required: true}]`,但用户 YAML 的 `vars` 中没有提供 `title`
- **THEN** 验证器报告 ERROR 级别错误:"缺少模板必需变量: title"
#### Scenario: 多个必需变量部分缺失
- **WHEN** 模板定义了 `vars: [{name: title, required: true}, {name: subtitle, required: true}]`,但用户只提供了 `vars: {title: "Hello"}`
- **THEN** 验证器报告 ERROR 级别错误,包含所有缺少的必需变量
#### Scenario: 可选变量缺失
- **WHEN** 模板定义了 `vars: [{name: subtitle, required: false}]`,用户没有提供该变量
- **THEN** 验证通过,不报错
#### Scenario: 提供默认值时缺少可选变量
- **WHEN** 模板定义了 `vars: [{name: subtitle, required: false, default: ""}]`,用户没有提供该变量
- **THEN** 验证通过,不报错(使用默认值)
### Requirement: 验证器必须支持多幻灯片模板变量检查
系统 SHALL 检查每个使用模板的幻灯片,确保其提供了模板所需的必需变量。
#### Scenario: 不同幻灯片使用不同模板
- **WHEN** 幻灯片 1 使用模板 A需要变量 title幻灯片 2 使用模板 B需要变量 image
- **THEN** 验证器分别检查每个幻灯片的变量,提供独立的错误信息
#### Scenario: 多个幻灯片使用同一模板
- **WHEN** 幻灯片 1 和幻灯片 2 都使用同一模板,都缺少必需变量
- **THEN** 验证器报告两个错误,分别对应各自的幻灯片位置
### Requirement: 验证器必须提供清晰的错误位置信息
当缺少必需变量时,验证器 SHALL 在错误信息中包含幻灯片位置。
#### Scenario: 错误信息包含幻灯片位置
- **WHEN** 幻灯片 2 使用模板但缺少必需变量
- **THEN** 错误信息包含位置:"幻灯片 2: 缺少模板必需变量: title"