status: apply_completed created: 2026-07-03
code-copilot/rules/automated-testing-standard.md 执行增量验证。Tests run。pnpm build。ForeachActionStepExecutor| 场景 | 输入 | 预期 |
|---|---|---|
| 集合为空 | collectionPath=formData.items,items 为空 |
返回 SUCCESS,执行 0 行 |
| 集合不存在 | collectionPath=formData.items,items 缺失 |
返回 SUCCESS,执行 0 行 |
| 两行成功 | items 两行,子步骤 Mock 成功 | 返回两组行结果,子步骤执行 2 次 |
| 子步骤失败 | 第二行子步骤抛异常 | 父步骤失败并触发事务回滚 |
| 循环变量 | 子步骤映射 ${item.quantity}、${index} |
子步骤收到当前行数量和索引 |
| 深度限制 | FOREACH 中嵌套超过允许深度 |
抛业务异常 |
BusinessRecordSelectorService| 场景 | 输入 | 预期 |
|---|---|---|
| 单字段关键词 | keywordFields=["name"] |
兼容旧查询 |
| 多字段关键词 | keywordFields=["code","name"] |
按 OR 查询 |
| 非法字段 | keywordFields=["tenant_id"] |
字段被过滤或拒绝 |
| 动态过滤 | searchParams={"warehouseId":"${formData.warehouseId}"} |
解析为实际仓库 ID |
| 无权限 | 目标对象无 VIEW 权限 | 抛业务异常 |
本轮后端关键词归一逻辑使用无 Mockito 的
BusinessRecordSelectorSearchParamsTest覆盖;运行态动态过滤由record-selector-utils.js与前端构建覆盖。既有BusinessRecordSelectorServiceTest依赖 Mockito inline,本地 JDK agent attach 受限,未纳入本轮组合命令。
BusinessQuantityQueryService| 场景 | 输入 | 预期 |
|---|---|---|
| 余额查询 | accountCode + itemCode | 返回余额分页 |
| 流水查询 | sourceObjectCode + sourceRecordId | 返回来源流水 |
| 锁定查询 | lockStatus=LOCKED | 返回锁定记录 |
| 空条件 | 无查询条件 | 仍按租户分页,不跨租户 |
BusinessActionDesigner.vue:循环明细步骤模板可插入并格式化。AiRecordSelectorModal.vue:多字段搜索仍能显示列、分页、选择记录。AiFormItem.vue:动态过滤参数从表单数据解析后提交。ChildTableEditor.vue:子表选择器能读取父表单数据,批量追加不破坏 merge。后端编译:
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -am compile -DskipTests
后端定向单测:
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessActionForeachStepExecutorTest,BusinessRecordSelectorServiceTest,BusinessQuantityQueryServiceTest -Dsurefire.failIfNoSpecifiedTests=false test
本轮实际执行的无 Mockito 组合单测:
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessActionForeachStepExecutorTest,BusinessRecordSelectorSearchParamsTest,BusinessQuantityQueryServiceTest -Dsurefire.failIfNoSpecifiedTests=false test
详情数量区块发布运行态补充单测:
JAVA_HOME=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home PATH=/opt/homebrew/Cellar/openjdk@17/17.0.13/libexec/openjdk.jdk/Contents/Home/bin:$PATH mvn -pl forge-framework/forge-plugin-parent/forge-plugin-generator -Pdev,enable-tests -Dtest=BusinessActionForeachStepExecutorTest,BusinessRecordSelectorSearchParamsTest,BusinessQuantityQueryServiceTest,LowcodeRuntimeConfigBuilderTest -Dsurefire.failIfNoSpecifiedTests=false test
前端构建:
source ~/.nvm/nvm.sh && nvm use v20.19.0 && NODE_OPTIONS=--max-old-space-size=8192 pnpm --dir forge-admin-ui build
静态检查:
git diff --check
rg -n '\$\{[^}]+\}' forge-server/db/migration
BusinessActionForeachStepExecutorTest、BusinessRecordSelectorSearchParamsTest、BusinessQuantityQueryServiceTest 组合执行通过,Tests run: 12, Failures: 0, Errors: 0, Skipped: 0。pnpm --dir forge-admin-ui build 通过,存在既有 chunk/CSS 注释告警。git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。✓ built in 2m 17s。BUILD SUCCESS。Tests run: 12, Failures: 0, Errors: 0, Skipped: 0。git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。✓ built in 2m 54s。BUILD SUCCESS。Tests run: 12, Failures: 0, Errors: 0, Skipped: 0。git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。LowcodeRuntimeConfigBuilderTest 覆盖 detail.quantityPanels -> options.detailPanels,单测通过,Tests run: 1, Failures: 0, Errors: 0, Skipped: 0。LowcodeRuntimeConfigBuilderTest 后通过,Tests run: 13, Failures: 0, Errors: 0, Skipped: 0。BUILD SUCCESS。BusinessFieldSchemaServiceTest、BusinessRecordSelectorSearchParamsTest、BusinessObjectDesignerPageSchemaTest,通过,Tests run: 10, Failures: 0, Errors: 0, Skipped: 0。pnpm --dir forge-admin-ui build 通过,✓ built in 1m 28s。git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。input-number 控件校验、动作执行对象编码别名和 COMMAND 动作运行配置后,复跑 BusinessObjectDesignerPageSchemaTest、BusinessActionExecutionServiceTest、LowcodeRuntimeConfigBuilderTest、BusinessRecordSelectorSearchParamsTest,通过,Tests run: 14, Failures: 0, Errors: 0, Skipped: 0。forge-plugin-generator -am compile -DskipTests,通过,BUILD SUCCESS。V1.0.97__harden_procurement_warehouse_page_action_selector_protocol.sql 后复跑 git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。input-number/inputnumber 组件默认映射后,复跑同组定向单测,通过,Tests run: 15, Failures: 0, Errors: 0, Skipped: 0;复跑后端插件级 -am compile 通过,BUILD SUCCESS。✓ built in 1m 46s。BusinessObjectDesignerPageSchemaTest、BusinessActionExecutionServiceTest、LowcodeRuntimeConfigBuilderTest、BusinessRecordSelectorSearchParamsTest,通过,Tests run: 18, Failures: 0, Errors: 0, Skipped: 0。forge-admin-server -am compile -DskipTests,通过,BUILD SUCCESS,总耗时 13.779 s。V1.0.98__preserve_procurement_warehouse_designer_field_runtime_metadata.sql 后复跑 git diff --check 通过;rg -n '\$\{[^}]+\}' forge-server/db/migration 无输出。✓ built in 2m 26s。LowcodeRuntimeConfigBuilderTest 通过,Tests run: 4, Failures: 0, Errors: 0, Skipped: 0;前端构建通过,✓ built in 2m 35s;本轮相关文件 git diff --check 无输出。