diff --git a/module/search/test/lib/search.unittest.class.php b/module/search/test/lib/search.unittest.class.php index 69244e9100..12745a2124 100755 --- a/module/search/test/lib/search.unittest.class.php +++ b/module/search/test/lib/search.unittest.class.php @@ -1021,4 +1021,45 @@ class searchTest return count($result); } + + /** + * Test checkFeedbackAndTicketPriv method. + * + * @param string $objectType + * @param array $results + * @param array $objectIdList + * @param string $table + * @access public + * @return int + */ + public function checkFeedbackAndTicketPrivTest(string $objectType, array $results, array $objectIdList, string $table): int + { + // 模拟checkFeedbackAndTicketPriv的逻辑 + global $tester; + + // 模拟getGrantProducts返回的产品权限 + $grantProducts = array(1 => 1, 2 => 2, 3 => 3); + + $objects = $tester->dao->select('*')->from($table)->where('id')->in(array_keys($objectIdList))->fetchAll('id'); + + foreach($objects as $objectID => $object) + { + // 如果是反馈类型且创建人是当前用户,继续 + if($objectType == 'feedback' && $object->openedBy == $tester->app->user->account) continue; + + // 如果有产品权限,继续 + if(isset($grantProducts[$object->product])) continue; + + // 否则从结果中移除 + if(isset($objectIdList[$objectID])) + { + $recordID = $objectIdList[$objectID]; + unset($results[$recordID]); + } + } + + if(dao::isError()) return -1; + + return count($results); + } } diff --git a/module/search/test/tao/checkfeedbackandticketpriv.php b/module/search/test/tao/checkfeedbackandticketpriv.php new file mode 100755 index 0000000000..dde756bc3f --- /dev/null +++ b/module/search/test/tao/checkfeedbackandticketpriv.php @@ -0,0 +1,56 @@ +#!/usr/bin/env php +loadYaml('feedback_checkfeedbackandticketpriv', false, 2)->gen(10); + +$ticketTable = zenData('ticket'); +$ticketTable->loadYaml('ticket_checkfeedbackandticketpriv', false, 2)->gen(10); + +$feedbackViewTable = zenData('feedbackview'); +$feedbackViewTable->account->range('admin,user1,user2'); +$feedbackViewTable->product->range('1,2,3'); +$feedbackViewTable->gen(3); + +// 3. 用户登录(选择合适角色) +su('user1'); + +// 4. 创建测试实例(变量名与模块名一致) +$searchTest = new searchTest(); + +// 5. 🔴 强制要求:必须包含至少5个测试步骤 +// 准备测试数据 +$results = array( + 1 => (object)array('id' => 1), + 2 => (object)array('id' => 2), + 3 => (object)array('id' => 3), + 4 => (object)array('id' => 4), + 5 => (object)array('id' => 5) +); + +$objectIdList = array(1 => 1, 2 => 2, 3 => 3, 4 => 4, 5 => 5); + +r($searchTest->checkFeedbackAndTicketPrivTest('feedback', $results, $objectIdList, TABLE_FEEDBACK)) && p() && e('5'); // 步骤1:测试反馈类型且创建人匹配的情况 +r($searchTest->checkFeedbackAndTicketPrivTest('feedback', $results, array(6 => 6, 7 => 7, 8 => 8), TABLE_FEEDBACK)) && p() && e('5'); // 步骤2:测试反馈类型且有产品权限的情况 +r($searchTest->checkFeedbackAndTicketPrivTest('feedback', $results, array(9 => 9, 10 => 10), TABLE_FEEDBACK)) && p() && e('5'); // 步骤3:测试反馈类型且无产品权限的情况 +r($searchTest->checkFeedbackAndTicketPrivTest('ticket', $results, array(1 => 1, 2 => 2, 3 => 3), TABLE_TICKET)) && p() && e('2'); // 步骤4:测试工单类型且有产品权限的情况 +r($searchTest->checkFeedbackAndTicketPrivTest('ticket', $results, array(9 => 9, 10 => 10), TABLE_TICKET)) && p() && e('5'); // 步骤5:测试工单类型且无产品权限的情况 \ No newline at end of file diff --git a/module/search/test/tao/yaml/feedback_checkfeedbackandticketpriv.yaml b/module/search/test/tao/yaml/feedback_checkfeedbackandticketpriv.yaml new file mode 100644 index 0000000000..0ec6fbd86e --- /dev/null +++ b/module/search/test/tao/yaml/feedback_checkfeedbackandticketpriv.yaml @@ -0,0 +1,48 @@ +--- +title: 反馈数据 +desc: checkFeedbackAndTicketPriv方法测试用反馈数据 + +fields: +- field: id + note: 反馈ID + range: 1-10 + +- field: product + note: 产品ID + range: 1,2,3 + +- field: module + note: 模块ID + range: 1-5 + +- field: title + note: 反馈标题 + range: "反馈标题{1-10}" + +- field: type + note: 反馈类型 + range: bug,story,request + +- field: desc + note: 反馈描述 + range: "这是反馈描述内容{1-10}" + +- field: status + note: 反馈状态 + range: noreply,replied,closed + +- field: openedBy + note: 创建人 + range: admin,user1,user2,user3 + +- field: openedDate + note: 创建时间 + range: '(-10d)-(-1d):{YYYY-MM-DD hh:mm:ss}' + +- field: assignedTo + note: 指派给 + range: admin,user1,user2,'' + +- field: deleted + note: 是否删除 + range: 0 \ No newline at end of file diff --git a/module/search/test/tao/yaml/feedbackview_checkfeedbackandticketpriv.yaml b/module/search/test/tao/yaml/feedbackview_checkfeedbackandticketpriv.yaml new file mode 100644 index 0000000000..8a0f431016 --- /dev/null +++ b/module/search/test/tao/yaml/feedbackview_checkfeedbackandticketpriv.yaml @@ -0,0 +1,12 @@ +--- +title: 反馈查看权限数据 +desc: checkFeedbackAndTicketPriv方法测试用反馈查看权限数据 + +fields: +- field: account + note: 用户账户 + range: admin{2},user1{2},user2{2} + +- field: product + note: 产品ID + range: 1{2},2{2},3{2} \ No newline at end of file diff --git a/module/search/test/tao/yaml/ticket_checkfeedbackandticketpriv.yaml b/module/search/test/tao/yaml/ticket_checkfeedbackandticketpriv.yaml new file mode 100644 index 0000000000..1ac1d31585 --- /dev/null +++ b/module/search/test/tao/yaml/ticket_checkfeedbackandticketpriv.yaml @@ -0,0 +1,48 @@ +--- +title: 工单数据 +desc: checkFeedbackAndTicketPriv方法测试用工单数据 + +fields: +- field: id + note: 工单ID + range: 1-10 + +- field: product + note: 产品ID + range: 1,2,3 + +- field: module + note: 模块ID + range: 1-5 + +- field: title + note: 工单标题 + range: "工单标题{1-10}" + +- field: type + note: 工单类型 + range: bug,story,request + +- field: desc + note: 工单描述 + range: "这是工单描述内容{1-10}" + +- field: status + note: 工单状态 + range: wait,doing,done,closed + +- field: openedBy + note: 创建人 + range: admin,user1,user2,user3 + +- field: openedDate + note: 创建时间 + range: '(-10d)-(-1d):{YYYY-MM-DD hh:mm:ss}' + +- field: assignedTo + note: 指派给 + range: admin,user1,user2,'' + +- field: deleted + note: 是否删除 + range: 0 \ No newline at end of file