From 97252532ec3a5c2a8680f846236ecfadb26fb80c Mon Sep 17 00:00:00 2001 From: liugang Date: Mon, 15 Sep 2025 11:50:04 +0800 Subject: [PATCH] + [misc] Add unit tests for productZen::getProductList4Kanban() 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/product.unittest.class.php | 28 ++++ .../test/zen/getproductlist4kanban.php | 33 +++++ .../yaml/product_getproductlist4kanban.yaml | 126 +++++++++++++++++ .../productplan_getproductlist4kanban.yaml | 84 +++++++++++ .../yaml/project_getproductlist4kanban.yaml | 133 ++++++++++++++++++ .../yaml/release_getproductlist4kanban.yaml | 91 ++++++++++++ 6 files changed, 495 insertions(+) create mode 100755 module/product/test/zen/getproductlist4kanban.php create mode 100644 module/product/test/zen/yaml/product_getproductlist4kanban.yaml create mode 100644 module/product/test/zen/yaml/productplan_getproductlist4kanban.yaml create mode 100644 module/product/test/zen/yaml/project_getproductlist4kanban.yaml create mode 100644 module/product/test/zen/yaml/release_getproductlist4kanban.yaml diff --git a/module/product/test/lib/product.unittest.class.php b/module/product/test/lib/product.unittest.class.php index d44dde7047..73f4fd7608 100644 --- a/module/product/test/lib/product.unittest.class.php +++ b/module/product/test/lib/product.unittest.class.php @@ -4276,4 +4276,32 @@ class productTest return 'error: ' . $e->getMessage(); } } + + /** + * Test getProductList4Kanban method. + * + * @param array $productList + * @param array $planList + * @param array $projectList + * @param array $releaseList + * @param array $projectProduct + * @access public + * @return array + */ + public function getProductList4KanbanTest(array $productList = array(), array $planList = array(), array $projectList = array(), array $releaseList = array(), array $projectProduct = array()): array + { + // 直接包含zen文件 + include_once dirname(dirname(__FILE__)) . '/../zen.php'; + $productZen = new productZen(); + + // 使用反射调用protected方法 + $reflection = new ReflectionClass($productZen); + $method = $reflection->getMethod('getProductList4Kanban'); + $method->setAccessible(true); + + $result = $method->invoke($productZen, $productList, $planList, $projectList, $releaseList, $projectProduct); + if(dao::isError()) return dao::getError(); + + return $result; + } } diff --git a/module/product/test/zen/getproductlist4kanban.php b/module/product/test/zen/getproductlist4kanban.php new file mode 100755 index 0000000000..4878813827 --- /dev/null +++ b/module/product/test/zen/getproductlist4kanban.php @@ -0,0 +1,33 @@ +#!/usr/bin/env php +getProductList4KanbanTest(array(), array(), array(), array(), array())) && p() && e(0); // 步骤1:空参数测试 +r($productTest->getProductList4KanbanTest(array(1 => (object)array('id' => 1, 'name' => '产品A', 'status' => 'normal', 'program' => 1)), array(), array(), array(), array())) && p() && e(1); // 步骤2:正常产品列表测试 +r($productTest->getProductList4KanbanTest(array(1 => (object)array('id' => 1, 'name' => '产品A', 'status' => 'closed', 'program' => 1)), array(), array(), array(), array())) && p() && e(0); // 步骤3:产品状态过滤测试 +r($productTest->getProductList4KanbanTest(array(1 => (object)array('id' => 1, 'name' => '产品A', 'status' => 'normal', 'program' => 1)), array(1 => array((object)array('id' => 1, 'title' => '计划A'))), array(), array(), array())) && p() && e(1); // 步骤4:包含计划数据测试 +r($productTest->getProductList4KanbanTest(array(1 => (object)array('id' => 1, 'name' => '产品A', 'status' => 'normal', 'program' => 1)), array(), array(1 => (object)array('id' => 1, 'name' => '项目A')), array(), array(1 => array(1 => (object)array('id' => 1, 'name' => '项目A'))))) && p() && e(1); // 步骤5:项目关联测试 \ No newline at end of file diff --git a/module/product/test/zen/yaml/product_getproductlist4kanban.yaml b/module/product/test/zen/yaml/product_getproductlist4kanban.yaml new file mode 100644 index 0000000000..50f357783e --- /dev/null +++ b/module/product/test/zen/yaml/product_getproductlist4kanban.yaml @@ -0,0 +1,126 @@ +--- +title: 产品看板列表测试数据 +desc: 测试getProductList4Kanban方法的产品数据 +author: Claude +version: 1.0 + +fields: +- field: id + note: 产品ID + range: 1-10 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: name + note: 产品名称 + range: "产品A,产品B,产品C,产品D,产品E,产品F,产品G,产品H,产品I,产品J" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: code + note: 产品代码 + range: "PA,PB,PC,PD,PE,PF,PG,PH,PI,PJ" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: program + note: 项目集ID + range: 0,1,2,0,1,2,0,1,2,0 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: line + note: 产品线ID + range: 0,1,1,2,2,0,1,1,2,0 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: type + note: 产品类型 + range: normal{8},branch{2} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: status + note: 产品状态 + range: normal{8},closed{2} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: desc + note: 产品描述 + range: "产品描述1,产品描述2,产品描述3,产品描述4,产品描述5,产品描述6,产品描述7,产品描述8,产品描述9,产品描述10" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: PO + note: 产品负责人 + range: admin{5},user1{3},user2{2} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: QD + note: 测试负责人 + range: "admin,user1,user2,admin,user1,user2,admin,user1,user2,admin" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: RD + note: 发布负责人 + range: "admin,user1,user2,admin,user1,user2,admin,user1,user2,admin" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: acl + note: 访问控制 + range: open{6},private{4} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: createdBy + note: 创建者 + range: admin{7},user1{3} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: createdDate + note: 创建时间 + range: "2023-01-01 00:00:00,2023-02-01 00:00:00,2023-03-01 00:00:00,2023-04-01 00:00:00,2023-05-01 00:00:00,2023-06-01 00:00:00,2023-07-01 00:00:00,2023-08-01 00:00:00,2023-09-01 00:00:00,2023-10-01 00:00:00" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: order + note: 排序 + range: 1-10 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: vision + note: 视图 + range: rnd{10} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: deleted + note: 是否删除 + range: 0{10} + prefix: "" + postfix: "" + loop: 0 + format: "" \ No newline at end of file diff --git a/module/product/test/zen/yaml/productplan_getproductlist4kanban.yaml b/module/product/test/zen/yaml/productplan_getproductlist4kanban.yaml new file mode 100644 index 0000000000..5b3e109912 --- /dev/null +++ b/module/product/test/zen/yaml/productplan_getproductlist4kanban.yaml @@ -0,0 +1,84 @@ +--- +title: 产品计划看板测试数据 +desc: 测试getProductList4Kanban方法的产品计划数据 +author: Claude +version: 1.0 + +fields: +- field: id + note: 计划ID + range: 1-15 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: product + note: 产品ID + range: 1,1,2,2,3,3,4,4,5,5,6,7,8,9,10 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: branch + note: 分支ID + range: 0{15} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: title + note: 计划标题 + range: "计划A1,计划A2,计划B1,计划B2,计划C1,计划C2,计划D1,计划D2,计划E1,计划E2,计划F1,计划G1,计划H1,计划I1,计划J1" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: desc + note: 计划描述 + range: "描述A1,描述A2,描述B1,描述B2,描述C1,描述C2,描述D1,描述D2,描述E1,描述E2,描述F1,描述G1,描述H1,描述I1,描述J1" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: begin + note: 开始时间 + range: "2024-01-01,2024-01-15,2024-02-01,2024-02-15,2024-03-01,2024-03-15,2024-04-01,2024-04-15,2024-05-01,2024-05-15,2024-06-01,2024-06-15,2024-07-01,2024-07-15,2024-08-01" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: end + note: 结束时间 + range: "2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: status + note: 计划状态 + range: doing{12},wait{3} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: createdBy + note: 创建者 + range: admin{10},user1{5} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: createdDate + note: 创建时间 + range: "2023-12-01 00:00:00,2023-12-02 00:00:00,2023-12-03 00:00:00,2023-12-04 00:00:00,2023-12-05 00:00:00,2023-12-06 00:00:00,2023-12-07 00:00:00,2023-12-08 00:00:00,2023-12-09 00:00:00,2023-12-10 00:00:00,2023-12-11 00:00:00,2023-12-12 00:00:00,2023-12-13 00:00:00,2023-12-14 00:00:00,2023-12-15 00:00:00" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: deleted + note: 是否删除 + range: 0{15} + prefix: "" + postfix: "" + loop: 0 + format: "" \ No newline at end of file diff --git a/module/product/test/zen/yaml/project_getproductlist4kanban.yaml b/module/product/test/zen/yaml/project_getproductlist4kanban.yaml new file mode 100644 index 0000000000..f67ee5081d --- /dev/null +++ b/module/product/test/zen/yaml/project_getproductlist4kanban.yaml @@ -0,0 +1,133 @@ +--- +title: 项目看板测试数据 +desc: 测试getProductList4Kanban方法的项目数据 +author: Claude +version: 1.0 + +fields: +- field: id + note: 项目ID + range: 1-12 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: name + note: 项目名称 + range: "项目Alpha,项目Beta,项目Gamma,项目Delta,项目Epsilon,项目Zeta,项目Eta,项目Theta,项目Iota,项目Kappa,项目Lambda,项目Mu" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: code + note: 项目代码 + range: "PROJ001,PROJ002,PROJ003,PROJ004,PROJ005,PROJ006,PROJ007,PROJ008,PROJ009,PROJ010,PROJ011,PROJ012" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: type + note: 项目类型 + range: project{10},program{2} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: model + note: 项目模型 + range: scrum{8},waterfall{4} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: status + note: 项目状态 + range: doing{8},wait{2},suspended{1},closed{1} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: budget + note: 项目预算 + range: 100000,150000,200000,250000,300000,350000,400000,450000,500000,550000,600000,650000 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: begin + note: 开始时间 + range: "2024-01-01,2024-01-15,2024-02-01,2024-02-15,2024-03-01,2024-03-15,2024-04-01,2024-04-15,2024-05-01,2024-05-15,2024-06-01,2024-06-15" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: end + note: 结束时间 + range: "2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31,2024-12-31" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: PM + note: 项目经理 + range: admin{6},user1{3},user2{3} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: PO + note: 产品负责人 + range: admin{6},user1{3},user2{3} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: QD + note: 测试负责人 + range: admin{6},user1{3},user2{3} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: RD + note: 发布负责人 + range: admin{6},user1{3},user2{3} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: acl + note: 访问控制 + range: open{8},private{4} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: createdBy + note: 创建者 + range: admin{8},user1{4} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: createdDate + note: 创建时间 + range: "2023-12-01 00:00:00,2023-12-02 00:00:00,2023-12-03 00:00:00,2023-12-04 00:00:00,2023-12-05 00:00:00,2023-12-06 00:00:00,2023-12-07 00:00:00,2023-12-08 00:00:00,2023-12-09 00:00:00,2023-12-10 00:00:00,2023-12-11 00:00:00,2023-12-12 00:00:00" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: deleted + note: 是否删除 + range: 0{12} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: hasProduct + note: 是否关联产品 + range: 1{12} + prefix: "" + postfix: "" + loop: 0 + format: "" \ No newline at end of file diff --git a/module/product/test/zen/yaml/release_getproductlist4kanban.yaml b/module/product/test/zen/yaml/release_getproductlist4kanban.yaml new file mode 100644 index 0000000000..c0af5813a1 --- /dev/null +++ b/module/product/test/zen/yaml/release_getproductlist4kanban.yaml @@ -0,0 +1,91 @@ +--- +title: 发布看板测试数据 +desc: 测试getProductList4Kanban方法的发布数据 +author: Claude +version: 1.0 + +fields: +- field: id + note: 发布ID + range: 1-15 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: product + note: 产品ID + range: 1,1,2,2,3,3,4,4,5,5,6,7,8,9,10 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: branch + note: 分支ID + range: 0{15} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: name + note: 发布名称 + range: "发布v1.0,发布v1.1,发布v2.0,发布v2.1,发布v3.0,发布v3.1,发布v4.0,发布v4.1,发布v5.0,发布v5.1,发布v6.0,发布v7.0,发布v8.0,发布v9.0,发布v10.0" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: marker + note: 里程碑标识 + range: 0,1,0,1,0,1,0,1,0,1,0,0,0,0,0 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: date + note: 发布日期 + range: "2024-01-15,2024-01-30,2024-02-15,2024-02-28,2024-03-15,2024-03-31,2024-04-15,2024-04-30,2024-05-15,2024-05-31,2024-06-15,2024-06-30,2024-07-15,2024-07-31,2024-08-15" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: status + note: 发布状态 + range: normal{12},terminate{3} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: subStatus + note: 子状态 + range: ""{15} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: desc + note: 发布描述 + range: "发布描述1,发布描述2,发布描述3,发布描述4,发布描述5,发布描述6,发布描述7,发布描述8,发布描述9,发布描述10,发布描述11,发布描述12,发布描述13,发布描述14,发布描述15" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: createdBy + note: 创建者 + range: admin{10},user1{5} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: createdDate + note: 创建时间 + range: "2023-12-01 00:00:00,2023-12-02 00:00:00,2023-12-03 00:00:00,2023-12-04 00:00:00,2023-12-05 00:00:00,2023-12-06 00:00:00,2023-12-07 00:00:00,2023-12-08 00:00:00,2023-12-09 00:00:00,2023-12-10 00:00:00,2023-12-11 00:00:00,2023-12-12 00:00:00,2023-12-13 00:00:00,2023-12-14 00:00:00,2023-12-15 00:00:00" + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: deleted + note: 是否删除 + range: 0{15} + prefix: "" + postfix: "" + loop: 0 + format: "" \ No newline at end of file