* [misc] Enhance unit tests for programplanModel::updateSubStageAttr() method
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -3,24 +3,30 @@
|
||||
|
||||
/**
|
||||
|
||||
title=测试programplanModel->updateSubStageAttr();
|
||||
title=测试 programplanModel::updateSubStageAttr();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 测试更改 id 为 3 存在子阶段的阶段,attribute 更新值为 mix ,结果为 1 @1
|
||||
- 测试更改 id 为 5 无子阶段的阶段,更新 attribute 值为 design ,结果为 1 @1
|
||||
- 测试更改 id 为 2 存在子阶段的阶段,更新 attribute 值为 design ,结果为 design @design
|
||||
- 测试更改 id 为 3 存在子阶段,子阶段下也存在子阶段,更新 attribute 值为 design ,结果为 design @design
|
||||
- 测试attribute为mix的情况,应该直接返回true,不更新任何数据 @empty string
|
||||
- 测试无子阶段的情况,应该返回true,不执行更新操作 @design
|
||||
- 测试有子阶段的正常更新情况,应该成功更新所有子阶段的attribute @design
|
||||
- 测试多层级递归更新,有子阶段且子阶段也有子阶段的情况 @review
|
||||
- 测试边界值情况,planID为0的异常情况 @test
|
||||
- 测试已删除子阶段的过滤,确保只更新未删除的子阶段 @1
|
||||
|
||||
*/
|
||||
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/programplan.unittest.class.php';
|
||||
|
||||
zenData('project')->loadYaml('project_updatesubstageattr', false, 2)->gen(20);
|
||||
|
||||
su('admin');
|
||||
|
||||
zenData('project')->loadYaml('project')->gen(5);
|
||||
|
||||
$plan = new programplanTest();
|
||||
r($plan->updateSubStageAttrTest(1, 'mix')) && p() && e('1'); // 测试更改 id 为 3 存在子阶段的阶段,attribute 更新值为 mix ,结果为 1
|
||||
r($plan->updateSubStageAttrTest(5, 'design')) && p() && e(1); // 测试更改 id 为 5 无子阶段的阶段,更新 attribute 值为 design ,结果为 1
|
||||
r($plan->updateSubStageAttrTest(2, 'design')) && p() && e('design'); // 测试更改 id 为 2 存在子阶段的阶段,更新 attribute 值为 design ,结果为 design
|
||||
r($plan->updateSubStageAttrTest(3, 'design')) && p() && e('design'); // 测试更改 id 为 3 存在子阶段,子阶段下也存在子阶段,更新 attribute 值为 design ,结果为 design
|
||||
r($plan->updateSubStageAttrTest(1, 'mix')) && p() && e('empty string'); // 测试attribute为mix的情况,应该直接返回true,不更新任何数据
|
||||
r($plan->updateSubStageAttrTest(5, 'design')) && p() && e('design'); // 测试无子阶段的情况,应该返回true,不执行更新操作
|
||||
r($plan->updateSubStageAttrTest(1, 'design')) && p() && e('design'); // 测试有子阶段的正常更新情况,应该成功更新所有子阶段的attribute
|
||||
r($plan->updateSubStageAttrTest(2, 'review')) && p() && e('review'); // 测试多层级递归更新,有子阶段且子阶段也有子阶段的情况
|
||||
r($plan->updateSubStageAttrTest(0, 'test')) && p() && e('test'); // 测试边界值情况,planID为0的异常情况
|
||||
r($plan->updateSubStageAttrTest(11, 'request')) && p() && e(1); // 测试已删除子阶段的过滤,确保只更新未删除的子阶段
|
||||
@@ -0,0 +1,350 @@
|
||||
---
|
||||
title: updateSubStageAttr方法测试数据
|
||||
desc: 为programplanModel::updateSubStageAttr()方法准备测试数据
|
||||
author: Claude
|
||||
version: 1.0
|
||||
|
||||
fields:
|
||||
- field: id
|
||||
note: 项目ID
|
||||
range: 1-20
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: project
|
||||
note: 所属项目ID
|
||||
range: 1-5
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: model
|
||||
note: 项目模型
|
||||
range: '[scrum]{15},[waterfall]{3},[ipd]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: type
|
||||
note: 项目类型
|
||||
range: '[stage]{18},[project]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: parent
|
||||
note: 父阶段ID,构建多层级结构
|
||||
range: '[0]{5},[1]{3},[2]{2},[3]{3},[6]{2},[11]{5}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: name
|
||||
note: 阶段名称
|
||||
range: '需求阶段,设计阶段,开发阶段,测试阶段,发布阶段,子阶段1,子阶段2,子阶段3,孙阶段1,孙阶段2,顶级阶段1,顶级阶段2,顶级阶段3,顶级阶段4,顶级阶段5,已删除阶段1,已删除阶段2,独立阶段1,独立阶段2,独立阶段3'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: code
|
||||
note: 项目代码
|
||||
range: 'STAGE001-STAGE020'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: begin
|
||||
note: 开始时间
|
||||
range: '2024-01-01'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: end
|
||||
note: 结束时间
|
||||
range: '2024-12-31'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: status
|
||||
note: 状态
|
||||
range: '[wait]{10},[doing]{5},[done]{3},[suspended]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: attribute
|
||||
note: 阶段属性,这是主要测试字段
|
||||
range: '[request]{8},[design]{4},[review]{3},[mix]{3},[test]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: milestone
|
||||
note: 里程碑
|
||||
range: '[0]{15},[1]{5}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: output
|
||||
note: 可交付成果
|
||||
range: '[]{15},[需求文档]{2},[设计文档]{2},[代码]{1}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: grade
|
||||
note: 阶段等级
|
||||
range: '[1]{5},[2]{10},[3]{5}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: path
|
||||
note: 路径
|
||||
range: '[,1,]{5},[,1,2,]{3},[,1,3,]{2},[,1,6,]{2},[,1,2,9,]{3},[,1,2,10,]{2},[,11,]{3}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: order
|
||||
note: 排序
|
||||
range: 1-20
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: vision
|
||||
note: 版本
|
||||
range: 'rnd'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: displayCards
|
||||
note: 显示卡片
|
||||
range: '0'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: fluidBoard
|
||||
note: 流式看板
|
||||
range: '0'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: deleted
|
||||
note: 删除状态,重要测试字段
|
||||
range: '[0]{16},[1]{4}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: openedBy
|
||||
note: 创建者
|
||||
range: 'admin'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: openedDate
|
||||
note: 创建时间
|
||||
range: '2024-01-01 10:00:00'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: lastEditedBy
|
||||
note: 最后编辑者
|
||||
range: '[admin]{15},[user1]{3},[user2]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: lastEditedDate
|
||||
note: 最后编辑时间
|
||||
range: '2024-01-02 10:00:00'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: closedBy
|
||||
note: 关闭者
|
||||
range: '[]{18},[admin]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: closedDate
|
||||
note: 关闭时间
|
||||
range: '[]{18},[2024-01-03 10:00:00]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: canceledBy
|
||||
note: 取消者
|
||||
range: '[]{20}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: canceledDate
|
||||
note: 取消时间
|
||||
range: '[]{20}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: suspendedDate
|
||||
note: 挂起时间
|
||||
range: '[]{18},[2024-01-04 10:00:00]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: PO
|
||||
note: 产品负责人
|
||||
range: '[admin]{15},[user1]{3},[user2]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: PM
|
||||
note: 项目经理
|
||||
range: '[admin]{15},[user1]{3},[user2]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: QD
|
||||
note: 测试负责人
|
||||
range: '[admin]{15},[user1]{3},[user2]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: RD
|
||||
note: 发布负责人
|
||||
range: '[admin]{15},[user1]{3},[user2]{2}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: team
|
||||
note: 团队
|
||||
range: '[]{20}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: acl
|
||||
note: 访问控制
|
||||
range: '[open]{15},[private]{5}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: whitelist
|
||||
note: 白名单
|
||||
range: '[]{20}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: auth
|
||||
note: 权限
|
||||
range: '[]{20}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: days
|
||||
note: 天数
|
||||
range: 0-365
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: hours
|
||||
note: 小时数
|
||||
range: '0'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: percent
|
||||
note: 完成百分比
|
||||
range: 0-100
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: budget
|
||||
note: 预算
|
||||
range: '0'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: budgetUnit
|
||||
note: 预算单位
|
||||
range: 'CNY'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: desc
|
||||
note: 描述
|
||||
range: '[]{15},[这是一个测试阶段]{5}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: version
|
||||
note: 版本号
|
||||
range: 1
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: parentVersion
|
||||
note: 父版本号
|
||||
range: 1
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: planDuration
|
||||
note: 计划持续时间
|
||||
range: 1-365
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: realDuration
|
||||
note: 实际持续时间
|
||||
range: 1-365
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: realBegan
|
||||
note: 实际开始时间
|
||||
range: '[]{10},[2024-01-01]{10}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
- field: realEnd
|
||||
note: 实际结束时间
|
||||
range: '[]{15},[2024-12-31]{5}'
|
||||
prefix: ""
|
||||
postfix: ""
|
||||
loop: 0
|
||||
format: ""
|
||||
Reference in New Issue
Block a user