* Refactor testcaseModel::isClickable, and its unit test.

This commit is contained in:
liumengyi
2023-09-21 15:40:30 +08:00
parent 9e8bbfae3c
commit df7ccaded9
3 changed files with 125 additions and 3 deletions
+4 -3
View File
@@ -1113,6 +1113,7 @@ class testcaseModel extends model
}
/**
* 判断当前动作是否可以点击。
* Adjust the action is clickable.
*
* @param object $case
@@ -1129,9 +1130,9 @@ class testcaseModel extends model
$action = strtolower($action);
if($action == 'confirmchange') return $case->caseStatus != 'wait' && $case->version < $case->caseVersion;
if($action == 'confirmstorychange') return $case->needconfirm || (isset($case->browseType) && $case->browseType == 'needconfirm');
if($action == 'createbug') return !empty($case->caseFails) && $case->caseFails > 0;
if($action == 'confirmchange') return isset($case->caseStatus) && isset($case->caseVersion) && $case->caseStatus != 'wait' && $case->version < $case->caseVersion;
if($action == 'confirmstorychange') return !empty($case->needconfirm) || (isset($case->browseType) && $case->browseType == 'needconfirm');
if($action == 'createbug') return isset($case->caseFails) && $case->caseFails > 0;
if($action == 'review') return ($config->testcase->needReview || !empty($config->testcase->forceReview)) && (isset($case->caseStatus) ? $case->caseStatus == 'wait' : $case->status == 'wait');
if($action == 'showscript') return $case->auto == 'auto';
@@ -0,0 +1,94 @@
#!/usr/bin/env php
<?php
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/testcase.class.php';
zdTable('user')->gen('1');
zdTable('case')->gen('5');
zdTable('product')->gen('42');
su('admin');
/**
title=测试 testcaseModel->isClickable();
cid=1
pid=1
*/
$waitCaseStatus = array('caseStatus' => 'wait');
$normalCaseStatus = array('caseStatus' => 'normal');
$zeroCaseVersion = array('caseVersion' => 0);
$tenCaseVersion = array('caseVersion' => 10);
$needConfirm = array('needconfirm' => true);
$notNeedConfirm = array('needconfirm' => false);
$confirmType = array('browseType' => 'needconfirm');
$normalType = array('browseType' => 'normal');
$zeroCaseFails = array('caseFails' => 0);
$tenCaseFails = array('caseFails' => 10);
$waitStatus = array('status' => 'wait');
$normalStatus = array('status' => 'normal');
$autoAuto = array('auto' => 'auto');
$noAuto = array('auto' => 'no');
$actionList = array('confirmchange', 'confirmstorychange', 'createbug', 'review', 'showscript', 'edit');
$needReview = array('needReview' => 1);
$forceReview = array('forceReview' => 1);
$testcase = new testcaseTest();
r($testcase->isClickableTest($actionList[0])) && p() && e('0'); // 测试用例1,是否可以进行 confirmchange 操作
r($testcase->isClickableTest($actionList[1])) && p() && e('0'); // 测试用例1,是否可以进行 confirmstorychange 操作
r($testcase->isClickableTest($actionList[2])) && p() && e('0'); // 测试用例1,是否可以进行 createbug 操作
r($testcase->isClickableTest($actionList[3])) && p() && e('0'); // 测试用例1,是否可以进行 review 操作
r($testcase->isClickableTest($actionList[4])) && p() && e('0'); // 测试用例1,是否可以进行 showscript 操作
r($testcase->isClickableTest($actionList[5])) && p() && e('1'); // 测试用例1,是否可以进行 edit 操作
r($testcase->isClickableTest($actionList[0], $waitCaseStatus)) && p() && e('0'); // 测试 caseStatus wait 是否可以进行 confirmchange 操作
r($testcase->isClickableTest($actionList[0], $normalCaseStatus)) && p() && e('0'); // 测试 caseStatus normal 是否可以进行 confirmchange 操作
r($testcase->isClickableTest($actionList[0], $zeroCaseVersion)) && p() && e('0'); // 测试 caseVersion 0 是否可以进行 confirmchange 操作
r($testcase->isClickableTest($actionList[0], $tenCaseVersion)) && p() && e('0'); // 测试 caseVersion 10 是否可以进行 confirmchange 操作
r($testcase->isClickableTest($actionList[0], array_merge($waitCaseStatus, $zeroCaseVersion))) && p() && e('0'); // 测试 caseStatus wait caseVersion 0 是否可以进行 confirmchange 操作
r($testcase->isClickableTest($actionList[0], array_merge($waitCaseStatus, $tenCaseVersion))) && p() && e('0'); // 测试 caseStatus wait caseVersion 10 是否可以进行 confirmchange 操作
r($testcase->isClickableTest($actionList[0], array_merge($normalCaseStatus, $zeroCaseVersion))) && p() && e('0'); // 测试 caseStatus normal caseVersion 0 是否可以进行 confirmchange 操作
r($testcase->isClickableTest($actionList[0], array_merge($normalCaseStatus, $tenCaseVersion))) && p() && e('1'); // 测试 caseStatus normal caseVersion 10 是否可以进行 confirmchange 操作
r($testcase->isClickableTest($actionList[1], $needConfirm)) && p() && e('1'); // 测试 needConfirm true browseType 空 是否可以进行 confirmstorychange 操作
r($testcase->isClickableTest($actionList[1], $confirmType)) && p() && e('1'); // 测试 browseType needConfirm 是否可以进行 confirmstorychange 操作
r($testcase->isClickableTest($actionList[1], $normalType)) && p() && e('0'); // 测试 browseType normal 是否可以进行 confirmstorychange 操作
r($testcase->isClickableTest($actionList[1], array_merge($needConfirm, $confirmType))) && p() && e('1'); // 测试 needConfirm true browseType needConfirm 是否可以进行 confirmstorychange 操作
r($testcase->isClickableTest($actionList[1], array_merge($needConfirm, $normalType))) && p() && e('1'); // 测试 needConfirm true browseType normal 是否可以进行 confirmstorychange 操作
r($testcase->isClickableTest($actionList[2], $zeroCaseFails)) && p() && e('0'); // 测试 caseFails 0 是否可以进行 createbug 操作
r($testcase->isClickableTest($actionList[2], $tenCaseFails)) && p() && e('1'); // 测试 caseFails 10 是否可以进行 createbug 操作
r($testcase->isClickableTest($actionList[3], $waitStatus)) && p() && e('0'); // 测试 status wait 是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], $normalStatus)) && p() && e('0'); // 测试 status normal 是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], $waitCaseStatus)) && p() && e('0'); // 测试 caseStatus wait 是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], $normalCaseStatus)) && p() && e('0'); // 测试 caseStatus normal 是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array(), $needReview)) && p() && e('1'); // 测试 needReview 1 是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array(), $forceReview)) && p() && e('1'); // 测试 forceReview 1 是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array(), array_merge($needReview, $forceReview))) && p() && e('1'); // 测试 needReview 1 forceReview 1 是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], $waitStatus, $needReview)) && p() && e('1'); // 测试 status wait needReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], $waitStatus, $forceReview)) && p() && e('1'); // 测试 status wait forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], $waitStatus, array_merge($needReview, $forceReview))) && p() && e('1'); // 测试 status wait needReview 1 forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], $normalStatus, $needReview)) && p() && e('0'); // 测试 status normal needReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], $normalStatus, $forceReview)) && p() && e('0'); // 测试 status normal forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], $normalStatus, array_merge($needReview, $forceReview))) && p() && e('0'); // 测试 status normal needReview 1 forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($waitStatus, $waitCaseStatus), $needReview)) && p() && e('1'); // 测试 status wait caseStatus wait needReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($waitStatus, $waitCaseStatus), $forceReview)) && p() && e('1'); // 测试 status wait caseStatus wait forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($waitStatus, $waitCaseStatus), array_merge($needReview, $forceReview))) && p() && e('1'); // 测试 status wait caseStatus wait needReview 1 forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($waitStatus, $normalCaseStatus), $needReview)) && p() && e('0'); // 测试 status wait caseStatus normal needReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($waitStatus, $normalCaseStatus), $forceReview)) && p() && e('0'); // 测试 status wait caseStatus normal forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($waitStatus, $normalCaseStatus), array_merge($needReview, $forceReview))) && p() && e('0'); // 测试 status wait caseStatus normal needReview 1 forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($normalStatus, $waitCaseStatus), $needReview)) && p() && e('1'); // 测试 status normal caseStatus wait needReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($normalStatus, $waitCaseStatus), $forceReview)) && p() && e('1'); // 测试 status normal caseStatus wait forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($normalStatus, $waitCaseStatus), array_merge($needReview, $forceReview))) && p() && e('1'); // 测试 status normal caseStatus wait needReview 1 forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($normalStatus, $normalCaseStatus), $needReview)) && p() && e('0'); // 测试 status normal caseStatus normal needReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($normalStatus, $normalCaseStatus), $forceReview)) && p() && e('0'); // 测试 status normal caseStatus normal forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[3], array_merge($normalStatus, $normalCaseStatus), array_merge($needReview, $forceReview))) && p() && e('0'); // 测试 status normal caseStatus normal needReview 1 forceReview 1是否可以进行 review 操作
r($testcase->isClickableTest($actionList[4], $autoAuto)) && p() && e('1'); // 测试 auto auto 是否可以进行 showscript 操作
r($testcase->isClickableTest($actionList[4], $noAuto)) && p() && e('0'); // 测试 auto no 是否可以进行 showscript 操作
+27
View File
@@ -1720,4 +1720,31 @@ class testcaseTest
if(dao::isError()) return dao::getError();
return implode(',', array_keys($modules));
}
/**
* 测试判断动作是否可点击。
* Test adjust the action is clickable.
*
* @param string $action
* @param array $params
* @param array $configs
* @access public
* @return array|int
*/
public function isClickableTest(string $action, array $params = array(), array $configs = array()): array|int
{
global $tester;
$tester->config->testcase->needReview = false;
$tester->config->testcase->forceReview = false;
foreach($configs as $key => $value) $tester->config->testcase->{$key} = $value;
$case = $this->objectModel->getByID(1);
foreach($params as $key => $value) $case->{$key} = $value;
$isClickable = $this->objectModel->isClickable($case, $action);
if(dao::isError()) return dao::getError();
return $isClickable ? 1 : 0;
}
}