From 3929c34ebaacf81fb119f22e867e32747b02b91f Mon Sep 17 00:00:00 2001 From: liugang Date: Tue, 16 Sep 2025 18:53:06 +0800 Subject: [PATCH] + [misc] Add unit tests for programZen::getProgramsByType() 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/program.unittest.class.php | 35 +++++++++ module/program/test/zen/getprogramsbytype.php | 33 +++++++++ .../zen/yaml/project_getprogramsbytype.yaml | 74 +++++++++++++++++++ 3 files changed, 142 insertions(+) create mode 100755 module/program/test/zen/getprogramsbytype.php create mode 100644 module/program/test/zen/yaml/project_getprogramsbytype.yaml diff --git a/module/program/test/lib/program.unittest.class.php b/module/program/test/lib/program.unittest.class.php index 5f26a0d14e..4d5e14f7c1 100644 --- a/module/program/test/lib/program.unittest.class.php +++ b/module/program/test/lib/program.unittest.class.php @@ -13,6 +13,7 @@ class programTest global $tester; $this->program = $tester->loadModel('program'); + $this->objectTao = $tester->loadTao('program'); } /** @@ -803,4 +804,38 @@ class programTest return $parents; } + + /** + * Test getProgramsByType method. + * + * @param string $status + * @param string $orderBy + * @param int $param + * @param object|null $pager + * @access public + * @return int + */ + public function getProgramsByTypeTest(string $status, string $orderBy, int $param = 0, ?object $pager = null): int + { + $status = strtolower($status); + $orderBy = $orderBy ?: 'id_asc'; + + if(strpos($orderBy, 'order') !== false) $orderBy = "grade,{$orderBy}"; + + if(strtolower($status) == 'bysearch') + { + $programs = $this->program->getListBySearch($orderBy, $param, false, $pager); + } + else + { + $topObjects = $this->program->getList($status == 'unclosed' ? 'doing,suspended,wait' : $status, $orderBy, 'top', array(), $pager); + if(!$topObjects) $topObjects = array(0); + + $programs = $this->program->getList($status, $orderBy, 'child', array_keys($topObjects)); + } + + if(dao::isError()) return 0; + + return count($programs); + } } diff --git a/module/program/test/zen/getprogramsbytype.php b/module/program/test/zen/getprogramsbytype.php new file mode 100755 index 0000000000..75305e3667 --- /dev/null +++ b/module/program/test/zen/getprogramsbytype.php @@ -0,0 +1,33 @@ +#!/usr/bin/env php +loadYaml('project_getprogramsbytype', false, 2); +$table->gen(20); + +su('admin'); + +$programTest = new programTest(); + +r($programTest->getProgramsByTypeTest('doing', 'id_asc')) && p() && e('10'); +r($programTest->getProgramsByTypeTest('wait', 'id_desc')) && p() && e('6'); +r($programTest->getProgramsByTypeTest('closed', 'order_asc')) && p() && e('2'); +r($programTest->getProgramsByTypeTest('unclosed', 'id_asc')) && p() && e('18'); +r($programTest->getProgramsByTypeTest('bysearch', 'id_asc', 0)) && p() && e('10'); \ No newline at end of file diff --git a/module/program/test/zen/yaml/project_getprogramsbytype.yaml b/module/program/test/zen/yaml/project_getprogramsbytype.yaml new file mode 100644 index 0000000000..059d0b84ff --- /dev/null +++ b/module/program/test/zen/yaml/project_getprogramsbytype.yaml @@ -0,0 +1,74 @@ +--- +title: 项目集数据定义 +desc: 用于getProgramsByType方法测试的项目集数据 +author: Claude +version: 1.0 + +fields: +- field: id + note: 项目集ID + range: 1-20 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: type + note: 类型 + range: program{10}, project{10} + format: "" +- field: parent + note: 父级ID + range: 0{10}, 1-5{10} + format: "" +- field: name + note: 项目集名称 + range: 程序集A,程序集B,程序集C,项目D,项目E,项目F,项目G,项目H,项目I,项目J,项目K,项目L,项目M,项目N,项目O,项目P,项目Q,项目R,项目S,项目T + format: "" +- field: code + note: 项目集代码 + range: PROG001-PROG020 + format: "" +- field: status + note: 状态 + range: wait{3}, doing{7}, suspended{3}, closed{7} + format: "" +- field: grade + note: 层级 + range: 1{10}, 2{10} + format: "" +- field: path + note: 路径 + range: ,1,{5}, ,2,{5}, ,3,{5}, ,1,{5} + format: "" +- field: begin + note: 开始日期 + range: 2024-01-01-2024-12-31 + format: YYYY-MM-DD +- field: end + note: 结束日期 + range: 2025-01-01-2025-12-31 + format: YYYY-MM-DD +- field: openedBy + note: 创建者 + range: admin{10}, user1{5}, user2{5} + format: "" +- field: openedDate + note: 创建日期 + range: 2024-01-01 00:00:00-2024-12-31 23:59:59 + format: YYYY-MM-DD hh:mm:ss +- field: PM + note: 项目经理 + range: admin{5}, pm1{5}, pm2{5}, pm3{5} + format: "" +- field: deleted + note: 是否删除 + range: 0{18}, 1{2} + format: "" +- field: acl + note: 访问控制 + range: open{15}, private{5} + format: "" +- field: order + note: 排序 + range: 1-20 + format: "" \ No newline at end of file