From c66640becaf7e437c6be73d161bbb8fc4f5c8267 Mon Sep 17 00:00:00 2001 From: liugang Date: Wed, 10 Sep 2025 22:06:36 +0800 Subject: [PATCH] + [misc] Add unit tests for userModel::getProgramAuthedUsers() 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 --- module/user/test/lib/user.unittest.class.php | 22 ++++++ .../user/test/model/getprogramauthedusers.php | 50 ++++++++++++ .../yaml/company_getprogramauthedusers.yaml | 42 ++++++++++ .../yaml/project_getprogramauthedusers.yaml | 77 +++++++++++++++++++ 4 files changed, 191 insertions(+) create mode 100755 module/user/test/model/getprogramauthedusers.php create mode 100644 module/user/test/model/yaml/company_getprogramauthedusers.yaml create mode 100644 module/user/test/model/yaml/project_getprogramauthedusers.yaml diff --git a/module/user/test/lib/user.unittest.class.php b/module/user/test/lib/user.unittest.class.php index c320fe3c1c..8bcb1b7936 100755 --- a/module/user/test/lib/user.unittest.class.php +++ b/module/user/test/lib/user.unittest.class.php @@ -1473,4 +1473,26 @@ class userTest return $result; } + + /** + * Test getProgramAuthedUsers method. + * + * @param object $program + * @param array $stakeholders + * @param array $whiteList + * @param array $admins + * @access public + * @return array + */ + public function getProgramAuthedUsersTest(object $program, array $stakeholders = array(), array $whiteList = array(), array $admins = array()): array + { + $reflection = new ReflectionClass($this->objectModel); + $method = $reflection->getMethod('getProgramAuthedUsers'); + $method->setAccessible(true); + + $result = $method->invokeArgs($this->objectModel, array($program, $stakeholders, $whiteList, $admins)); + if(dao::isError()) return dao::getError(); + + return $result; + } } diff --git a/module/user/test/model/getprogramauthedusers.php b/module/user/test/model/getprogramauthedusers.php new file mode 100755 index 0000000000..755a69ffcb --- /dev/null +++ b/module/user/test/model/getprogramauthedusers.php @@ -0,0 +1,50 @@ +#!/usr/bin/env php +id->range('1-10'); +$project->type->range('program{5},project{5}'); +$project->parent->range('0{2},1{2},2{1},3{5}'); +$project->path->range('`,1,`,`,1,2,`,`,1,2,3,`,`,1,3,`,`,4,`,`,4,5,`,`,4,6,`,`,4,7,`,`,4,8,`'); +$project->name->range('项目集1,项目集2,子项目集1,子项目集2,子项目集3,项目1,项目2,项目3,项目4,项目5'); +$project->openedBy->range('admin,user1,user2,user3,user4,admin,user1,user2,user3,user4'); +$project->PM->range('pm1,pm2,pm3,pm4,pm5,pm1,pm2,pm3,pm4,pm5'); +$project->acl->range('open{2},program{3},private{5}'); +$project->gen(10); + +$company = zenData('company'); +$company->id->range('1'); +$company->admins->range('admin,superuser'); +$company->gen(1); + +// 3. 用户登录(选择合适角色) +su('admin'); + +// 4. 创建测试实例(变量名与模块名一致) +$userTest = new userTest(); + +// 5. 🔴 强制要求:必须包含至少5个测试步骤 +r(count($userTest->getProgramAuthedUsersTest((object)array('id' => 1, 'openedBy' => 'admin', 'PM' => 'pm1', 'parent' => 0, 'acl' => 'open', 'path' => ',1,')))) && p() && e('2'); // 步骤1:正常情况 +r(count($userTest->getProgramAuthedUsersTest((object)array('id' => 2, 'openedBy' => 'user1', 'PM' => 'pm2', 'parent' => 0, 'acl' => 'open', 'path' => ',2,'), array('stakeholder1' => 'stakeholder1'), array(), array()))) && p() && e('4'); // 步骤2:包含利益相关者 +r(count($userTest->getProgramAuthedUsersTest((object)array('id' => 3, 'openedBy' => 'user2', 'PM' => 'pm3', 'parent' => 0, 'acl' => 'open', 'path' => ',3,'), array(), array('whitelist1' => 'whitelist1'), array()))) && p() && e('4'); // 步骤3:包含白名单用户 +r(count($userTest->getProgramAuthedUsersTest((object)array('id' => 4, 'openedBy' => 'user3', 'PM' => 'pm4', 'parent' => 1, 'acl' => 'program', 'path' => ',1,4,')))) && p() && e('4'); // 步骤4:父项目集内部公开 +r(count($userTest->getProgramAuthedUsersTest((object)array('id' => 5, 'openedBy' => 'user4', 'PM' => 'pm5', 'parent' => 4, 'acl' => 'program', 'path' => ',1,4,5,')))) && p() && e('6'); // 步骤5:多层父项目集权限 \ No newline at end of file diff --git a/module/user/test/model/yaml/company_getprogramauthedusers.yaml b/module/user/test/model/yaml/company_getprogramauthedusers.yaml new file mode 100644 index 0000000000..b2ac06172b --- /dev/null +++ b/module/user/test/model/yaml/company_getprogramauthedusers.yaml @@ -0,0 +1,42 @@ +--- +title: 公司管理员测试数据 +desc: 用于测试getProgramAuthedUsers方法的公司管理员数据 +author: Claude +version: 1.0 + +fields: +- field: id + note: 公司ID + range: 1 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: name + note: 公司名称 + range: 测试公司 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: admins + note: 管理员列表 + range: admin,superuser + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: status + note: 公司状态 + range: normal + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: deleted + note: 是否删除 + range: '0' + prefix: "" + postfix: "" + loop: 0 + format: "" \ No newline at end of file diff --git a/module/user/test/model/yaml/project_getprogramauthedusers.yaml b/module/user/test/model/yaml/project_getprogramauthedusers.yaml new file mode 100644 index 0000000000..c6106fa59d --- /dev/null +++ b/module/user/test/model/yaml/project_getprogramauthedusers.yaml @@ -0,0 +1,77 @@ +--- +title: 项目集权限用户测试数据 +desc: 用于测试getProgramAuthedUsers方法的项目集数据 +author: Claude +version: 1.0 + +fields: +- field: id + note: 项目集ID + range: 1-10 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: type + note: 项目类型 + range: program{5},project{5} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: parent + note: 父项目集ID + range: 0{2},1{2},2{1},3{5} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: path + note: 项目集路径 + range: '`,1,`,`,1,2,`,`,1,2,3,`,`,1,3,`,`,4,`,`,4,5,`,`,4,6,`,`,4,7,`,`,4,8,`' + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: name + note: 项目集名称 + range: 项目集1,项目集2,子项目集1,子项目集2,子项目集3,项目1,项目2,项目3,项目4,项目5 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: openedBy + note: 创建者 + range: admin,user1,user2,user3,user4,admin,user1,user2,user3,user4 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: PM + note: 项目经理 + range: pm1,pm2,pm3,pm4,pm5,pm1,pm2,pm3,pm4,pm5 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: acl + note: 权限类别 + range: open{2},program{3},private{5} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: status + note: 状态 + range: wait{3},doing{4},done{3} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: deleted + note: 是否删除 + range: '0' + prefix: "" + postfix: "" + loop: 0 + format: "" \ No newline at end of file