+ Add compatibility check.
This commit is contained in:
@@ -0,0 +1,123 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(dirname(dirname(__FILE__))) . '/lib/init.php';
|
||||
|
||||
/**
|
||||
|
||||
title=测试API 获取bug列表
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
通过正确的productID获取bug列表的状态码 >> 200
|
||||
通过错误的productID获取bug列表的状态码 >> 200
|
||||
通过正确的productID获取bug列表的数量 >> 10
|
||||
通过错误的productID获取bug列表的数量 >> 0
|
||||
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class bugTester
|
||||
*
|
||||
* @uses apiTester
|
||||
* @package api
|
||||
* @version $id$
|
||||
*/
|
||||
class bugTester extends apiTester
|
||||
{
|
||||
/**
|
||||
* Get bug.
|
||||
*
|
||||
* @param int $bugID
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
function get($bugID)
|
||||
{
|
||||
return $this->rest->get("/bugs/$bugID");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get bugs.
|
||||
*
|
||||
* @param int $productID
|
||||
* @param string $order
|
||||
* @param int $page
|
||||
* @param int $limit
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
function getList($productID, $order = '', $page = 0, $limit = 0)
|
||||
{
|
||||
$vars = array();
|
||||
if($order) $vars['order'] = $order;
|
||||
if($page) $vars['page'] = $page;
|
||||
if($limit) $vars['limit'] = $limit;
|
||||
$vars = empty($vars) ? '' : '?' . http_build_query($vars);
|
||||
|
||||
return $this->rest->get("/products/$productID$vars");
|
||||
}
|
||||
|
||||
/**
|
||||
* Create bug.
|
||||
*
|
||||
* @param array $data
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
function create($data)
|
||||
{
|
||||
return $this->rest->post("/bugs", $data);
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete bug.
|
||||
*
|
||||
* @param int $bugID
|
||||
* @access public
|
||||
* @return object
|
||||
*/
|
||||
function delete($bugID)
|
||||
{
|
||||
return $this->rest->delete("/bugs/$bugID");
|
||||
}
|
||||
}
|
||||
|
||||
/* Users. */
|
||||
$admin = new bugTester('admin');
|
||||
$noProduct1User = new bugTester('noProduct1User');
|
||||
|
||||
/* Test post.*/
|
||||
$noProductBug = array('title' => 'Bug1');
|
||||
$noTitleBug = array('product' => 1);
|
||||
$minFieldBug = array('product' => 1, 'title' => 'Bug1');
|
||||
$maxFieldBug = array('product' => 1, 'title' => 'Bug2', 'build' => 0);
|
||||
$wrongProductBug = array('product' => 99999, 'title' => 'Bug1');
|
||||
$normalBug = array('product' => 1, 'title' => 'Bug2');
|
||||
|
||||
$fields = 'bug:title';
|
||||
r($admin->create($noProductBug)) && c(400) && p('error') && e('product required.'); // 创建最少字段的Bug
|
||||
r($admin->create($noTitleBug)) && c(400) && p('error') && e('title required.'); // 创建最少字段的Bug
|
||||
r($admin->create($minFieldBug)) && c(200) && p($fields) && e('Bug1'); // 创建最少字段的Bug
|
||||
r($admin->create($maxFieldBug)) && c(200) && p($fields) && e('Bug2'); // 创建最多字段的Bug
|
||||
r($admin->create($wrongProductBug)) && c(400) && p('error') && e('product does not exist.'); // 创建不存在产品的Bug
|
||||
|
||||
/* Test get. */
|
||||
$bug = $admin->create($normalBug);
|
||||
r($admin->get($bug->id)) && c(200) && p($fields) && e('Bug2');
|
||||
r($admin->get(9999999) && c(400) && p('error') && e('');
|
||||
r($noProduct1User->get($bug->id)) && c(403) && p('error') && e('');
|
||||
|
||||
r($admin->getList(1)) && c(200) && p('0:title') && e('Bug1');
|
||||
r($admin->getList(1), 'id_desc') && c(200) && p('0:title') && e('Bug1');
|
||||
r($admin->getList(1), 'id_desc', 2, 10) && c(200) && p('0:title') && e('Bug1');
|
||||
|
||||
/* Test put. */
|
||||
$modifyBug1 = array('product' => 1, 'title' => 'Bug3');
|
||||
$modifyBug2 = array('product' => 1, 'title' => 'Bug3');
|
||||
|
||||
r($admin->put($modifyBug1)) && c(200) && p($fields) && e('Bug3');
|
||||
r($admin->put($modifyBug2)) && c(200) && p($fields) && e('Bug3');
|
||||
|
||||
/* Test delete*/
|
||||
r($admin->delete($bug->id)) && c(201) && p() && e('');
|
||||
r($admin->get($bug->id)) && c(200) && p('bug:deleted') && e('true');
|
||||
@@ -12,6 +12,7 @@ pid=1
|
||||
使用正确用户名和密码获取token >> 登录失败,请检查您的用户名或密码是否填写正确。
|
||||
|
||||
*/
|
||||
|
||||
$pass = $rest->post('/tokens', array('account' => 'admin', 'password' => '123qwe!@#'));
|
||||
$fail = $rest->post('/tokens', array('account' => 'admin', 'password' => '123'));
|
||||
|
||||
|
||||
@@ -0,0 +1,124 @@
|
||||
title: zt_bug
|
||||
desc: Bug表
|
||||
version: 1.0
|
||||
fields:
|
||||
- field: id
|
||||
range: 1-10000
|
||||
- field: project
|
||||
range: 131{2},0{97}
|
||||
- field: product
|
||||
range: 1{20}
|
||||
- field: branch
|
||||
range: 0
|
||||
- field: module
|
||||
range: 0
|
||||
- field: execution
|
||||
range: 391,0,391,0{97}
|
||||
- field: plan
|
||||
range: 0
|
||||
- field: story
|
||||
range: 0
|
||||
- field: storyVersion
|
||||
range: 0
|
||||
- field: task
|
||||
range: 0
|
||||
- field: toTask
|
||||
range: 0
|
||||
- field: toStory
|
||||
range: 0
|
||||
- field: title
|
||||
fields:
|
||||
- field: title1
|
||||
range: BUG{6},`缺陷!@()[]{}|\+=%^&*$#测试bug名称到底可以有多长!@#¥%&*'":.<>。?/();`,bug
|
||||
- field: title2
|
||||
range: 1-10000
|
||||
- field: keywords
|
||||
range: []
|
||||
- field: severity
|
||||
range: 1-4:R
|
||||
- field: pri
|
||||
range: 1-4:R
|
||||
- field: type
|
||||
range: [codeerror,config,install,security,performance,standard,automation,designdefect,others]
|
||||
- field: os
|
||||
range: []{2},[all,ie,ie11,ie10,ie9,ie8,ie7,ie6,chrome,firefox,firefox4,firefox3,firefox2,opera,oprea11,oprea10,opera9,safari,maxthon,uc,other]
|
||||
- field: browser
|
||||
range: []
|
||||
- field: hardware
|
||||
range: []
|
||||
- field: found
|
||||
range: []
|
||||
- field: steps
|
||||
range: ["<p>【步骤】</p><br/><p>【结果】</p><br/><p>【期望】</p><br/>","【步骤】进入成果展示<br/>【结果】乱码<br/>【期望】正常显示<br/>"]
|
||||
- field: status
|
||||
range: active{50},resolved{30},closed{20}
|
||||
- field: subStatus
|
||||
range: []
|
||||
- field: color
|
||||
range: [#3da7f5,#75c941,#2dbdb2,#797ec9,#ffaf38,#ff4e3e]
|
||||
- field: confirmed
|
||||
range: [0,1]:R
|
||||
- field: activatedCount
|
||||
range: 0
|
||||
- field: mailto
|
||||
range: []
|
||||
- field: openedBy
|
||||
range: admin
|
||||
- field: openedDate
|
||||
range: "(-1M)-(+1w):60"
|
||||
type: timestamp
|
||||
format: "YYYY-MM-DD hh:mm:ss"
|
||||
- field: openedBuild
|
||||
range: 1,0,1,trunk{97}
|
||||
- field: assignedTo
|
||||
range: [admin,dev1,test1]{30},[]{20},[admin,dev1,test1]{20},[]{10},closed{20}
|
||||
- field: assignedDate
|
||||
range: "(-1M)-(+1w):60"
|
||||
type: timestamp
|
||||
format: "YYYY-MM-DD"
|
||||
- field: deadline
|
||||
range: "(+2w):60"
|
||||
type: timestamp
|
||||
format: "YYYY-MM-DD"
|
||||
- field: resolvedBy
|
||||
range: []{50},$assignedTo{30},admin{20}
|
||||
- field: resolution
|
||||
range: []{50},bydesign{5},duplicate{5},external{5},fixed{5},notrepro{2},postponed{3},willnotfix{5},fixed{10},bydesign,external,notrepro,postponed,willnotfix,duplicate{5}
|
||||
- field: resolvedBuild
|
||||
range: []{55},trunk{15},[]{25},trunk{5}
|
||||
- field: resolvedDate
|
||||
range:
|
||||
- field: closedBy
|
||||
range: []{80},admin{20}
|
||||
- field: closedDate
|
||||
range:
|
||||
- field: duplicateBug
|
||||
range: 0{55},1-5,0{40},10-15
|
||||
- field: linkBug
|
||||
range:
|
||||
- field: case
|
||||
range: 0
|
||||
- field: caseVersion
|
||||
range: 0
|
||||
- field: result
|
||||
range: 0
|
||||
- field: repo
|
||||
range: 0
|
||||
- field: entry
|
||||
range:
|
||||
- field: lines
|
||||
range:
|
||||
- field: v1
|
||||
range:
|
||||
- field: v2
|
||||
range:
|
||||
- field: repoType
|
||||
range:
|
||||
- field: testtask
|
||||
range: 0
|
||||
- field: lastEditedBy
|
||||
range:
|
||||
- field: lastEditedDate
|
||||
range:
|
||||
- field: deleted
|
||||
range: 0{40},1{10},0{50}
|
||||
+5
-5
@@ -25,9 +25,9 @@ fields:
|
||||
note: "用户名"
|
||||
fields:
|
||||
- field: account1
|
||||
range: admi,test{100},dev{200},pm{10},po{10},td{2},pd{2},qd{2},top{5},others{10},a,bb,ccc,qwuiadsd?!2as@#%$aasd~aj1!@#1
|
||||
range: admin,program1User,noprogram1user,product1user,noproduct1user,project1user,noproject1user,test{100},dev{200},pm{10},po{10},td{2},pd{2},qd{2},top{5},others{10},a,bb,ccc,qwuiadsd?!2as@#%$aasd~aj1!@#1
|
||||
- field: account2
|
||||
range: n,1-100,1-200,1-10,1-10,1-2,1-2,1-2,1-5,1-10
|
||||
range: [],1-100,1-200,1-10,1-10,1-2,1-2,1-2,1-5,1-10
|
||||
- field: password
|
||||
note: "密码"
|
||||
range: 123qwe!@#{346}
|
||||
@@ -43,9 +43,9 @@ fields:
|
||||
note: "真实姓名"
|
||||
fields:
|
||||
- field: realname1
|
||||
range: admi,测试{100},开发{200},项目经理{10},产品经理{10},研发主管{2},产品主管{2},测试主管{2},高层管理{5},其他{10},短用户名,BB,CCC,非常长非常长的用户名怎么这么长?
|
||||
range: admin,测试{100},开发{200},项目经理{10},产品经理{10},研发主管{2},产品主管{2},测试主管{2},高层管理{5},其他{10},短用户名,BB,CCC,非常长非常长的用户名怎么这么长?
|
||||
- field: realname2
|
||||
range: n,1-100,1-200,1-10,1-10,1-2,1-2,1-2,1-5,1-10
|
||||
range: [],1-100,1-200,1-10,1-10,1-2,1-2,1-2,1-5,1-10
|
||||
- field: nickname
|
||||
note: "昵称"
|
||||
- field: commiter
|
||||
@@ -77,7 +77,7 @@ fields:
|
||||
- field: email2
|
||||
range: 100-999:R
|
||||
- field: email3
|
||||
range: [@qq.com,@163.com,@gmail.com]
|
||||
range: [@qq.com,@163.com,@gmail.com]
|
||||
- field: skype
|
||||
note: "Skype"
|
||||
range: Skype
|
||||
|
||||
@@ -28,3 +28,4 @@ $builder->blockRandom = array('rows' => 120, 'data' => array('block', 'blockr
|
||||
$builder->projectProduct = array('rows' => 21, 'data' => array('projectproduct'));
|
||||
|
||||
$builder->case = array('rows' => 10000, 'data' => array('case'));
|
||||
$builder->bug = array('rows' => 100, 'data' => array('bug'));
|
||||
|
||||
@@ -46,17 +46,6 @@ include $frameworkRoot . 'helper.class.php';
|
||||
$app = router::createApp('pms', dirname(dirname(__FILE__)), 'router');
|
||||
$tester = $app->loadCommon();
|
||||
|
||||
/* Load rest for api. */
|
||||
if(!isset($config->webSite)) die("Error: \$config->webSite is not set.\n");
|
||||
|
||||
$app->loadClass('requests', true);
|
||||
include 'rest.php';
|
||||
$rest = new Rest($config->webSite . '/api.php/v1');
|
||||
|
||||
/* Global token for api. */
|
||||
$token = $rest->post('/tokens', array('account' => 'admin', 'password' => '123qwe!@#'));
|
||||
if(isset($token->body)) $token = $token->body;
|
||||
|
||||
/* Set configs. */
|
||||
$config->zendataRoot = dirname(dirname(__FILE__)) . '/zendata';
|
||||
$config->ztfPath = dirname(dirname(__FILE__)) . '/tools/ztf';
|
||||
|
||||
Reference in New Issue
Block a user