+ [misc] Add unit tests for searchTao::checkProgramPriv() method

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
liugang
2025-09-15 15:09:45 +08:00
co-authored by Claude
parent babf4382fe
commit 68e00f646e
2 changed files with 102 additions and 0 deletions
@@ -873,4 +873,34 @@ class searchTest
return $result;
}
/**
* Test checkProgramPriv method.
*
* @param array $results
* @param array $objectIdList
* @param string $programs
* @access public
* @return array
*/
public function checkProgramPrivTest(array $results, array $objectIdList, string $programs = '1,2,3'): array
{
// 设置用户权限
global $tester;
if(!isset($tester->app->user->view)) $tester->app->user->view = new stdClass();
$tester->app->user->view->programs = $programs;
// 设置tao对象的app引用
$this->objectTao->app->user->view = $tester->app->user->view;
// 使用反射访问私有方法
$reflection = new ReflectionClass($this->objectTao);
$method = $reflection->getMethod('checkProgramPriv');
$method->setAccessible(true);
$result = $method->invokeArgs($this->objectTao, array($results, $objectIdList));
if(dao::isError()) return dao::getError();
return $result;
}
}
+72
View File
@@ -0,0 +1,72 @@
#!/usr/bin/env php
<?php
/**
title=测试 searchTao::checkProgramPriv();
timeout=0
cid=0
- 执行searchTest模块的checkProgramPrivTest方法,参数是$results, $objectIdList, '1, 2, 3' @2
- 执行searchTest模块的checkProgramPrivTest方法,参数是$results, $objectIdList, '1, 2, 3' @0
- 执行searchTest模块的checkProgramPrivTest方法,参数是$results, $objectIdList, '1, 2, 3' @1
- 执行searchTest模块的checkProgramPrivTest方法,参数是$results, $objectIdList, '1, 2, 3' @3
- 执行searchTest模块的checkProgramPrivTest方法,参数是$results, $objectIdList, '1, 2, 3' @1
*/
// 1. 导入依赖
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/search.unittest.class.php';
// 2. 不使用zendata,直接模拟测试数据
// 3. 用户登录(使用普通用户模拟有限权限)
su('user');
// 4. 创建测试实例
$searchTest = new searchTest();
// 准备测试数据
$results = array(
1 => (object)array('id' => 1, 'title' => '测试结果1', 'objectType' => 'program', 'objectID' => 1),
2 => (object)array('id' => 2, 'title' => '测试结果2', 'objectType' => 'program', 'objectID' => 2),
3 => (object)array('id' => 3, 'title' => '测试结果3', 'objectType' => 'program', 'objectID' => 4)
);
// 测试步骤1:有权限的项目集,应该保留搜索结果
$objectIdList = array(1 => 1, 2 => 2, 4 => 3); // programID => recordID
r(count($searchTest->checkProgramPrivTest($results, $objectIdList, '1,2,3'))) && p() && e(2);
// 测试步骤2:无权限的项目集,应该移除搜索结果
$results = array(
1 => (object)array('id' => 1, 'title' => '测试结果1', 'objectType' => 'program', 'objectID' => 4),
2 => (object)array('id' => 2, 'title' => '测试结果2', 'objectType' => 'program', 'objectID' => 5)
);
$objectIdList = array(4 => 1, 5 => 2);
r(count($searchTest->checkProgramPrivTest($results, $objectIdList, '1,2,3'))) && p() && e(0);
// 测试步骤3:部分有权限的项目集,应该保留有权限的结果
$results = array(
1 => (object)array('id' => 1, 'title' => '测试结果1', 'objectType' => 'program', 'objectID' => 1),
2 => (object)array('id' => 2, 'title' => '测试结果2', 'objectType' => 'program', 'objectID' => 4)
);
$objectIdList = array(1 => 1, 4 => 2);
r(count($searchTest->checkProgramPrivTest($results, $objectIdList, '1,2,3'))) && p() && e(1);
// 测试步骤4:空的对象ID列表,应该返回原始结果
$results = array(
1 => (object)array('id' => 1, 'title' => '测试结果1', 'objectType' => 'program', 'objectID' => 1),
2 => (object)array('id' => 2, 'title' => '测试结果2', 'objectType' => 'program', 'objectID' => 2),
3 => (object)array('id' => 3, 'title' => '测试结果3', 'objectType' => 'program', 'objectID' => 3)
);
$objectIdList = array();
r(count($searchTest->checkProgramPrivTest($results, $objectIdList, '1,2,3'))) && p() && e(3);
// 测试步骤5:不存在的项目集ID,应该移除对应结果
$results = array(
1 => (object)array('id' => 1, 'title' => '测试结果1', 'objectType' => 'program', 'objectID' => 1),
2 => (object)array('id' => 2, 'title' => '测试结果2', 'objectType' => 'program', 'objectID' => 999)
);
$objectIdList = array(1 => 1, 999 => 2);
r(count($searchTest->checkProgramPrivTest($results, $objectIdList, '1,2,3'))) && p() && e(1);