Merge branch 'master_xieqiyu_unittest' into 'master'

Master xieqiyu unittest

See merge request easycorp/zentaopms!3395
This commit is contained in:
王怡栋
2022-05-13 06:40:09 +00:00
18 changed files with 570 additions and 0 deletions
+240
View File
@@ -0,0 +1,240 @@
<?php
class searchTest
{
public function __construct()
{
global $tester;
$this->objectModel = $tester->loadModel('search');
}
/**
* Test get query.
*
* @param int $queryID
* @access public
* @return void
*/
public function getQueryTest($queryID)
{
$objects = $this->objectModel->getQuery($queryID);
global $tester;
$objectType = $objects->module;
if($objects->module == 'executionStory') $objectType = 'story';
if($objects->module == 'projectBuild') $objectType = 'build';
if($objects->module == 'executionBuild') $objectType = 'build';
$table = $tester->config->objectTables[$objectType];
$objects->queryCount = $tester->dao->select('count(*) as count')->from($table)->where($objects->sql)->fetch('count');
if(dao::isError()) return dao::getError();
return $objects;
}
/**
* Test get by ID.
*
* @param int $queryID
* @access public
* @return void
*/
public function getByIDTest($queryID)
{
$objects = $this->objectModel->getByID($queryID);
if(dao::isError()) return dao::getError();
return $objects;
}
/**
* Test delete query.
*
* @param int $queryID
* @access public
* @return void
*/
public function deleteQueryTest($queryID)
{
global $tester;
$this->objectModel->deleteQuery($queryID);
if(dao::isError()) return dao::getError();
$count = $tester->dao->select('count(*) as count')->from(TABLE_USERQUERY)->fetch('count');
if(dao::isError()) return dao::getError();
return $count;
}
/**
* Test get query pairs.
*
* @param int $module
* @access public
* @return void
*/
public function getQueryPairsTest($module)
{
$objects = $this->objectModel->getQueryPairs($module);
if(dao::isError()) return dao::getError();
return $objects;
}
/**
* Test get list.
*
* @param int $keywords
* @param int $type
* @access public
* @return void
*/
public function getListTest($keywords, $type)
{
$result = array();
while(!isset($result['finished']))
{
if(empty($result))
{
$result = $this->objectModel->buildAllIndex();
}
else
{
$result = $this->objectModel->buildAllIndex($result['type'], $result['lastID']);
}
}
$objects = $this->objectModel->getList($keywords, $type);
if(dao::isError()) return dao::getError();
global $tester;
$tester->dao->delete()->from(TABLE_SEARCHINDEX)->exec();
$tester->dao->delete()->from(TABLE_SEARCHDICT)->exec();
return count($objects);
}
/**
* Test save index.
*
* @param int $objectType
* @param int $objectID
* @access public
* @return void
*/
public function saveIndexTest($objectType, $objectID)
{
global $tester;
$tester->dao->delete()->from(TABLE_SEARCHINDEX)->exec();
$tester->dao->delete()->from(TABLE_SEARCHDICT)->exec();
$table = $tester->config->objectTables[$objectType];
$object = $tester->dao->select('*')->from($table)->where('id')->eq($objectID)->fetch();
$object->comment = '';
$objects = $this->objectModel->saveIndex($objectType, $object);
if(dao::isError()) return dao::getError();
$insertedIndex = $tester->dao->select('*')->from(TABLE_SEARCHINDEX)->where('objectType')->eq($objectType)->andWhere('objectID')->eq($objectID)->fetch();
$tester->dao->delete()->from(TABLE_SEARCHINDEX)->exec();
$tester->dao->delete()->from(TABLE_SEARCHDICT)->exec();
if($insertedIndex) return true;
}
/**
* Test save dict.
*
* @param string $word
* @access public
* @return void
*/
public function saveDictTest($word)
{
global $tester;
$tester->dao->delete()->from(TABLE_SEARCHDICT)->exec();
$spliter = $tester->app->loadClass('spliter');
$titleSplited = $spliter->utf8Split($word);
$objects = $this->objectModel->saveDict($titleSplited['dict']);
if(dao::isError()) return dao::getError();
$count = $tester->dao->select("count('*') as count")->from(TABLE_SEARCHDICT)->fetch('count');
$tester->dao->delete()->from(TABLE_SEARCHDICT)->exec();
return $count;
}
/**
* Test decode.
*
* @param int $string
* @access public
* @return void
*/
public function decodeTest($string)
{
$objects = $this->objectModel->decode($string);
if(dao::isError()) return dao::getError();
return $objects;
}
public function getSummaryTest($content, $words)
{
$objects = $this->objectModel->getSummary($content, $words);
if(dao::isError()) return dao::getError();
return $objects;
}
public function checkPrivTest($results)
{
$objects = $this->objectModel->checkPriv($results);
if(dao::isError()) return dao::getError();
return $objects;
}
public function markKeywordsTest($content, $keywords)
{
$objects = $this->objectModel->markKeywords($content, $keywords);
if(dao::isError()) return dao::getError();
return $objects;
}
public function buildAllIndexTest($type = '', $lastID = 0)
{
$objects = $this->objectModel->buildAllIndex($type = '', $lastID = 0);
if(dao::isError()) return dao::getError();
return $objects;
}
public function deleteIndexTest($objectType, $objectID)
{
$objects = $this->objectModel->deleteIndex($objectType, $objectID);
if(dao::isError()) return dao::getError();
return $objects;
}
public function appendFilesTest($object)
{
$objects = $this->objectModel->appendFiles($object);
if(dao::isError()) return dao::getError();
return $objects;
}
}
+1
View File
@@ -82,6 +82,7 @@ function p($keys = '', $delimiter = ',')
if(is_array($_result) and isset($_result['code']) and $_result['code'] == 'fail') return print(">> " . (string) $_result['message'] . "\n");
/* Print $_result. */
if(!$keys and is_array($_result)) return print(">> " . (string)$_result[''] . "\n");
if(!$keys or !is_array($_result) and !is_object($_result)) return print(">> " . (string) $_result . "\n");
$parts = explode(';', $keys);
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->appendFiles();
cid=1
pid=1
*/
$search = new searchTest();
r($search->appendFilesTest()) && p() && e();
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->buildAllIndex();
cid=1
pid=1
*/
$search = new searchTest();
r($search->buildAllIndexTest()) && p() && e();
+20
View File
@@ -0,0 +1,20 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
su('admin');
/**
title=测试 searchModel->buildIndexQuery();
cid=1
pid=1
*/
global $tester;
$search = $tester->loadModel('search');
r($search->buildIndexQuery('program')->get()) && p() && e("SELECT t1.* FROM `zt_project` AS t1 WHERE 1 AND type = 'program' AND t1.deleted = '0'"); //构建未删除项目集的sql语句
r($search->buildIndexQuery('story')->get()) && p() && e("SELECT DISTINCT t1.*,t2.spec,t2.verify FROM `zt_story` AS t1 LEFT JOIN `zt_storyspec` AS t2 ON t1.id=t2.story WHERE t1.deleted = '0' AND t1.version=t2.version"); //构建需求的sql语句
r($search->buildIndexQuery('doc')->get()) && p() && e("SELECT DISTINCT t1.*,t2.content,t2.digest FROM `zt_doc` AS t1 LEFT JOIN `zt_doccontent` AS t2 ON t1.id=t2.doc WHERE t1.deleted = '0' AND t1.version=t2.version"); //构建需求的sql语句
r($search->buildIndexQuery('project', false)->get()) && p() && e("SELECT t1.* FROM `zt_project` AS t1 WHERE 1 AND type = 'project'"); //构建查询所有项目的sql语句
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->checkPriv();
cid=1
pid=1
*/
$search = new searchTest();
r($search->checkPrivTest()) && p() && e();
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->decode();
cid=1
pid=1
*/
$search = new searchTest();
r($search->decodeTest()) && p() && e();
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->deleteIndex();
cid=1
pid=1
*/
$search = new searchTest();
r($search->deleteIndexTest()) && p() && e();
+22
View File
@@ -0,0 +1,22 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->deleteQuery();
cid=1
pid=1
*/
$search = new searchTest();
$queryIDList = array('1', '2');
r($search->deleteQueryTest($queryIDList[0])) && p() && e('5'); //测试删除ID为1的数据后剩余的数量
r($search->deleteQueryTest($queryIDList[1])) && p() && e('4'); //测试删除ID为2的数据后剩余的数量
system("./ztest init");
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->getByID();
cid=1
pid=1
*/
$search = new searchTest();
$queryIDList = array('1', '2', '3', '4', '5', '6');
r($search->getByIDTest($queryIDList[0])) && p('module,title') && e('task,任务查询测试条件'); //查询ID为1的模块名及条件名
r($search->getByIDTest($queryIDList[1])) && p('module,title') && e('executionStory,需求查找条件'); //查询ID为2的模块名及条件名
r($search->getByIDTest($queryIDList[2])) && p('module,title') && e('user,用户测试条件'); //查询ID为3的模块名及条件名
r($search->getByIDTest($queryIDList[3])) && p('module,title') && e('projectBuild,项目版本搜索'); //查询ID为4的模块名及条件名
r($search->getByIDTest($queryIDList[4])) && p('module,title') && e('executionBuild,执行版本搜索'); //查询ID为5的模块名及条件名
r($search->getByIDTest($queryIDList[5])) && p('module,title') && e('design,设计搜索'); //查询ID为6的模块名及条件名
+56
View File
@@ -0,0 +1,56 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->getList();
cid=1
pid=1
*/
$search = new searchTest();
$searchType = array();
$searchType[] = 'all';
$searchType[] = array('task');
$searchType[] = array('bug');
$searchType[] = array('case');
$searchType[] = array('doc');
$searchType[] = array('todo');
$searchType[] = array('build');
$searchType[] = array('caselib');
$searchType[] = array('product');
$searchType[] = array('release');
$searchType[] = array('testtask');
$searchType[] = array('testsuite');
$searchType[] = array('testreport');
$searchType[] = array('productplan');
$searchType[] = array('program');
$searchType[] = array('project');
$searchType[] = array('execution');
$searchType[] = array('story');
$searchWords = array('任务','bug','用例','文档','待办','版本','用例库','产品','发布','测试单','测试套件','测试报告','计划','项目集','项目','迭代','需求');
r($search->getListTest($searchWords[0], $searchType[0])) && p() && e('1246'); //测试在全部类型中搜索带有任务字体的条数
r($search->getListTest($searchWords[0], $searchType[1])) && p() && e('910'); //测试在任务类型中搜索带有任务字体的条数
r($search->getListTest($searchWords[1], $searchType[2])) && p() && e('239'); //测试在bug类型中搜索带有bug字体的条数
r($search->getListTest($searchWords[2], $searchType[3])) && p() && e('208'); //测试在用例类型中搜索带有用例字体的条数
r($search->getListTest($searchWords[3], $searchType[4])) && p() && e('900'); //测试在文档类型中搜索带有文档字体的条数
r($search->getListTest($searchWords[4], $searchType[5])) && p() && e('1680'); //测试在待办类型中搜索带有待办字体的条数
r($search->getListTest($searchWords[5], $searchType[6])) && p() && e('20'); //测试在版本类型中搜索带有版本字体的条数
r($search->getListTest($searchWords[6], $searchType[7])) && p() && e('0'); //测试在用例库类型中搜索带有用例库字体的条数
r($search->getListTest($searchWords[7], $searchType[8])) && p() && e('120'); //测试在产品类型中搜索带有产品字体的条数
r($search->getListTest($searchWords[8], $searchType[9])) && p() && e('10'); //测试在发布类型中搜索带有发布字体的条数
r($search->getListTest($searchWords[9], $searchType[10])) && p() && e('100'); //测试在测试单类型中搜索带有测试单字体的条数
r($search->getListTest($searchWords[10], $searchType[11])) && p() && e('201'); //测试在测试套件类型中搜索带有测试套件字体的条数
r($search->getListTest($searchWords[11], $searchType[12])) && p() && e('10'); //测试在测试报告类型中搜索带有测试报告字体的条数
r($search->getListTest($searchWords[12], $searchType[13])) && p() && e('0'); //测试在计划类型中搜索带有计划字体的条数
r($search->getListTest($searchWords[13], $searchType[14])) && p() && e('10'); //测试在项目集类型中搜索带有项目集字体的条数
r($search->getListTest($searchWords[14], $searchType[15])) && p() && e('110'); //测试在项目类型中搜索带有项目字体的条数
r($search->getListTest($searchWords[15], $searchType[16])) && p() && e('630'); //测试在迭代类型中搜索带有迭代字体的条数
r($search->getListTest($searchWords[16], $searchType[17])) && p() && e('450'); //测试在需求类型中搜索带有需求字体的条数
+24
View File
@@ -0,0 +1,24 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->getQuery();
cid=1
pid=1
*/
$search = new searchTest();
$queryIDList = array('1', '2', '3', '4', '5', '6');
r($search->getQueryTest($queryIDList[0])) && p('title,queryCount') && e('任务查询测试条件,27'); //查询ID为1的搜索条件名称及查询数量
r($search->getQueryTest($queryIDList[1])) && p('title,queryCount') && e('需求查找条件,1'); //查询ID为2的搜索条件名称及查询数量
r($search->getQueryTest($queryIDList[2])) && p('title,queryCount') && e('用户测试条件,1'); //查询ID为3的搜索条件名称及查询数量
r($search->getQueryTest($queryIDList[3])) && p('title,queryCount') && e('项目版本搜索,1'); //查询ID为4的搜索条件名称及查询数量
r($search->getQueryTest($queryIDList[4])) && p('title,queryCount') && e('执行版本搜索,1'); //查询ID为5的搜索条件名称及查询数量
r($search->getQueryTest($queryIDList[5])) && p('title,queryCount') && e('设计搜索,32'); //查询ID为6的搜索条件名称及查询数量
+25
View File
@@ -0,0 +1,25 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->getQueryPairs();
cid=1
pid=1
*/
$search = new searchTest();
$queryIDList = array('task','executionStory','user','projectBuild','executionBuild','design','nullValue');
r($search->getQueryPairsTest($queryIDList[0])) && p('1') && e('任务查询测试条件'); //查询module为task的键值对
r($search->getQueryPairsTest($queryIDList[1])) && p('2') && e('需求查找条件'); //查询module为executionStory的键值对
r($search->getQueryPairsTest($queryIDList[2])) && p('3') && e('用户测试条件'); //查询module为user的键值对
r($search->getQueryPairsTest($queryIDList[3])) && p('4') && e('项目版本搜索'); //查询module为projectBuild的键值对
r($search->getQueryPairsTest($queryIDList[4])) && p('5') && e('执行版本搜索'); //查询module为executionBuild的键值对
r($search->getQueryPairsTest($queryIDList[5])) && p('6') && e('设计搜索'); //查询module为design的键值对
r($search->getQueryPairsTest($queryIDList[6])) && p('') && e('我的查询'); //查询module不存在的情况
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->getSummary();
cid=1
pid=1
*/
$search = new searchTest();
r($search->getSummaryTest()) && p() && e();
+17
View File
@@ -0,0 +1,17 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->markKeywords();
cid=1
pid=1
*/
$search = new searchTest();
r($search->markKeywordsTest()) && p() && e();
+18
View File
@@ -0,0 +1,18 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->saveDict();
cid=1
pid=1
*/
$search = new searchTest();
r($search->saveDictTest('我是标题')) && p() && e('4'); //创建我是标题的搜索索引
r($search->saveDictTest('!@#$%^&*()_+')) && p() && e('0'); //创建特殊字符的搜索索引
+18
View File
@@ -0,0 +1,18 @@
#!/usr/bin/env php
<?php
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
include dirname(dirname(dirname(__FILE__))) . '/class/search.class.php';
su('admin');
/**
title=测试 searchModel->saveIndex();
cid=1
pid=1
*/
$search = new searchTest();
r($search->saveIndexTest('bug', 10)) && p() && e('1'); //创建ID为10的bug的索引
r($search->saveIndexTest('task', 10)) && p() && e('1'); //创建ID为10的任务的索引
+3
View File
@@ -141,6 +141,9 @@ switch($argv[1])
case 'stakeholder':
ztfRun('model/stakeholder');
break;
case 'search':
ztfRun('model/search');
break;
case 'story':
ztfRun('model/story');
break;