diff --git a/module/testcase/model.php b/module/testcase/model.php
index 0fea861510..f5c10aab36 100644
--- a/module/testcase/model.php
+++ b/module/testcase/model.php
@@ -1247,9 +1247,9 @@ class testcaseModel extends model
else
{
/* Compare every step. */
- foreach($oldStep as $id => $oldStep)
+ foreach($oldStep as $id => $step)
{
- if(trim($oldStep->desc) != trim($steps[$id]->desc) or trim($oldStep->expect) != $steps[$id]->expect)
+ if(trim($step->desc) != trim($steps[$id]->desc) or trim($step->expect) != $steps[$id]->expect)
{
$stepChanged = true;
break;
@@ -1388,10 +1388,14 @@ class testcaseModel extends model
if($module != 'ditto') $prevModule = $module;
if($module == 'ditto') $data->module[$i] = $prevModule;
}
- foreach($data->branch as $i => $branch)
+
+ if(isset($data->branch))
{
- if($branch != 'ditto') $prevBranch = $branch;
- if($branch == 'ditto') $data->branch[$i] = $prevBranch;
+ foreach($data->branch as $i => $branch)
+ {
+ if($branch != 'ditto') $prevBranch = $branch;
+ if($branch == 'ditto') $data->branch[$i] = $prevBranch;
+ }
}
$libCases = $this->dao->select('*')->from(TABLE_CASE)->where('deleted')->eq(0)->andWhere('id')->in($data->caseIdList)->fetchAll('id');
@@ -1889,7 +1893,7 @@ class testcaseModel extends model
if($methodName == 'review')
{
- $status = zget($case, 'status', $status);
+ $status = zget($case, 'status', '');
if($this->post->result == 'pass') return 'normal';
diff --git a/test/class/testcase.class.php b/test/class/testcase.class.php
index 37d196839d..b1761793be 100644
--- a/test/class/testcase.class.php
+++ b/test/class/testcase.class.php
@@ -51,15 +51,6 @@ class testcaseTest
return $objects;
}
- public function getProjectCasesTest($projectID, $orderBy = 'id_desc', $pager = null, $browseType = '')
- {
- $objects = $this->objectModel->getProjectCases($projectID, $orderBy = 'id_desc', $pager = null, $browseType = '');
-
- if(dao::isError()) return dao::getError();
-
- return $objects;
- }
-
/**
* Test get execution cases.
*
@@ -134,9 +125,19 @@ class testcaseTest
return $objects;
}
- public function getTestCasesTest($productID, $branch, $browseType, $queryID, $moduleID, $sort, $pager, $auto = 'no')
+ /**
+ * Test get test cases.
+ *
+ * @param int $productID
+ * @param string $browseType
+ * @param int $queryID
+ * @param string $auto
+ * @access public
+ * @return array
+ */
+ public function getTestCasesTest($productID, $browseType, $queryID, $auto = 'no')
{
- $objects = $this->objectModel->getTestCases($productID, $branch, $browseType, $queryID, $moduleID, $sort, $pager, $auto = 'no');
+ $objects = $this->objectModel->getTestCases($productID, 0, $browseType, $queryID, $moduleID, 'id_desc', null, $auto);
if(dao::isError()) return dao::getError();
@@ -182,6 +183,20 @@ class testcaseTest
return $objects;
}
+ /**
+ * Test get cases by type.
+ *
+ * @param int $productID
+ * @param int $branch
+ * @param string $type
+ * @param string $status
+ * @param int $moduleID
+ * @param string $orderBy
+ * @param object $pager
+ * @param string $auto
+ * @access public
+ * @return int
+ */
public function getByStatusTest($productID = 0, $branch = 0, $type = 'all', $status = 'all', $moduleID = 0, $orderBy = 'id_desc', $pager = null, $auto = 'no')
{
$objects = $this->objectModel->getByStatus($productID, $branch, $type, $status, $moduleID, $orderBy, $pager, $auto);
@@ -191,6 +206,13 @@ class testcaseTest
return count($objects);
}
+ /**
+ * Test get stories' cases.
+ *
+ * @param int $storyID
+ * @access public
+ * @return array
+ */
public function getStoryCasesTest($storyID)
{
$objects = $this->objectModel->getStoryCases($storyID);
@@ -216,19 +238,64 @@ class testcaseTest
return $counts;
}
- public function updateTest($caseID)
+ /**
+ * Test update a case.
+ *
+ * @param array $param
+ * @access public
+ * @return int
+ */
+ public function updateTest($param = array())
{
- $objects = $this->objectModel->update($caseID);
+ $caseId = 1;
+ $case = $this->objectModel->getById($caseId);
+
+ $_POST['title'] = $case->title;
+ $_POST['color'] = $case->color;
+ $_POST['precondition'] = $case->precondition;
+ $_POST['steps'] = array('用例步骤描述1');
+ $_POST['stepType'] = array('step');
+ $_POST['expects'] = array('这是用例预期结果1');
+ $_POST['comment'] = '';
+ $_POST['labels'] = '';
+ $_POST['lastEditedDate'] = $case->lastEditedDate;
+ $_POST['product'] = $case->product;
+ $_POST['module'] = $case->module;
+ $_POST['story'] = $case->story;
+ $_POST['type'] = $case->type;
+ $_POST['stage'] = $case->stage;
+ $_POST['pri'] = $case->pri;
+ $_POST['status'] = $case->status;
+ $_POST['keywords'] = $case->keywords;
+
+ foreach($param as $field => $value) $_POST[$field] = $value;
+
+ $change = $this->objectModel->update('1');
+ if($change == array()) $change = '没有数据更新';
+
+ unset($_POST);
if(dao::isError()) return dao::getError();
- return $objects;
+ return $change;
}
- public function reviewTest($caseID)
+ /**
+ * Test review case.
+ *
+ * @param int $caseID
+ * @param object $case
+ * @access public
+ * @return array
+ */
+ public function reviewTest($caseID, $case)
{
+ foreach($case as $field => $value) $_POST[$field] = $value;
+
$objects = $this->objectModel->review($caseID);
+ unset($_POST);
+
if(dao::isError()) return dao::getError();
return $objects;
@@ -251,15 +318,13 @@ class testcaseTest
return $objects;
}
- public function getCases2LinkTest($caseID, $browseType = 'bySearch', $queryID = 0)
- {
- $objects = $this->objectModel->getCases2Link($caseID, $browseType = 'bySearch', $queryID = 0);
-
- if(dao::isError()) return dao::getError();
-
- return $objects;
- }
-
+ /**
+ * Test batch update cases.
+ *
+ * @param array $param
+ * @access public
+ * @return array
+ */
public function batchUpdateTest($param = array())
{
$batchUpdateField['caseIDList'] = array('1' => 1, '2' => 2, '3' => 3, '4' => 4);
@@ -343,22 +408,69 @@ class testcaseTest
return $objects;
}
- public function joinStepTest($steps)
+ /**
+ * Test join steps to a string, thus can diff them.
+ *
+ * @param array $stepIDList
+ * @access public
+ * @return string
+ */
+ public function joinStepTest($stepIDList)
{
- $objects = $this->objectModel->joinStep($steps);
+ global $tester;
+ $steps = $tester->dao->select('*')->from(TABLE_CASESTEP)->where('id')->in($stepIDList)->fetchAll();
+
+ $string = $this->objectModel->joinStep($steps);
if(dao::isError()) return dao::getError();
- return $objects;
+ $string = str_replace("\n", ' ', $string);
+ return $string;
}
- public function createFromImportTest($productID, $branch = 0)
+ /**
+ * Test create from import.
+ *
+ * @param int $productID
+ * @param array $param
+ * @access public
+ * @return string
+ */
+ public function createFromImportTest($productID, $param = array())
{
- $objects = $this->objectModel->createFromImport($productID, $branch = 0);
+ global $tester;
+
+ $_POST['product'] = array('1' => '1', '2' => '1');
+ $_POST['keywords'] = array('1' => '这是关键词1', '2' => '这是关键词2');
+ $_POST['title'] = array('1' => '导入测试用例1', '2' => '导入测试用例2');
+ $_POST['module'] = array('1' => '0', '2' => '0');
+ $_POST['story'] = array('1' => '2', '2' => '2');
+ $_POST['pri'] = array('1' => '1', '2' => '2');
+ $_POST['type'] = array('1' => 'performance', '2' => 'feature');
+ $_POST['stage'] = array('1' => array('0' => 'feature'), '2' => array('0' => 'unittest'));
+ $_POST['precondition'] = array('1' => '这是前置条件1', '2' => '这是前置条件2');
+ $_POST['stepType'] = array('1' => array('1' => 'step'), '2' => array('1' => 'step'));
+ $_POST['desc'] = array('1' => array('1' => '用例步骤描述1'), '2' => array('1' => '用例步骤描述2'));
+ $_POST['expect'] = array('1' => array('1' => '这是用例预期结果1'), '2' => array('1' => '这是用例预期结果2'));
+ $_POST['isEndPage'] = '1';
+ $_POST['pagerID'] = '1';
+
+ foreach($param as $field => $value) $_POST[$field] = $value;
+
+ $fileName = __DIR__ . DS . 'a.txt';
+ fopen($fileName, 'a');
+ $tester->session->fileImport = $fileName;
+
+ $this->objectModel->createFromImport($productID, 0);
+
+
+ unset($_POST);
if(dao::isError()) return dao::getError();
- return $objects;
+ $objects = $tester->dao->select('*')->from(TABLE_CASE)->where('product')->eq(1)->andWhere('lib')->eq(0)->markLeft()->andWhere('id')->gt(560)->orWhere('id')->in('1,2')->markRight()->fetchAll('title');
+ $titles = implode(',', array_keys($objects));
+ return $titles;
}
/**
@@ -377,21 +489,27 @@ class testcaseTest
return $object;
}
- public function importFromLibTest($productID)
+ /**
+ * Test import case from Lib.
+ *
+ * @param int $productID
+ * @param array $caseIdList
+ * @access public
+ * @return array
+ */
+ public function importFromLibTest($productID, $caseIdList = array())
{
- $objects = $this->objectModel->importFromLib($productID);
+ $_POST['module'] = array('410' => 0, '409' => 'ditto', '408' => 'ditto', '407' => 'ditto', '406' => 'ditto', '405' => 'ditto', '404' => 'ditto', '403' => 'ditto', '402' => 'ditto', '401' => 'ditto');
+ $_POST['caseIdList'] = $caseIdList;
- if(dao::isError()) return dao::getError();
+ $this->objectModel->importFromLib($productID);
- return $objects;
- }
-
- public function buildSearchFormTest($productID, $products, $queryID, $actionURL, $projectID = 0)
- {
- $objects = $this->objectModel->buildSearchForm($productID, $products, $queryID, $actionURL, $projectID = 0);
+ unset($_POST);
if(dao::isError()) return dao::getError();
+ global $tester;
+ $objects = $tester->dao->select('*')->from(TABLE_CASE)->where('fromCaseID')->in($caseIdList)->orderBy('id_asc')->fetchAll();
return $objects;
}
@@ -427,29 +545,106 @@ class testcaseTest
return $object ? 1 : 2;
}
- public function syncCase2ProjectTest($case, $caseID)
+ /**
+ * Test sync case to project.
+ *
+ * @param int $caseID
+ * @access public
+ * @return int
+ */
+ public function syncCase2ProjectTest($caseID)
{
- $objects = $this->objectModel->syncCase2Project($case, $caseID);
+ global $tester;
+ $tester->dao->delete()->from(TABLE_PROJECTCASE)->where('`case`')->eq($caseID)->exec();
+ $case = $this->objectModel->getByID($caseID);
+ $this->objectModel->syncCase2Project($case, $caseID);
if(dao::isError()) return dao::getError();
+ $objects = $tester->dao->select('*')->from(TABLE_PROJECTCASE)->where('`case`')->eq($caseID)->fetchAll();
+ return count($objects);
+ }
+
+ /**
+ * Test deal with the relationship between the case and project when edit the case.
+ *
+ * @param int $caseID
+ * @param string $objectType
+ * @param int $objectID
+ * @access public
+ * @return array
+ */
+ public function updateCase2ProjectTest($caseID, $objectType, $objectID)
+ {
+ $oldCase = $this->objectModel->getByID($caseID);
+
+ $case = new stdclass();
+ $case->title = $oldCase->title;
+ $case->color = $oldCase->color;
+ $case->precondition = $oldCase->precondition;
+ $case->lastEditedDate = $oldCase->lastEditedDate;
+ $case->product = $objectType == 'product' ? $objectID : $oldCase->product;
+ $case->module = $oldCase->module;
+ $case->story = $objectType == 'story' ? $objectID : $oldCase->story;
+ $case->type = $oldCase->type;
+ $case->stage = $oldCase->stage;
+ $case->pri = $oldCase->pri;
+ $case->status = $oldCase->status;
+ $case->keywords = $oldCase->keywords;
+ $case->version = $oldCase->version + 1;
+ $case->linkCase = $oldCase->linkCase;
+ $case->lastEditedBy = $oldCase->lastEditedBy;
+ $case->branch = $oldCase->branch;
+
+ $this->objectModel->updateCase2Project($oldCase, $case, $caseID);
+
+ if(dao::isError()) return dao::getError();
+
+ global $tester;
+ $objects = $tester->dao->select('*')->from(TABLE_PROJECTCASE)->where('`case`')->eq($caseID)->fetchAll();
return $objects;
}
- public function updateCase2ProjectTest($oldCase, $case, $caseID)
+ /**
+ * Test get status for different method.
+ *
+ * @param string $methodName
+ * @param object $case
+ * @param array $param
+ * @access public
+ * @return array
+ */
+ public function getStatusTest($methodName, $case = null, $param = array())
{
- $objects = $this->objectModel->updateCase2Project($oldCase, $case, $caseID);
+ if($methodName == 'update')
+ {
+ $case = $this->objectModel->getByID(1);
+ $_POST['title'] = $case->title;
+ $_POST['color'] = $case->color;
+ $_POST['precondition'] = $case->precondition;
+ $_POST['steps'] = array('用例步骤描述1');
+ $_POST['stepType'] = array('step');
+ $_POST['expects'] = array('这是用例预期结果1');
+ $_POST['comment'] = '';
+ $_POST['labels'] = '';
+ $_POST['lastEditedDate'] = $case->lastEditedDate;
+ $_POST['product'] = $case->product;
+ $_POST['module'] = $case->module;
+ $_POST['story'] = $case->story;
+ $_POST['type'] = $case->type;
+ $_POST['stage'] = $case->stage;
+ $_POST['pri'] = $case->pri;
+ $_POST['status'] = $case->status;
+ $_POST['keywords'] = $case->keywords;
- if(dao::isError()) return dao::getError();
+ foreach($param as $field => $value) $_POST[$field] = $value;
+ }
- return $objects;
- }
+ $objects = $this->objectModel->getStatus($methodName, $case);
- public function getStatusTest($methodName, $case = null)
- {
- $objects = $this->objectModel->getStatus($methodName, $case = null);
+ unset($_POST);
- if(dao::isError()) return dao::getError();
+ if(dao::isError()) return dao::getError()[0];
return $objects;
}
diff --git a/test/model/action/getlist.php b/test/model/action/getlist.php
index b5d7b47d0f..ee81c8740e 100755
--- a/test/model/action/getlist.php
+++ b/test/model/action/getlist.php
@@ -17,42 +17,42 @@ $objectId = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,
$action = new actionTest();
-r($action->getListTest($objectType[0], $objectId[0])) && p('id,actor,extra') && e("1,admin,1"); // 测试获取objectType product objectId 1的动态信息
-r($action->getListTest($objectType[1], $objectId[1])) && p('id,actor,extra') && e("2,dev17,1"); // 测试获取objectType story objectId 2的动态信息
-r($action->getListTest($objectType[2], $objectId[2])) && p('id,actor,extra') && e("3,test18,1"); // 测试获取objectType productplan objectId 3的动态信息
-r($action->getListTest($objectType[3], $objectId[3])) && p('id,actor,extra') && e("4,admin,1"); // 测试获取objectType release objectId 4的动态信息
-r($action->getListTest($objectType[4], $objectId[4])) && p('id,actor,extra') && e("5,dev17,11"); // 测试获取objectType project objectId 5的动态信息
-r($action->getListTest($objectType[5], $objectId[5])) && p('id,actor,extra') && e("6,test18,1"); // 测试获取objectType task objectId 6的动态信息
-r($action->getListTest($objectType[6], $objectId[6])) && p('id,actor,extra') && e("7,admin,1"); // 测试获取objectType build objectId 7的动态信息
-r($action->getListTest($objectType[7], $objectId[7])) && p('id,actor,extra') && e("8,dev17,1"); // 测试获取objectType bug objectId 8的动态信息
-r($action->getListTest($objectType[8], $objectId[8])) && p('id,actor,extra') && e("9,test18,2"); // 测试获取objectType testcase objectId 9的动态信息
-r($action->getListTest($objectType[9], $objectId[9])) && p('id,actor,extra') && e("10,admin,1"); // 测试获取objectType case objectId 10的动态信息
-r($action->getListTest($objectType[10], $objectId[10])) && p('id,actor,extra') && e("11,dev17,1"); // 测试获取objectType testtask objectId 11的动态信息
-r($action->getListTest($objectType[11], $objectId[11])) && p('id,actor,extra') && e("12,test18,1"); // 测试获取objectType user objectId 12的动态信息
-r($action->getListTest($objectType[12], $objectId[12])) && p('id,actor,extra') && e("13,admin,1"); // 测试获取objectType doc objectId 13的动态信息
-r($action->getListTest($objectType[13], $objectId[13])) && p('id,actor,extra') && e("14,dev17,1"); // 测试获取objectType doclib objectId 14的动态信息
-r($action->getListTest($objectType[14], $objectId[14])) && p('id,actor,extra') && e("15,test18,1"); // 测试获取objectType todo objectId 15的动态信息
-r($action->getListTest($objectType[15], $objectId[15])) && p('id,actor,extra') && e("16,admin,1"); // 测试获取objectType branch objectId 16的动态信息
-r($action->getListTest($objectType[16], $objectId[16])) && p('id,actor,extra') && e("17,dev17,1"); // 测试获取objectType module objectId 17的动态信息
+r($action->getListTest($objectType[0], $objectId[0])) && p('id,actor,extra') && e("1,admin,1"); // 测试获取objectType product objectId 1的动态信息
+r($action->getListTest($objectType[1], $objectId[1])) && p('id,actor,extra') && e("2,dev17,1"); // 测试获取objectType story objectId 2的动态信息
+r($action->getListTest($objectType[2], $objectId[2])) && p('id,actor,extra') && e("3,test18,1"); // 测试获取objectType productplan objectId 3的动态信息
+r($action->getListTest($objectType[3], $objectId[3])) && p('id,actor,extra') && e("4,admin,1"); // 测试获取objectType release objectId 4的动态信息
+r($action->getListTest($objectType[4], $objectId[4])) && p('id,actor,extra') && e("5,dev17,11"); // 测试获取objectType project objectId 5的动态信息
+r($action->getListTest($objectType[5], $objectId[5])) && p('id,actor,extra') && e("6,test18,1"); // 测试获取objectType task objectId 6的动态信息
+r($action->getListTest($objectType[6], $objectId[6])) && p('id,actor,extra') && e("7,admin,1"); // 测试获取objectType build objectId 7的动态信息
+r($action->getListTest($objectType[7], $objectId[7])) && p('id,actor,extra') && e("8,dev17,1"); // 测试获取objectType bug objectId 8的动态信息
+r($action->getListTest($objectType[8], $objectId[8])) && p('id,actor,extra') && e("9,test18,2"); // 测试获取objectType testcase objectId 9的动态信息
+r($action->getListTest($objectType[9], $objectId[9])) && p('id,actor,extra') && e("10,admin,1"); // 测试获取objectType case objectId 10的动态信息
+r($action->getListTest($objectType[10], $objectId[10])) && p('id,actor,extra') && e("11,dev17,1"); // 测试获取objectType testtask objectId 11的动态信息
+r($action->getListTest($objectType[11], $objectId[11])) && p('id,actor,extra') && e("12,test18,1"); // 测试获取objectType user objectId 12的动态信息
+r($action->getListTest($objectType[12], $objectId[12])) && p('id,actor,extra') && e("13,admin,1"); // 测试获取objectType doc objectId 13的动态信息
+r($action->getListTest($objectType[13], $objectId[13])) && p('id,actor,extra') && e("14,dev17,1"); // 测试获取objectType doclib objectId 14的动态信息
+r($action->getListTest($objectType[14], $objectId[14])) && p('id,actor,extra') && e("15,test18,1"); // 测试获取objectType todo objectId 15的动态信息
+r($action->getListTest($objectType[15], $objectId[15])) && p('id,actor,extra') && e("16,admin,1"); // 测试获取objectType branch objectId 16的动态信息
+r($action->getListTest($objectType[16], $objectId[16])) && p('id,actor,extra') && e("17,dev17,1"); // 测试获取objectType module objectId 17的动态信息
r($action->getListTest($objectType[17], $objectId[17])) && p('id,actor,extra') && e("18,test18,#1 项目集1"); // 测试获取objectType testsuite objectId 18的动态信息
-r($action->getListTest($objectType[18], $objectId[18])) && p('id,actor,extra') && e("19,admin,1"); // 测试获取objectType caselib objectId 19的动态信息
-r($action->getListTest($objectType[19], $objectId[19])) && p('id,actor,extra') && e("20,dev17,1"); // 测试获取objectType testreport objectId 20的动态信息
-r($action->getListTest($objectType[20], $objectId[20])) && p('id,actor,extra') && e("21,test18,1"); // 测试获取objectType entry objectId 21的动态信息
+r($action->getListTest($objectType[18], $objectId[18])) && p('id,actor,extra') && e("19,admin,1"); // 测试获取objectType caselib objectId 19的动态信息
+r($action->getListTest($objectType[19], $objectId[19])) && p('id,actor,extra') && e("20,dev17,1"); // 测试获取objectType testreport objectId 20的动态信息
+r($action->getListTest($objectType[20], $objectId[20])) && p('id,actor,extra') && e("21,test18,1"); // 测试获取objectType entry objectId 21的动态信息
r($action->getListTest($objectType[21], $objectId[21])) && p('id,actor,extra') && e("22,admin,1"); // 测试获取objectType webhook objectId 22的动态信息
-r($action->getListTest($objectType[22], $objectId[22])) && p('id,actor,extra') && e("23,dev17,1"); // 测试获取objectType review objectId 23的动态信息
-r($action->getListTest($objectType[0], $objectId[23])) && p('id,actor,extra') && e("24,test18,1"); // 测试获取objectType product objectId 24的动态信息
-r($action->getListTest($objectType[1], $objectId[24])) && p('id,actor,extra') && e("25,admin,1"); // 测试获取objectType story objectId 25的动态信息
-r($action->getListTest($objectType[2], $objectId[25])) && p('id,actor,extra') && e("26,dev17,1"); // 测试获取objectType productplan objectId 26的动态信息
-r($action->getListTest($objectType[3], $objectId[26])) && p('id,actor,extra') && e("27,test18,1"); // 测试获取objectType release objectId 27的动态信息
-r($action->getListTest($objectType[4], $objectId[27])) && p('id,actor,extra') && e("28,admin,33"); // 测试获取objectType project objectId 28的动态信息
-r($action->getListTest($objectType[5], $objectId[28])) && p('id,actor,extra') && e("29,dev17,1"); // 测试获取objectType task objectId 29的动态信息
-r($action->getListTest($objectType[6], $objectId[29])) && p('id,actor,extra') && e("30,test18,1"); // 测试获取objectType build objectId 30的动态信息
-r($action->getListTest($objectType[7], $objectId[30])) && p('id,actor,extra') && e("31,admin,1"); // 测试获取objectType bug objectId 31的动态信息
-r($action->getListTest($objectType[8], $objectId[31])) && p('id,actor,extra') && e("32,项目经理17,1"); // 测试获取objectType testcase objectId 32的动态信息
-r($action->getListTest($objectType[9], $objectId[32])) && p('id,actor,extra') && e("33,test18,1"); // 测试获取objectType case objectId 33的动态信息
-r($action->getListTest($objectType[10], $objectId[33])) && p('id,actor,extra') && e("34,admin,1"); // 测试获取objectType testtask objectId 34的动态信息
-r($action->getListTest($objectType[11], $objectId[34])) && p('id,actor,extra') && e("35,dev17,1"); // 测试获取objectType user objectId 35的动态信息
-r($action->getListTest($objectType[12], $objectId[35])) && p('id,actor,extra') && e("36,test18,1"); // 测试获取objectType doc objectId 36的动态信息
-r($action->getListTest($objectType[13], $objectId[36])) && p('id,actor,extra') && e("37,admin,1"); // 测试获取objectType doclib objectId 37的动态信息
-r($action->getListTest($objectType[14], $objectId[37])) && p('id,actor,extra') && e("38,dev17,1"); // 测试获取objectType todo objectId 38的动态信息
+r($action->getListTest($objectType[22], $objectId[22])) && p('id,actor,extra') && e("23,dev17,1"); // 测试获取objectType review objectId 23的动态信息
+r($action->getListTest($objectType[0], $objectId[23])) && p('id,actor,extra') && e("24,test18,1"); // 测试获取objectType product objectId 24的动态信息
+r($action->getListTest($objectType[1], $objectId[24])) && p('id,actor,extra') && e("25,admin,1"); // 测试获取objectType story objectId 25的动态信息
+r($action->getListTest($objectType[2], $objectId[25])) && p('id,actor,extra') && e("26,dev17,1"); // 测试获取objectType productplan objectId 26的动态信息
+r($action->getListTest($objectType[3], $objectId[26])) && p('id,actor,extra') && e("27,test18,1"); // 测试获取objectType release objectId 27的动态信息
+r($action->getListTest($objectType[4], $objectId[27])) && p('id,actor,extra') && e("28,admin,33"); // 测试获取objectType project objectId 28的动态信息
+r($action->getListTest($objectType[5], $objectId[28])) && p('id,actor,extra') && e("29,dev17,1"); // 测试获取objectType task objectId 29的动态信息
+r($action->getListTest($objectType[6], $objectId[29])) && p('id,actor,extra') && e("30,test18,1"); // 测试获取objectType build objectId 30的动态信息
+r($action->getListTest($objectType[7], $objectId[30])) && p('id,actor,extra') && e("31,admin,1"); // 测试获取objectType bug objectId 31的动态信息
+r($action->getListTest($objectType[8], $objectId[31])) && p('id,actor,extra') && e("32,项目经理17,1"); // 测试获取objectType testcase objectId 32的动态信息
+r($action->getListTest($objectType[9], $objectId[32])) && p('id,actor,extra') && e("33,test18,1"); // 测试获取objectType case objectId 33的动态信息
+r($action->getListTest($objectType[10], $objectId[33])) && p('id,actor,extra') && e("34,admin,1"); // 测试获取objectType testtask objectId 34的动态信息
+r($action->getListTest($objectType[11], $objectId[34])) && p('id,actor,extra') && e("35,dev17,1"); // 测试获取objectType user objectId 35的动态信息
+r($action->getListTest($objectType[12], $objectId[35])) && p('id,actor,extra') && e("36,test18,1"); // 测试获取objectType doc objectId 36的动态信息
+r($action->getListTest($objectType[13], $objectId[36])) && p('id,actor,extra') && e("37,admin,1"); // 测试获取objectType doclib objectId 37的动态信息
+r($action->getListTest($objectType[14], $objectId[37])) && p('id,actor,extra') && e("38,dev17,1"); // 测试获取objectType todo objectId 38的动态信息
r($action->getListTest($objectType[15], $objectId[38])) && p('id,actor,extra') && e("39,test18,项目版本版本1"); // 测试获取objectType branch objectId 39的动态信息
diff --git a/test/model/testcase/createfromimport.php b/test/model/testcase/createfromimport.php
new file mode 100755
index 0000000000..0f47224321
--- /dev/null
+++ b/test/model/testcase/createfromimport.php
@@ -0,0 +1,25 @@
+#!/usr/bin/env php
+createFromImport();
+cid=1
+pid=1
+
+*/
+
+$productID = 1;
+
+$param1 = array('id' => array('1' => 1, '2' => 2), 'title' => array('1' => '导入覆盖的用例1', '2' => '导入覆盖的用例2'), 'insert' => '0');
+$param2 = array('id' => array('1' => 1, '2' => 2), 'title' => array('1' => '导入插入的用例1', '2' => '导入插入的用例2'), 'insert' => '1');
+
+$testcase = new testcaseTest();
+
+r($testcase->createFromImportTest($productID)) && p() && e('这个是测试用例1,这个是测试用例2,导入测试用例1,导入测试用例2'); // 测试直接导入数据
+r($testcase->createFromImportTest($productID, $param1)) && p() && e('导入覆盖的用例1,导入覆盖的用例2,导入测试用例1,导入测试用例2'); // 测试导入数据覆盖原有数据
+r($testcase->createFromImportTest($productID, $param2)) && p() && e('导入覆盖的用例1,导入覆盖的用例2,导入测试用例1,导入测试用例2,导入插入的用例1,导入插入的用例2'); // 测试导入数据不覆盖原有数据
+system("./ztest init");
diff --git a/test/model/testcase/getstatus.php b/test/model/testcase/getstatus.php
new file mode 100755
index 0000000000..63721cd77c
--- /dev/null
+++ b/test/model/testcase/getstatus.php
@@ -0,0 +1,32 @@
+#!/usr/bin/env php
+getStatus();
+cid=1
+pid=1
+
+*/
+
+$typeList = array('create', 'review', 'update');
+
+$case1 = new stdclass();
+$case1->status = 'pass';
+
+$case2 = new stdclass();
+$case2->status = 'clarify';
+
+$case = null;
+$param1 = array('lastEditedDate' => '2022-03-04 00:00:00');
+
+$testcase = new testcaseTest();
+
+r($testcase->getStatusTest($typeList[0])) && p() && e('normal'); // 测试获取create的状态
+r($testcase->getStatusTest($typeList[1], $case1)) && p() && e('pass'); // 测试获取review pass 的状态
+r($testcase->getStatusTest($typeList[1], $case2)) && p() && e('clarify'); // 测试获取review clarify 的状态
+r($testcase->getStatusTest($typeList[2], $case)) && p('1') && e('wait'); // 测试获取update的状态
+r($testcase->getStatusTest($typeList[2], $case, $param1)) && p() && e('该记录可能已经被改动。请刷新页面重新编辑!'); // 测试获取update 别人变更 的状态
diff --git a/test/model/testcase/gettestcases.php b/test/model/testcase/gettestcases.php
new file mode 100755
index 0000000000..aaf5649a36
--- /dev/null
+++ b/test/model/testcase/gettestcases.php
@@ -0,0 +1,45 @@
+#!/usr/bin/env php
+getTestCases();
+cid=1
+pid=1
+
+*/
+
+$productID = array('1', '2', '3', '4', '5');
+$browseType = array('all', 'wait', 'bymodule', 'needconfirm', 'bysuite');
+$suiteID = array('1', '3', '5', '7', '9');
+
+$testcase = new testcaseTest();
+
+r($testcase->getTestCasesTest($productID[0], $browseType[0], $suiteID[0])) && p('1:title;2:title;3:title;4:title') && e('这个是测试用例1;这个是测试用例2;这个是测试用例3;这个是测试用例4'); // 测试查询产品1 suiteID 1 browseType all 的测试用例
+r($testcase->getTestCasesTest($productID[0], $browseType[1], $suiteID[0])) && p('1:title') && e('这个是测试用例1'); // 测试查询产品1 suiteID 1 browseType wait 的测试用例
+r($testcase->getTestCasesTest($productID[0], $browseType[2], $suiteID[0])) && p('1:title;2:title;3:title;4:title') && e('这个是测试用例1;这个是测试用例2;这个是测试用例3;这个是测试用例4'); // 测试查询产品1 suiteID 1 browseType bymodule 的测试用例
+r($testcase->getTestCasesTest($productID[0], $browseType[3], $suiteID[0])) && p('0:title;1:title;2:title;3:title') && e('这个是测试用例4;这个是测试用例3;这个是测试用例2;这个是测试用例1'); // 测试查询产品1 suiteID 1 browseType needconfirm 的测试用例
+r($testcase->getTestCasesTest($productID[0], $browseType[4], $suiteID[0])) && p('1:title;2:title') && e('这个是测试用例1;这个是测试用例2'); // 测试查询产品1 suiteID 1 browseType bysuite 的测试用例
+r($testcase->getTestCasesTest($productID[1], $browseType[0], $suiteID[1])) && p('5:title;6:title;7:title;8:title') && e('这个是测试用例5;这个是测试用例6;这个是测试用例7;这个是测试用例8'); // 测试查询产品2 suiteID 3 browseType all 的测试用例
+r($testcase->getTestCasesTest($productID[1], $browseType[1], $suiteID[1])) && p('5:title') && e('这个是测试用例5'); // 测试查询产品2 suiteID 3 browseType wait 的测试用例
+r($testcase->getTestCasesTest($productID[1], $browseType[2], $suiteID[1])) && p('5:title;6:title;7:title;8:title') && e('这个是测试用例5;这个是测试用例6;这个是测试用例7;这个是测试用例8'); // 测试查询产品2 suiteID 3 browseType bymodule 的测试用例
+r($testcase->getTestCasesTest($productID[1], $browseType[3], $suiteID[1])) && p('0:title;1:title;2:title;3:title') && e('这个是测试用例8;这个是测试用例7;这个是测试用例6;这个是测试用例5'); // 测试查询产品2 suiteID 3 browseType needconfirm 的测试用例
+r($testcase->getTestCasesTest($productID[1], $browseType[4], $suiteID[1])) && p('5:title;6:title') && e('这个是测试用例5;这个是测试用例6'); // 测试查询产品2 suiteID 3 browseType bysuite 的测试用例
+r($testcase->getTestCasesTest($productID[2], $browseType[0], $suiteID[2])) && p('9:title;10:title;11:title;12:title') && e('这个是测试用例9;这个是测试用例10;这个是测试用例11;这个是测试用例12'); // 测试查询产品3 suiteID 5 browseType all 的测试用例
+r($testcase->getTestCasesTest($productID[2], $browseType[1], $suiteID[2])) && p('9:title') && e('这个是测试用例9'); // 测试查询产品3 suiteID 5 browseType wait 的测试用例
+r($testcase->getTestCasesTest($productID[2], $browseType[2], $suiteID[2])) && p('9:title;10:title;11:title;12:title') && e('这个是测试用例9;这个是测试用例10;这个是测试用例11;这个是测试用例12'); // 测试查询产品3 suiteID 5 browseType bymodule 的测试用例
+r($testcase->getTestCasesTest($productID[2], $browseType[3], $suiteID[2])) && p('0:title;1:title;2:title;3:title') && e('这个是测试用例12;这个是测试用例11;这个是测试用例10;这个是测试用例9'); // 测试查询产品3 suiteID 5 browseType needconfirm 的测试用例
+r($testcase->getTestCasesTest($productID[2], $browseType[4], $suiteID[2])) && p('9:title;10:title') && e('这个是测试用例9;这个是测试用例10'); // 测试查询产品3 suiteID 5 browseType bysuite 的测试用例
+r($testcase->getTestCasesTest($productID[3], $browseType[0], $suiteID[3])) && p('13:title;14:title;15:title;16:title') && e('这个是测试用例13;这个是测试用例14;这个是测试用例15;这个是测试用例16'); // 测试查询产品4 suiteID 7 browseType all 的测试用例
+r($testcase->getTestCasesTest($productID[3], $browseType[1], $suiteID[3])) && p('13:title') && e('这个是测试用例13'); // 测试查询产品4 suiteID 7 browseType wait 的测试用例
+r($testcase->getTestCasesTest($productID[3], $browseType[2], $suiteID[3])) && p('13:title;14:title;15:title;16:title') && e('这个是测试用例13;这个是测试用例14;这个是测试用例15;这个是测试用例16'); // 测试查询产品4 suiteID 7 browseType bymodule 的测试用例
+r($testcase->getTestCasesTest($productID[3], $browseType[3], $suiteID[3])) && p('0:title;1:title;2:title;3:title') && e('这个是测试用例16;这个是测试用例15;这个是测试用例14;这个是测试用例13'); // 测试查询产品4 suiteID 7 browseType needconfirm 的测试用例
+r($testcase->getTestCasesTest($productID[3], $browseType[4], $suiteID[3])) && p('13:title;14:title') && e('这个是测试用例13;这个是测试用例14'); // 测试查询产品4 suiteID 7 browseType bysuite 的测试用例
+r($testcase->getTestCasesTest($productID[4], $browseType[0], $suiteID[4])) && p('17:title;18:title;19:title;20:title') && e('这个是测试用例17;这个是测试用例18;这个是测试用例19;这个是测试用例20'); // 测试查询产品5 suiteID 9 browseType all 的测试用例
+r($testcase->getTestCasesTest($productID[4], $browseType[1], $suiteID[4])) && p('17:title') && e('这个是测试用例17'); // 测试查询产品5 suiteID 9 browseType wait 的测试用例
+r($testcase->getTestCasesTest($productID[4], $browseType[2], $suiteID[4])) && p('17:title;18:title;19:title;20:title') && e('这个是测试用例17;这个是测试用例18;这个是测试用例19;这个是测试用例20'); // 测试查询产品5 suiteID 9 browseType bymodule 的测试用例
+r($testcase->getTestCasesTest($productID[4], $browseType[3], $suiteID[4])) && p('0:title;1:title;2:title;3:title') && e('这个是测试用例20;这个是测试用例19;这个是测试用例18;这个是测试用例17'); // 测试查询产品5 suiteID 9 browseType needconfirm 的测试用例
+r($testcase->getTestCasesTest($productID[4], $browseType[4], $suiteID[4])) && p('17:title;18:title') && e('这个是测试用例17;这个是测试用例18'); // 测试查询产品5 suiteID 9 browseType bysuite 的测试用例
diff --git a/test/model/testcase/importfromlib.php b/test/model/testcase/importfromlib.php
new file mode 100755
index 0000000000..8d4871d39f
--- /dev/null
+++ b/test/model/testcase/importfromlib.php
@@ -0,0 +1,25 @@
+#!/usr/bin/env php
+importFromLib();
+cid=1
+pid=1
+
+*/
+
+$productID = 1;
+$caseIdList = array(array('401' => '401', '402' => '402'), array('403' => '403', '404' => '404'), array('405' => '405', '406' => '406'), array('407' => '407', '408' => '408'), array('409' => '409', '410' => '410'));
+
+$testcase = new testcaseTest();
+
+r($testcase->importFromLibTest($productID, $caseIdList[0])) && p('0:title;1:title') && e('用例库用例1;用例库用例2'); // 测试导入用例库用例 401 402
+r($testcase->importFromLibTest($productID, $caseIdList[1])) && p('0:title;1:title') && e('用例库用例3;用例库用例4'); // 测试导入用例库用例 403 404
+r($testcase->importFromLibTest($productID, $caseIdList[2])) && p('0:title;1:title') && e('用例库用例5;用例库用例6'); // 测试导入用例库用例 405 406
+r($testcase->importFromLibTest($productID, $caseIdList[3])) && p('0:title;1:title') && e('用例库用例7;用例库用例8'); // 测试导入用例库用例 407 408
+r($testcase->importFromLibTest($productID, $caseIdList[4])) && p('0:title;1:title') && e('用例库用例9;用例库用例10'); // 测试导入用例库用例 409 410
+system("./ztest init");
diff --git a/test/model/testcase/joinstep.php b/test/model/testcase/joinstep.php
new file mode 100755
index 0000000000..00240da386
--- /dev/null
+++ b/test/model/testcase/joinstep.php
@@ -0,0 +1,23 @@
+#!/usr/bin/env php
+joinStep();
+cid=1
+pid=1
+
+*/
+
+$stepIDList = array('1,2', '3,4', '5,6', '7,8', '9,10');
+
+$testcase = new testcaseTest();
+
+r($testcase->joinStepTest($stepIDList[0])) && p() && e('用例步骤描述1 EXPECT:这是用例预期结果1 用例步骤描述2 EXPECT:这是用例预期结果2'); // 测试获取步骤 1 2 的字符串
+r($testcase->joinStepTest($stepIDList[1])) && p() && e('用例步骤描述3 EXPECT:这是用例预期结果3 用例步骤描述4 EXPECT:这是用例预期结果4'); // 测试获取步骤 3 4 的字符串
+r($testcase->joinStepTest($stepIDList[2])) && p() && e('用例步骤描述5 EXPECT:这是用例预期结果5 用例步骤描述6 EXPECT:这是用例预期结果6'); // 测试获取步骤 5 6 的字符串
+r($testcase->joinStepTest($stepIDList[3])) && p() && e('用例步骤描述7 EXPECT:这是用例预期结果7 用例步骤描述8 EXPECT:这是用例预期结果8'); // 测试获取步骤 7 8 的字符串
+r($testcase->joinStepTest($stepIDList[4])) && p() && e('用例步骤描述9 EXPECT:这是用例预期结果9 用例步骤描述10 EXPECT:这是用例预期结果10'); // 测试获取步骤 9 10 的字符串
diff --git a/test/model/testcase/review.php b/test/model/testcase/review.php
new file mode 100755
index 0000000000..24367cef64
--- /dev/null
+++ b/test/model/testcase/review.php
@@ -0,0 +1,49 @@
+#!/usr/bin/env php
+review();
+cid=1
+pid=1
+
+*/
+
+$caseIDList = array(1, 5, 9, 13, 17);
+
+$case1 = new stdclass();
+$case1->result = 'pass';
+$case1->status = 'normal';
+$case1->reviewedBy = array('test1');
+
+$case2 = new stdclass();
+$case2->result = 'clarify';
+$case2->status = 'wait';
+$case2->reviewedBy = array('test2');
+
+$case3 = new stdclass();
+$case3->result = 'pass';
+$case3->status = 'normal';
+$case3->reviewedBy = array('test3');
+
+$case4 = new stdclass();
+$case4->result = 'clarify';
+$case4->status = 'wait';
+$case4->reviewedBy = array('test4');
+
+$case5 = new stdclass();
+$case5->result = 'pass';
+$case5->status = 'normal';
+$case5->reviewedBy = array('test5');
+
+$testcase = new testcaseTest();
+
+r($testcase->reviewTest($caseIDList[0], $case1)) && p('0:field,old,new') && e('status,wait,normal'); // 测试评审用例 1
+r($testcase->reviewTest($caseIDList[1], $case2)) && p('0:field,old,new') && e('reviewedBy,admin,test2'); // 测试评审用例 2
+r($testcase->reviewTest($caseIDList[2], $case3)) && p('0:field,old,new') && e('status,wait,normal'); // 测试评审用例 3
+r($testcase->reviewTest($caseIDList[3], $case4)) && p('0:field,old,new') && e('reviewedBy,admin,test4'); // 测试评审用例 4
+r($testcase->reviewTest($caseIDList[4], $case5)) && p('0:field,old,new') && e('status,wait,normal'); // 测试评审用例 5
+system("./ztest init");
diff --git a/test/model/testcase/synccase2project.php b/test/model/testcase/synccase2project.php
new file mode 100755
index 0000000000..71a53dddfa
--- /dev/null
+++ b/test/model/testcase/synccase2project.php
@@ -0,0 +1,24 @@
+#!/usr/bin/env php
+syncCase2Project();
+cid=1
+pid=1
+
+*/
+
+$caseIDList = array(1, 5, 9, 13, 17, 2);
+
+$testcase = new testcaseTest();
+
+r($testcase->syncCase2ProjectTest($caseIDList[0])) && p() && e('2'); // 测试同步用例 1 到关联项目中
+r($testcase->syncCase2ProjectTest($caseIDList[1])) && p() && e('2'); // 测试同步用例 2 到关联项目中
+r($testcase->syncCase2ProjectTest($caseIDList[2])) && p() && e('2'); // 测试同步用例 3 到关联项目中
+r($testcase->syncCase2ProjectTest($caseIDList[3])) && p() && e('2'); // 测试同步用例 4 到关联项目中
+r($testcase->syncCase2ProjectTest($caseIDList[4])) && p() && e('2'); // 测试同步用例 5 到关联项目中
+system("./ztest init");
diff --git a/test/model/testcase/update.php b/test/model/testcase/update.php
new file mode 100755
index 0000000000..7fe154abc0
--- /dev/null
+++ b/test/model/testcase/update.php
@@ -0,0 +1,27 @@
+#!/usr/bin/env php
+update();
+cid=1
+pid=1
+
+*/
+
+$changeTitle = array('title' => '修改后的名称');
+$changePrecondition = array('precondition' => '修改后的前置条件');
+$changeStatus = array('status' => 'normal');
+$changePri = array('pri' => '3');
+
+$testcase = new testcaseTest();
+
+r($testcase->updateTest($changeTitle)) && p('0:field,old,new') && e('title,这个是测试用例1,修改后的名称'); // 测试修改标题
+r($testcase->updateTest($changeTitle)) && p('0:field,old,new') && e('没有数据更新'); // 测试重复修改标题
+r($testcase->updateTest($changePrecondition)) && p('0:field,old,new') && e('precondition,这是前置条件1,修改后的前置条件'); // 测试修改前置条件
+r($testcase->updateTest($changeStatus)) && p('0:field,old,new') && e('status,wait,normal'); // 测试修改状态
+r($testcase->updateTest($changePri)) && p('0:field,old,new') && e('pri,1,3'); // 测试修改优先级
+system("./ztest init");
diff --git a/test/model/testcase/updatecase2project.php b/test/model/testcase/updatecase2project.php
new file mode 100755
index 0000000000..169881869b
--- /dev/null
+++ b/test/model/testcase/updatecase2project.php
@@ -0,0 +1,31 @@
+#!/usr/bin/env php
+updateCase2Project();
+cid=1
+pid=1
+
+*/
+
+$caseIDList = array('1', '3', '5', '7', '9');
+$objectTypeList = array('product', 'story');
+$objectIDList = array('2', '1', '6', '2');
+
+$testcase = new testcaseTest();
+
+r($testcase->updateCase2ProjectTest($caseIDList[0], $objectTypeList[0], $objectIDList[0])) && p('0:project,product,case') && e('101,2,1'); // 测试修改用例 1 产品
+r($testcase->updateCase2ProjectTest($caseIDList[0], $objectTypeList[1], $objectIDList[2])) && p('0:project,product,case;1:project,product,case;2:project,product,case') && e('101,2,1;12,1,1;102,1,1'); // 测试修改用例 1 需求
+r($testcase->updateCase2ProjectTest($caseIDList[1], $objectTypeList[0], $objectIDList[0])) && p('0:project,product,case') && e('101,2,3'); // 测试修改用例 3 产品
+r($testcase->updateCase2ProjectTest($caseIDList[1], $objectTypeList[1], $objectIDList[2])) && p('0:project,product,case;1:project,product,case;2:project,product,case') && e('101,2,3;12,1,3;102,1,3'); // 测试修改用例 3 需求
+r($testcase->updateCase2ProjectTest($caseIDList[2], $objectTypeList[0], $objectIDList[1])) && p('0:project,product,case') && e('102,1,5'); // 测试修改用例 5 产品
+r($testcase->updateCase2ProjectTest($caseIDList[2], $objectTypeList[1], $objectIDList[3])) && p('0:project,product,case;1:project,product,case;2:project,product,case') && e('102,1,5;11,2,5;101,2,5'); // 测试修改用例 5 需求
+r($testcase->updateCase2ProjectTest($caseIDList[3], $objectTypeList[0], $objectIDList[1])) && p('0:project,product,case') && e('102,1,7'); // 测试修改用例 7 产品
+r($testcase->updateCase2ProjectTest($caseIDList[3], $objectTypeList[1], $objectIDList[3])) && p('0:project,product,case;1:project,product,case;2:project,product,case') && e('102,1,7;11,2,7;101,2,7'); // 测试修改用例 7 需求
+r($testcase->updateCase2ProjectTest($caseIDList[4], $objectTypeList[0], $objectIDList[1])) && p('0:project,product,case') && e('103,1,9'); // 测试修改用例 9 产品
+r($testcase->updateCase2ProjectTest($caseIDList[4], $objectTypeList[1], $objectIDList[3])) && p('0:project,product,case;1:project,product,case;2:project,product,case') && e('103,1,9;11,3,9;101,3,9'); // 测试修改用例 9 需求
+system("./ztest init");