* Refactor testcaseModel::syncCase2Project, and modify its unit test.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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 到关联项目中
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -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: ","
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user