* Refactor testcaseModel::syncCase2Project, and modify its unit test.

This commit is contained in:
liumengyi
2023-09-13 10:23:46 +08:00
parent 9fb9e6f226
commit 7d4e9650cb
5 changed files with 111 additions and 28 deletions
+9 -7
View File
@@ -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();
}
/**
+15 -12
View File
@@ -2,6 +2,15 @@
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/testcase.class.php';
zdTable('case')->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 到关联项目中
+7 -7
View File
@@ -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);
}
/**
+75
View File
@@ -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: ","
+5 -2
View File
@@ -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