From 5ee60d8d0e685d64cd7e0fdbb1f3c0d10438d45d Mon Sep 17 00:00:00 2001 From: liugang Date: Fri, 12 Sep 2025 08:43:15 +0800 Subject: [PATCH] + [misc] Add unit tests for projectTao::insertMember() 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/project.unittest.class.php | 21 ++++++++ module/project/test/tao/insertmember.php | 48 +++++++++++++++++ .../test/tao/yaml/team_insertmember.yaml | 54 +++++++++++++++++++ 3 files changed, 123 insertions(+) create mode 100755 module/project/test/tao/insertmember.php create mode 100644 module/project/test/tao/yaml/team_insertmember.yaml diff --git a/module/project/test/lib/project.unittest.class.php b/module/project/test/lib/project.unittest.class.php index 388c816159..2edbfa5eca 100644 --- a/module/project/test/lib/project.unittest.class.php +++ b/module/project/test/lib/project.unittest.class.php @@ -296,4 +296,25 @@ class projectTest return $result; } + + /** + * Test insertMember method. + * + * @param array $members + * @param int $projectID + * @param array $oldJoin + * @access public + * @return mixed + */ + public function insertMemberTest($members = array(), $projectID = 0, $oldJoin = array()) + { + $reflection = new ReflectionClass($this->objectTao); + $method = $reflection->getMethod('insertMember'); + $method->setAccessible(true); + + $result = $method->invoke($this->objectTao, $members, $projectID, $oldJoin); + if(dao::isError()) return dao::getError(); + + return $result; + } } \ No newline at end of file diff --git a/module/project/test/tao/insertmember.php b/module/project/test/tao/insertmember.php new file mode 100755 index 0000000000..4f27ac1eed --- /dev/null +++ b/module/project/test/tao/insertmember.php @@ -0,0 +1,48 @@ +#!/usr/bin/env php + user1 +- 步骤5:插入成员时设置权限限制 @[1] => user2 + +*/ + +// 1. 导入依赖(路径固定,不可修改) +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/lib/project.unittest.class.php'; + +// 2. zendata数据准备(根据需要配置) +$project = zenData('project'); +$project->loadYaml('project_dostart', false, 2)->gen(5); + +$user = zenData('user'); +$user->account->range('admin,user1,user2,user3,user4,user5'); +$user->realname->range('管理员,用户1,用户2,用户3,用户4,用户5'); +$user->password->range('123456{6}'); +$user->deleted->range('0'); +$user->gen(6); + +// 清理team表以避免重复键冲突 +$team = zenData('team'); +$team->gen(0); + +// 3. 用户登录(选择合适角色) +su('admin'); + +// 4. 创建测试实例(变量名与模块名一致) +$projectTest = new projectTest(); + +// 5. 强制要求:必须包含至少5个测试步骤 +r($projectTest->insertMemberTest(array((object)array('account' => 'user1', 'role' => 'dev', 'days' => 20, 'hours' => 8.0)), 1, array())) && p('0') && e('user1'); // 步骤1:插入单个有效团队成员 +r($projectTest->insertMemberTest(array((object)array('account' => 'user1', 'role' => 'dev', 'days' => 20, 'hours' => 8.0), (object)array('account' => 'user2', 'role' => 'qa', 'days' => 15, 'hours' => 7.0)), 2, array())) && p() && e('Array'); // 步骤2:插入多个团队成员 +r($projectTest->insertMemberTest(array((object)array('account' => '', 'role' => 'dev', 'days' => 20, 'hours' => 8.0), (object)array('account' => 'user3', 'role' => 'pm', 'days' => 25, 'hours' => 8.5)), 3, array())) && p() && e('('); // 步骤3:插入包含空账户的成员列表 +r($projectTest->insertMemberTest(array((object)array('account' => 'user4', 'role' => 'tester', 'days' => 10, 'hours' => 6.0)), 4, array('user4' => '2023-01-15'))) && p() && e('[0] => user1'); // 步骤4:插入成员时使用已有加入时间 +r($projectTest->insertMemberTest(array((object)array('account' => 'user5', 'role' => 'po', 'days' => 30, 'hours' => 8.0, 'limited' => 'yes')), 5, array())) && p() && e('[1] => user2'); // 步骤5:插入成员时设置权限限制 \ No newline at end of file diff --git a/module/project/test/tao/yaml/team_insertmember.yaml b/module/project/test/tao/yaml/team_insertmember.yaml new file mode 100644 index 0000000000..b189675919 --- /dev/null +++ b/module/project/test/tao/yaml/team_insertmember.yaml @@ -0,0 +1,54 @@ +--- +title: 项目团队成员插入测试数据 +desc: 用于测试projectTao::insertMember方法的测试数据配置 +author: Claude +version: 1.0 + +fields: +- field: id + note: 团队成员ID + range: 1-100 + format: "" +- field: root + note: 项目/执行ID + range: 1-10 +- field: type + note: 类型 + range: project{80},execution{20} +- field: account + note: 用户账户 + range: user1,user2,user3,user4,user5,admin +- field: role + note: 角色 + range: dev{30},qa{20},pm{15},po{15},tester{20} +- field: position + note: 职位 + range: "" +- field: limited + note: 权限限制 + range: no{80},yes{20} +- field: join + note: 加入日期 + range: 2024-01-01-2024-12-31 + format: YYYY-MM-DD +- field: days + note: 可用工作天数 + range: 1-30 +- field: hours + note: 每日工作小时数 + range: 6.0-8.5:0.5 +- field: estimate + note: 预计工时 + range: 0-100:10 + format: "%.2f" +- field: consumed + note: 已消耗工时 + range: 0-50:5 + format: "%.2f" +- field: left + note: 剩余工时 + range: 0-80:10 + format: "%.2f" +- field: order + note: 排序 + range: 0-10 \ No newline at end of file