diff --git a/module/testcase/model.php b/module/testcase/model.php index bedc27ce73..cc8f507131 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -1665,36 +1665,37 @@ class testcaseModel extends model } /** + * 同步用例到项目中。 * Sync case to project. * * @param object $case * @param int $caseID * @access public - * @return void + * @return bool */ - public function syncCase2Project($case, $caseID) + public function syncCase2Project(object $case, int $caseID): bool { $projects = array(); if(!empty($case->story)) { $projects = $this->dao->select('project')->from(TABLE_PROJECTSTORY)->where('story')->eq($case->story)->fetchPairs(); } - elseif($this->app->tab == 'project' and empty($case->story)) + elseif($this->app->tab == 'project' && empty($case->story)) { $projects = array($this->session->project); } - elseif($this->app->tab == 'execution' and empty($case->story)) + elseif($this->app->tab == 'execution' && empty($case->story)) { $projects = array($this->session->execution); } - if(empty($projects)) return; + if(empty($projects)) return false; $this->loadModel('action'); $objectInfo = $this->dao->select('*')->from(TABLE_PROJECT)->where('id')->in($projects)->fetchAll('id'); - foreach($projects as $projectID) { $lastOrder = (int)$this->dao->select('*')->from(TABLE_PROJECTCASE)->where('project')->eq($projectID)->orderBy('order_desc')->limit(1)->fetch('order'); + $data = new stdclass(); $data->project = $projectID; $data->product = $case->product; @@ -1706,8 +1707,9 @@ class testcaseModel extends model $object = $objectInfo[$projectID]; $objectType = $object->type; if($objectType == 'project') $this->action->create('case', $caseID, 'linked2project', '', $projectID); - if(in_array($objectType, array('sprint', 'stage')) and $object->multiple) $this->action->create('case', $caseID, 'linked2execution', '', $projectID); + if(in_array($objectType, array('sprint', 'stage')) && $object->multiple) $this->action->create('case', $caseID, 'linked2execution', '', $projectID); } + return !dao::isError(); } /** diff --git a/module/testcase/test/model/synccase2project.php b/module/testcase/test/model/synccase2project.php index 7ad825127f..e7230dd5c6 100755 --- a/module/testcase/test/model/synccase2project.php +++ b/module/testcase/test/model/synccase2project.php @@ -2,6 +2,15 @@ gen('20'); +zdTable('story')->gen('20'); +zdTable('project')->gen('100', true, false); +zdTable('project')->config('execution')->gen('100', false, false); +zdTable('projectcase')->gen('100'); +zdTable('projectstory')->gen('4'); +zdTable('user')->gen('1'); + su('admin'); /** @@ -10,20 +19,14 @@ title=测试 testcaseModel->syncCase2Project(); cid=1 pid=1 -测试同步用例 1 到关联项目中 >> 2 -测试同步用例 2 到关联项目中 >> 2 -测试同步用例 3 到关联项目中 >> 2 -测试同步用例 4 到关联项目中 >> 2 -测试同步用例 5 到关联项目中 >> 2 - */ -$caseIDList = array(1, 5, 9, 13, 17, 2); +$caseIDList = array(1, 5, 9, 13, 17); $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 到关联项目中 +r($testcase->syncCase2ProjectTest($caseIDList[0])) && p() && e('11,101'); // 测试同步用例 1 到关联项目中 +r($testcase->syncCase2ProjectTest($caseIDList[1])) && p() && e('12,102'); // 测试同步用例 5 到关联项目中 +r($testcase->syncCase2ProjectTest($caseIDList[2])) && p() && e('103'); // 测试同步用例 9 到关联项目中 +r($testcase->syncCase2ProjectTest($caseIDList[3])) && p() && e('104'); // 测试同步用例 13 到关联项目中 +r($testcase->syncCase2ProjectTest($caseIDList[4])) && p() && e('105'); // 测试同步用例 17 到关联项目中 diff --git a/module/testcase/test/testcase.class.php b/module/testcase/test/testcase.class.php index c1eb4060af..ff0c1e05dd 100644 --- a/module/testcase/test/testcase.class.php +++ b/module/testcase/test/testcase.class.php @@ -721,23 +721,23 @@ class testcaseTest } /** + * 测试将用例同步到项目。 * Test sync case to project. * - * @param int $caseID + * @param int $caseID * @access public - * @return int + * @return array|string */ - public function syncCase2ProjectTest($caseID) + public function syncCase2ProjectTest(int $caseID): array|string { - 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); + global $tester; + $objects = $tester->dao->select('project')->from(TABLE_PROJECTCASE)->where('`case`')->eq($caseID)->fetchPairs(); + return implode(',', $objects); } /** diff --git a/module/testcase/test/yaml/execution.yaml b/module/testcase/test/yaml/execution.yaml new file mode 100644 index 0000000000..c01c1e03cb --- /dev/null +++ b/module/testcase/test/yaml/execution.yaml @@ -0,0 +1,75 @@ +title: table zt_execution +author: Zhu Jinyong +version: "1.0" +fields: + - field: id + range: 101-700 + - field: name + note: "名称" + fields: + - field: name1 + range: 迭代{30},阶段{30},看板{30} + - field: name2 + range: 1-10000 + - field: project + range: 11-100 + - field: model + range: [] + - field: type + range: sprint{30},stage{30},kanban{30} + - field: budget + range: 800000-1:100 + - field: status + range: wait,doing + - field: percent + range: 0{30},10{30},0{30} + - field: milestone + range: 0{30},1{10},0{10},1{10},0{30} + - field: auth + range: "extend" + - field: desc + range: 1-10000 + prefix: "迭代描述" + - field: begin + range: "(-2M)-(+M):1D" + type: timestamp + format: "YY/MM/DD" + postfix: "\t" + - field: end + range: "(+1w)-(+2M):1D" + type: timestamp + format: "YY/MM/DD" + postfix: "\t" + - field: grade + range: 1 + - field: parent + range: 11-40,41-70,71-100 + - field: path + fields: + - field: path1 + prefix: "," + range: 11-100 + - field: path2 + prefix: "," + range: 101-700 + postfix: "," + - field: acl + range: open{4},private{4} + - field: openedVersion + range: "16.5" + - field: whitelist + froms: + - from: common.user.v1.yaml + use: empty{8} + - from: common.user.v1.yaml + use: empty{8} + prefix: "," + - from: common.user.v1.yaml + use: one{8} + prefix: "," + - from: common.user.v1.yaml + use: two{8} + prefix: "," + - from: common.user.v1.yaml + use: three{8} + prefix: "," diff --git a/test/data/project.yaml b/test/data/project.yaml index afd7f8863e..066d37a00c 100644 --- a/test/data/project.yaml +++ b/test/data/project.yaml @@ -53,8 +53,11 @@ fields: - field: grade range: "2" - field: code - range: 1-10,1-10000 - prefix: "program{10},project{100}" + fields: + - field: code1 + range: program{10},project{100} + - field: code2 + range: 1-10,1-10000 - field: begin range: "(-3M)-(+M):1D" type: timestamp