From 9fa25c68388e4b4a4a22dd8a499571bd6645a49a Mon Sep 17 00:00:00 2001 From: liugang Date: Tue, 11 Nov 2025 06:55:14 +0800 Subject: [PATCH] + [misc] Add unit tests for programZen::getProgramList4Kanban() method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../test/lib/programzen.unittest.class.php | 17 ++ .../test/zen/getprogramlist4kanban.php | 40 ++++ .../yaml/getprogramlist4kanban/product.yaml | 79 +++++++ .../getprogramlist4kanban/productplan.yaml | 59 +++++ .../yaml/getprogramlist4kanban/project.yaml | 213 ++++++++++++++++++ .../getprogramlist4kanban/projectproduct.yaml | 20 ++ .../yaml/getprogramlist4kanban/release.yaml | 60 +++++ .../getprogramlist4kanban/stakeholder.yaml | 43 ++++ 8 files changed, 531 insertions(+) create mode 100755 module/program/test/zen/getprogramlist4kanban.php create mode 100644 module/program/test/zen/yaml/getprogramlist4kanban/product.yaml create mode 100644 module/program/test/zen/yaml/getprogramlist4kanban/productplan.yaml create mode 100644 module/program/test/zen/yaml/getprogramlist4kanban/project.yaml create mode 100644 module/program/test/zen/yaml/getprogramlist4kanban/projectproduct.yaml create mode 100644 module/program/test/zen/yaml/getprogramlist4kanban/release.yaml create mode 100644 module/program/test/zen/yaml/getprogramlist4kanban/stakeholder.yaml diff --git a/module/program/test/lib/programzen.unittest.class.php b/module/program/test/lib/programzen.unittest.class.php index 4629243728..4430843136 100644 --- a/module/program/test/lib/programzen.unittest.class.php +++ b/module/program/test/lib/programzen.unittest.class.php @@ -135,4 +135,21 @@ class programTest return $result; } + + /** + * Test getProgramList4Kanban method. + * + * @param string $browseType + * @access public + * @return array + */ + public function getProgramList4KanbanTest(string $browseType = 'my') + { + $method = $this->objectZen->getMethod('getProgramList4Kanban'); + $method->setAccessible(true); + $result = $method->invokeArgs($this->objectZen->newInstance(), array($browseType)); + if(dao::isError()) return dao::getError(); + + return $result; + } } \ No newline at end of file diff --git a/module/program/test/zen/getprogramlist4kanban.php b/module/program/test/zen/getprogramlist4kanban.php new file mode 100755 index 0000000000..529ede615f --- /dev/null +++ b/module/program/test/zen/getprogramlist4kanban.php @@ -0,0 +1,40 @@ +#!/usr/bin/env php +loadYaml('getprogramlist4kanban/project', false, 2)->gen(50); +zenData('product')->loadYaml('getprogramlist4kanban/product', false, 2)->gen(30); +zenData('productplan')->loadYaml('getprogramlist4kanban/productplan', false, 2)->gen(40); +zenData('release')->loadYaml('getprogramlist4kanban/release', false, 2)->gen(30); +zenData('projectproduct')->loadYaml('getprogramlist4kanban/projectproduct', false, 2)->gen(25); +zenData('stakeholder')->loadYaml('getprogramlist4kanban/stakeholder', false, 2)->gen(50); + +su('admin'); + +$programTest = new programTest(); + +r(is_array($programTest->getProgramList4KanbanTest())) && p() && e('1'); // 测试步骤1:使用默认参数my获取看板数据 +r(is_array($programTest->getProgramList4KanbanTest('my'))) && p() && e('1'); // 测试步骤2:使用参数my获取看板数据 +r(is_array($programTest->getProgramList4KanbanTest('other'))) && p() && e('1'); // 测试步骤3:使用参数other获取看板数据 +r(is_array($programTest->getProgramList4KanbanTest('all'))) && p() && e('1'); // 测试步骤4:使用参数all获取看板数据 +r(is_array($programTest->getProgramList4KanbanTest(''))) && p() && e('1'); // 测试步骤5:使用空字符串参数获取看板数据 +r(count($programTest->getProgramList4KanbanTest('my')) >= 0) && p() && e('1'); // 测试步骤6:验证my类型返回的项目集数量大于等于0 +r(gettype($programTest->getProgramList4KanbanTest('other'))) && p() && e('array'); // 测试步骤7:验证other类型返回结果结构正确 \ No newline at end of file diff --git a/module/program/test/zen/yaml/getprogramlist4kanban/product.yaml b/module/program/test/zen/yaml/getprogramlist4kanban/product.yaml new file mode 100644 index 0000000000..adbd7de349 --- /dev/null +++ b/module/program/test/zen/yaml/getprogramlist4kanban/product.yaml @@ -0,0 +1,79 @@ +--- +title: 产品测试数据 +desc: 用于getProgramList4Kanban方法的产品测试数据 + +fields: +- field: id + note: ID + range: 1-30 +- field: program + note: 所属项目集 + range: '0{5},1{5},2{5},3{5},4{5},5{5}' +- field: name + note: 产品名称 + range: '产品A,产品B,产品C,产品D,产品E,产品F,产品G,产品H,产品I,产品J,产品K,产品L,产品M,产品N,产品O,产品P,产品Q,产品R,产品S,产品T,产品U,产品V,产品W,产品X,产品Y,产品Z,产品AA,产品AB,产品AC,产品AD' +- field: code + note: 产品代码 + range: '' +- field: shadow + note: 影子产品 + range: 0 +- field: bind + note: 绑定 + range: '0' +- field: line + note: 产品线 + range: 0 +- field: type + note: 类型 + range: 'normal' +- field: status + note: 状态 + range: 'normal{25},closed{5}' +- field: subStatus + note: 子状态 + range: '' +- field: desc + note: 描述 + range: '这是一个测试产品' +- field: PO + note: 产品负责人 + range: 'admin{10},user1{10},user2{10}' +- field: QD + note: 测试负责人 + range: 'admin{10},user1{10},user2{10}' +- field: RD + note: 发布负责人 + range: 'admin{10},user1{10},user2{10}' +- field: feedback + note: 反馈 + range: '' +- field: acl + note: 访问控制 + range: 'open{20},private{10}' +- field: whitelist + note: 白名单 + range: '' +- field: reviewer + note: 评审人 + range: '' +- field: createdBy + note: 创建者 + range: 'admin{20},user1{5},user2{5}' +- field: createdDate + note: 创建日期 + range: '`(-180D)-(-30D):10D`' + type: timestamp + format: YYYY-MM-DD hh:mm:ss +- field: createdVersion + note: 创建版本 + range: '' +- field: order + note: 排序 + range: 1-30 +- field: vision + note: 视图 + range: rnd +- field: deleted + note: 已删除 + range: '0' diff --git a/module/program/test/zen/yaml/getprogramlist4kanban/productplan.yaml b/module/program/test/zen/yaml/getprogramlist4kanban/productplan.yaml new file mode 100644 index 0000000000..b3f317446a --- /dev/null +++ b/module/program/test/zen/yaml/getprogramlist4kanban/productplan.yaml @@ -0,0 +1,59 @@ +--- +title: 产品计划测试数据 +desc: 用于getProgramList4Kanban方法的产品计划测试数据 + +fields: +- field: id + note: ID + range: 1-40 +- field: product + note: 所属产品 + range: 1-30:R +- field: branch + note: 分支 + range: '0' +- field: parent + note: 父计划 + range: 0 +- field: title + note: 计划标题 + range: '计划1.0,计划1.1,计划1.2,计划2.0,计划2.1,计划3.0,计划3.1,迭代1,迭代2,迭代3,迭代4,迭代5,版本A,版本B,版本C,版本D,版本E,版本F,版本G,版本H,版本I,版本J,版本K,版本L,版本M,版本N,版本O,版本P,版本Q,版本R,版本S,版本T,版本U,版本V,版本W,版本X,版本Y,版本Z,版本AA,版本AB' +- field: status + note: 状态 + range: '[wait]{10},[doing]{15},[done]{10},[closed]{5}' +- field: desc + note: 描述 + range: '这是一个测试计划' +- field: begin + note: 开始日期 + range: '`(-60D)-(-10D):5D`' + type: timestamp + format: YYYY-MM-DD +- field: end + note: 结束日期 + range: '`(+10D)-(+120D):10D`' + type: timestamp + format: YYYY-MM-DD +- field: finishedDate + note: 完成日期 + range: '0000-00-00 00:00:00{25},`(-5D)-(+5D):2D`{15}' +- field: closedDate + note: 关闭日期 + range: '0000-00-00 00:00:00{35},`(-3D)-(+3D):1D`{5}' +- field: order + note: 排序 + range: '' +- field: closedReason + note: 关闭原因 + range: '[]{35},done{5}' +- field: createdBy + note: 创建者 + range: 'admin{20},user1{10},user2{10}' +- field: createdDate + note: 创建日期 + range: '`(-90D)-(-20D):10D`' + type: timestamp + format: YYYY-MM-DD hh:mm:ss +- field: deleted + note: 已删除 + range: '0' diff --git a/module/program/test/zen/yaml/getprogramlist4kanban/project.yaml b/module/program/test/zen/yaml/getprogramlist4kanban/project.yaml new file mode 100644 index 0000000000..6e4e5910d7 --- /dev/null +++ b/module/program/test/zen/yaml/getprogramlist4kanban/project.yaml @@ -0,0 +1,213 @@ +--- +title: 项目集和项目测试数据 +desc: 用于getProgramList4Kanban方法的项目集测试数据 + +fields: +- field: id + note: ID + range: 1-50 +- field: project + note: 所属项目 + range: 0 +- field: isTpl + note: 是否模板 + range: 0 +- field: charter + note: 章程 + range: 0 +- field: model + note: 模型 + range: '' +- field: type + note: 类型 + range: '[program]{15},[project]{20},[sprint]{10},[stage]{5}' +- field: category + note: 分类 + range: '' +- field: lifetime + note: 生命周期 + range: '' +- field: budget + note: 预算 + range: '0' +- field: budgetUnit + note: 预算单位 + range: CNY +- field: attribute + note: 属性 + range: '' +- field: percent + note: 百分比 + range: 0-100:10 +- field: milestone + note: 里程碑 + range: '0' +- field: output + note: 输出 + range: '' +- field: auth + note: 权限 + range: '' +- field: storyType + note: 需求类型 + range: '' +- field: parent + note: 父级 + range: 0-5 +- field: path + note: 路径 + range: ',1,;,2,;,3,;,4,;,5,' +- field: grade + note: 级别 + range: 1-3 +- field: name + note: 名称 + range: '顶级项目集{5},子项目集{10},项目{20},迭代{10},阶段{5}' +- field: code + note: 代码 + range: '' +- field: mark + note: 标记 + range: '' +- field: begin + note: 开始日期 + range: '`(-90D)-(-30D):10D`' + type: timestamp + format: YYYY-MM-DD +- field: end + note: 结束日期 + range: '`(+30D)-(+180D):15D`' + type: timestamp + format: YYYY-MM-DD +- field: realBegan + note: 实际开始 + range: '`(-60D)-(-20D):10D`' + type: timestamp + format: YYYY-MM-DD +- field: realEnd + note: 实际结束 + range: '0000-00-00{40},`(-10D)-(+10D):5D`{10}' +- field: planDuration + note: 计划工期 + range: 0 +- field: realDuration + note: 实际工期 + range: 0 +- field: status + note: 状态 + range: '[wait]{10},[doing]{20},[suspended]{5},[closed]{15}' +- field: subStatus + note: 子状态 + range: '' +- field: pri + note: 优先级 + range: '1-4:R' +- field: desc + note: 描述 + range: '这是一个测试项目集{20},这是一个测试项目{30}' +- field: version + note: 版本 + range: 1 +- field: parentVersion + note: 父版本 + range: 0 +- field: openedBy + note: 创建者 + range: 'admin{30},user1{10},user2{10}' +- field: openedDate + note: 创建日期 + range: '`(-180D)-(-30D):10D`' + type: timestamp + format: YYYY-MM-DD hh:mm:ss +- field: openedVersion + note: 创建版本 + range: '' +- field: lastEditedBy + note: 最后编辑者 + range: 'admin{20},user1{15},user2{15}' +- field: lastEditedDate + note: 最后编辑日期 + range: '`(-30D)-(+0D):3D`' + type: timestamp + format: YYYY-MM-DD hh:mm:ss +- field: closedBy + note: 关闭者 + range: '[]{35},admin{10},user1{5}' +- field: closedDate + note: 关闭日期 + range: '0000-00-00 00:00:00{35},`(-20D)-(+0D):5D`{15}' +- field: canceledBy + note: 取消者 + range: '' +- field: canceledDate + note: 取消日期 + range: '0000-00-00 00:00:00' +- field: suspendedDate + note: 挂起日期 + range: '0000-00-00 00:00:00{45},`(-10D)-(+0D):2D`{5}' +- field: PO + note: 产品负责人 + range: 'admin{15},user1{20},user2{15}' +- field: PM + note: 项目经理 + range: 'admin{20},user1{15},user2{15}' +- field: QD + note: 测试负责人 + range: 'admin{10},user1{20},user2{20}' +- field: RD + note: 发布负责人 + range: 'admin{15},user1{15},user2{20}' +- field: noticeUsers + note: 通知用户 + range: '' +- field: feedback + note: 反馈 + range: '' +- field: team + note: 团队 + range: '' +- field: whitelist + note: 白名单 + range: '' +- field: division + note: 分支 + range: 0 +- field: multiple + note: 多分支 + range: '0' +- field: acl + note: 访问控制 + range: 'open{30},private{20}' +- field: vision + note: 视图 + range: rnd +- field: displayCards + note: 显示卡片 + range: 0 +- field: fluidBoard + note: 流动看板 + range: '0' +- field: colWidth + note: 列宽 + range: '' +- field: minColWidth + note: 最小列宽 + range: 0 +- field: maxColWidth + note: 最大列宽 + range: 0 +- field: order + note: 排序 + range: 1-50 +- field: days + note: 工作日 + range: 0 +- field: vision_edit + note: 视图编辑 + range: 0 +- field: hours + note: 工时 + range: 0 +- field: deleted + note: 已删除 + range: '0' diff --git a/module/program/test/zen/yaml/getprogramlist4kanban/projectproduct.yaml b/module/program/test/zen/yaml/getprogramlist4kanban/projectproduct.yaml new file mode 100644 index 0000000000..025ba69cf1 --- /dev/null +++ b/module/program/test/zen/yaml/getprogramlist4kanban/projectproduct.yaml @@ -0,0 +1,20 @@ +--- +title: 项目产品关联测试数据 +desc: 用于getProgramList4Kanban方法的项目产品关联测试数据 + +fields: +- field: project + note: 项目ID + range: 1-30:R +- field: product + note: 产品ID + range: 1-30:R +- field: branch + note: 分支 + range: 0 +- field: plan + note: 计划 + range: '[]{15},1,2,3,4,5,6,7,8,9,10' +- field: roadmap + note: 路线图 + range: '' diff --git a/module/program/test/zen/yaml/getprogramlist4kanban/release.yaml b/module/program/test/zen/yaml/getprogramlist4kanban/release.yaml new file mode 100644 index 0000000000..8569d455e5 --- /dev/null +++ b/module/program/test/zen/yaml/getprogramlist4kanban/release.yaml @@ -0,0 +1,60 @@ +--- +title: 发布测试数据 +desc: 用于getProgramList4Kanban方法的发布测试数据 + +fields: +- field: id + note: ID + range: 1-30 +- field: product + note: 所属产品 + range: 1-30:R +- field: branch + note: 分支 + range: 0 +- field: build + note: 构建 + range: 1-30:R +- field: name + note: 发布名称 + range: '版本1.0,版本1.1,版本1.2,版本2.0,版本2.1,版本3.0,正式版1,正式版2,正式版3,测试版A,测试版B,测试版C,迭代版D,迭代版E,迭代版F,发布G,发布H,发布I,发布J,发布K,发布L,发布M,发布N,发布O,发布P,发布Q,发布R,发布S,发布T,发布U' +- field: marker + note: 标记 + range: '0{20},1{10}' +- field: date + note: 发布日期 + range: '`(-30D)-(+30D):5D`' + type: timestamp + format: YYYY-MM-DD +- field: stories + note: 需求 + range: '' +- field: bugs + note: 缺陷 + range: '' +- field: leftBugs + note: 遗留缺陷 + range: '' +- field: desc + note: 描述 + range: '这是一个测试发布' +- field: mailto + note: 通知人员 + range: '' +- field: status + note: 状态 + range: '[normal]{25},[terminate]{5}' +- field: subStatus + note: 子状态 + range: '' +- field: createdBy + note: 创建者 + range: 'admin{15},user1{10},user2{5}' +- field: createdDate + note: 创建日期 + range: '`(-60D)-(-10D):5D`' + type: timestamp + format: YYYY-MM-DD hh:mm:ss +- field: deleted + note: 已删除 + range: '0' diff --git a/module/program/test/zen/yaml/getprogramlist4kanban/stakeholder.yaml b/module/program/test/zen/yaml/getprogramlist4kanban/stakeholder.yaml new file mode 100644 index 0000000000..aec80320fe --- /dev/null +++ b/module/program/test/zen/yaml/getprogramlist4kanban/stakeholder.yaml @@ -0,0 +1,43 @@ +--- +title: 干系人测试数据 +desc: 用于getProgramList4Kanban方法的干系人测试数据 + +fields: +- field: id + note: ID + range: 1-50 +- field: objectID + note: 对象ID + range: 1-10:R +- field: objectType + note: 对象类型 + range: 'program' +- field: user + note: 用户 + range: 'admin{20},user1{15},user2{15}' +- field: type + note: 类型 + range: 'inside{40},outside{10}' +- field: key + note: 关键 + range: 'no{30},yes{20}' +- field: from + note: 来源 + range: '' +- field: createdBy + note: 创建者 + range: 'admin{30},user1{10},user2{10}' +- field: createdDate + note: 创建日期 + range: '`(-180D)-(-30D):10D`' + type: timestamp + format: YYYY-MM-DD hh:mm:ss +- field: editedBy + note: 编辑者 + range: '[]{40},admin{5},user1{5}' +- field: editedDate + note: 编辑日期 + range: '0000-00-00 00:00:00{40},`(-20D)-(+0D):2D`{10}' +- field: deleted + note: 已删除 + range: '0'