From cefb135b7b048c58ce5310c2b58836360fa319be Mon Sep 17 00:00:00 2001 From: liugang Date: Thu, 11 Sep 2025 17:41:21 +0800 Subject: [PATCH] + [misc] Add unit tests for convertTao::createTeamMember() 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/convert.unittest.class.php | 27 +++++ module/convert/test/tao/createteammember.php | 51 +++++++++ .../test/tao/yaml/team_createteammember.yaml | 105 ++++++++++++++++++ 3 files changed, 183 insertions(+) create mode 100755 module/convert/test/tao/createteammember.php create mode 100644 module/convert/test/tao/yaml/team_createteammember.yaml diff --git a/module/convert/test/lib/convert.unittest.class.php b/module/convert/test/lib/convert.unittest.class.php index 76d8240bae..b1f00e2f0f 100644 --- a/module/convert/test/lib/convert.unittest.class.php +++ b/module/convert/test/lib/convert.unittest.class.php @@ -3095,4 +3095,31 @@ class convertTest return 'true'; } + + /** + * Test createTeamMember method. + * + * @param int $objectID + * @param string $createdBy + * @param string $type + * @access public + * @return bool + */ + public function createTeamMemberTest(int $objectID = 1, string $createdBy = 'admin', string $type = 'project'): bool + { + try { + // Use reflection to access protected method + $reflection = new ReflectionClass($this->objectTao); + $method = $reflection->getMethod('createTeamMember'); + $method->setAccessible(true); + + $result = $method->invoke($this->objectTao, $objectID, $createdBy, $type); + if(dao::isError()) return false; + return $result; + } catch (Exception $e) { + return false; + } catch (Error $e) { + return false; + } + } } diff --git a/module/convert/test/tao/createteammember.php b/module/convert/test/tao/createteammember.php new file mode 100755 index 0000000000..d247702ea5 --- /dev/null +++ b/module/convert/test/tao/createteammember.php @@ -0,0 +1,51 @@ +#!/usr/bin/env php +id->range('1-100'); +$table->root->range('1-10'); +$table->type->range('project{5}, execution{5}'); +$table->account->range('admin, user1, user2, user3, testuser'); +$table->role->range('[]'); +$table->position->range('[]'); +$table->limited->range('no'); +$table->join->range('2024-01-01:2024-12-31'); +$table->days->range('0'); +$table->hours->range('8.0'); +$table->estimate->range('0.00'); +$table->consumed->range('0.00'); +$table->left->range('0.00'); +$table->order->range('0'); +$table->gen(5); + +// 3. 用户登录(选择合适角色) +su('admin'); + +// 4. 创建测试实例(变量名与模块名一致) +$convertTest = new convertTest(); + +// 5. 🔴 强制要求:必须包含至少5个测试步骤 +r($convertTest->createTeamMemberTest(1, 'admin', 'project')) && p() && e('1'); // 步骤1:正常创建project类型团队成员 +r($convertTest->createTeamMemberTest(2, 'user1', 'execution')) && p() && e('1'); // 步骤2:正常创建execution类型团队成员 +r($convertTest->createTeamMemberTest(100, 'testuser', 'project')) && p() && e('1'); // 步骤3:测试大ID值 +r($convertTest->createTeamMemberTest(5, 'user2', 'execution')) && p() && e('1'); // 步骤4:测试不同账户名 +r($convertTest->createTeamMemberTest(3, 'user3', 'project')) && p() && e('1'); // 步骤5:再次验证正常创建 \ No newline at end of file diff --git a/module/convert/test/tao/yaml/team_createteammember.yaml b/module/convert/test/tao/yaml/team_createteammember.yaml new file mode 100644 index 0000000000..8abaded35a --- /dev/null +++ b/module/convert/test/tao/yaml/team_createteammember.yaml @@ -0,0 +1,105 @@ +--- +title: Team member data for createTeamMember test +desc: Test data for team table in createTeamMember method test +author: Claude +version: 1.0 + +fields: +- field: id + note: 团队成员ID + range: 1-100 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: root + note: 项目或执行ID + range: 1-10 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: type + note: 类型 + range: project{5}, execution{5} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: account + note: 用户账户 + range: admin, user1, user2, user3, testuser + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: role + note: 角色 + range: []{5}, developer{3}, manager{2} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: position + note: 职位 + range: []{8}, leader{1}, member{1} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: limited + note: 是否受限 + range: no{8}, yes{2} + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: join + note: 加入日期 + range: (2024-01-01)-(2024-12-31):30D + prefix: "" + postfix: "" + loop: 0 + format: YYYY-MM-DD +- field: days + note: 工作天数 + range: 0-30 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: hours + note: 工作时数 + range: 0.0-8.0:0.5 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: estimate + note: 预估工时 + range: 0.00-100.00:1.00 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: consumed + note: 消耗工时 + range: 0.00-80.00:1.00 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: left + note: 剩余工时 + range: 0.00-50.00:1.00 + prefix: "" + postfix: "" + loop: 0 + format: "" +- field: order + note: 排序 + range: 0-10 + prefix: "" + postfix: "" + loop: 0 + format: "" \ No newline at end of file