diff --git a/api/v1/entries/stories.php b/api/v1/entries/stories.php index 75d38b6c7f..558f95a7cd 100644 --- a/api/v1/entries/stories.php +++ b/api/v1/entries/stories.php @@ -66,7 +66,7 @@ class storiesEntry extends entry $control = $this->loadController('story', 'create'); $this->requireFields('title,spec,pri,category'); - $control->create($productID); + $control->create($productID, $this->param('branch', 0), $this->param('moduleID', 0), $this->param('storyID', 0), $this->param('objectID', 0)); $data = $this->getData(); if(isset($data->status) and $data->status == 'fail') return $this->sendError(zget($data, 'code', 400), $data->message); diff --git a/api/v1/entries/storyassignto.php b/api/v1/entries/storyassignto.php index 66e6f089f8..a868427b84 100644 --- a/api/v1/entries/storyassignto.php +++ b/api/v1/entries/storyassignto.php @@ -22,7 +22,7 @@ class storyAssignToEntry extends Entry { $story = $this->loadModel('story')->getByID($storyID); - $fields = 'assignedTo'; + $fields = 'assignedTo,comment'; $this->batchSetPost($fields); $control = $this->loadController('story', 'assignTo'); diff --git a/module/action/model.php b/module/action/model.php index f70bef05bf..40c55ee22d 100755 --- a/module/action/model.php +++ b/module/action/model.php @@ -917,6 +917,8 @@ class actionModel extends model ->beginIF($docs and !$this->app->user->admin)->andWhere("IF(objectType != 'doc' || (objectType = 'doc' && (action = 'approved' || action = 'removed')), '1=1', objectID " . helper::dbIN($docs) . ")")->fi() ->beginIF($libs and !$this->app->user->admin)->andWhere("IF(objectType != 'doclib', '1=1', objectID " . helper::dbIN(array_keys($libs)) . ') ')->fi() ->beginIF($actionCondition)->andWhere("($actionCondition)")->fi() + /* Filter out client login/logout actions. */ + ->andWhere('action')->notin('disconnectxuanxuan,loginxuanxuan') ->orderBy($orderBy) ->page($pager) ->fetchAll(); @@ -1008,13 +1010,13 @@ class actionModel extends model $actionQuery = str_replace("`product` = '$productID'", "`product` LIKE '%,$productID,%'", $actionQuery); if($date) $actionQuery = "($actionQuery) AND " . ('date' . ($direction == 'next' ? '<' : '>') . "'{$date}'"); - + /* If this vision is lite, delete product actions. */ if($this->config->vision == 'lite') $actionQuery .= " AND objectType != 'product'"; - + $actionQuery .= " AND vision = '" . $this->config->vision . "'"; $actions = $this->getBySQL($actionQuery, $orderBy, $pager); - + $this->loadModel('common')->saveQueryCondition($this->dao->get(), 'action'); if(!$actions) return array(); return $this->transformActions($actions); diff --git a/module/branch/view/manage.html.php b/module/branch/view/manage.html.php index 2ab8732ce6..2c3e663c39 100644 --- a/module/branch/view/manage.html.php +++ b/module/branch/view/manage.html.php @@ -40,7 +40,7 @@

branch->noData;?> - createLink('branch', 'create', "productID=$productID", '', true), " " . $lang->branch->create, '', "class='btn btn-info iframe'");?> + createLink('branch', 'create', "productID=$productID", '', true), " " . $lang->branch->create, '', "class='btn btn-info iframe'");?>

diff --git a/module/common/model.php b/module/common/model.php index 6b81d3bd1e..ae8e9c57c7 100644 --- a/module/common/model.php +++ b/module/common/model.php @@ -413,7 +413,7 @@ class commonModel extends model { if(!commonModel::isTutorialMode()) { - echo '
  • ' . html::a(helper::createLink('tutorial', 'start'), " " . $lang->tutorialAB, '', "class='iframe' data-class-name='modal-inverse' data-width='800' data-headerless='true' data-backdrop='true' data-keyboard='true'") . '
  • '; + echo '
  • ' . html::a(helper::createLink('tutorial', 'start'), " " . $lang->tutorialAB, '', "class='iframe' data-class-name='modal-inverse' data-width='800' data-headerless='true' data-backdrop='true' data-keyboard='true'") . '
  • '; } echo '
  • ' . html::a(helper::createLink('my', 'preference', '', '', true), " " . $lang->preference, '', "class='iframe' data-width='700'") . '
  • '; diff --git a/module/common/view/header.html.php b/module/common/view/header.html.php index c0e95a884d..e294df8a85 100755 --- a/module/common/view/header.html.php +++ b/module/common/view/header.html.php @@ -48,6 +48,10 @@ include 'chosen.html.php';
    sso->redirect)) echo "class='ranzhiFixedTfootAction'";?> >
    diff --git a/module/common/view/header.lite.html.php b/module/common/view/header.lite.html.php index 0f5771a23c..807b39b71c 100755 --- a/module/common/view/header.lite.html.php +++ b/module/common/view/header.lite.html.php @@ -77,6 +77,8 @@ if($this->config->vision == 'lite') $extHookFiles = glob($extHookRule); if($extHookFiles) foreach($extHookFiles as $extHookFile) include $extHookFile; } +$xuanExtFile = $extensionRoot . 'xuan/common/ext/view/header.xuanxuan.html.hook.php'; +if(file_exists($xuanExtFile)) include $xuanExtFile; ?> app->getViewType() == 'xhtml' ? 'allow-self-open' : '';?> diff --git a/module/execution/model.php b/module/execution/model.php index dcffef5d44..bfac6c4405 100644 --- a/module/execution/model.php +++ b/module/execution/model.php @@ -1829,7 +1829,7 @@ class executionModel extends model foreach($plans as $plan) $planPairs += $plan; } $this->config->product->search['params']['plan']['values'] = $planPairs; - $this->config->product->search['params']['module']['values'] = $modules; + $this->config->product->search['params']['module']['values'] = array('' => '') + $modules; if($productType == 'normal') { unset($this->config->product->search['fields']['branch']); diff --git a/module/product/control.php b/module/product/control.php index 08fe655607..5427438fee 100644 --- a/module/product/control.php +++ b/module/product/control.php @@ -1291,7 +1291,7 @@ class product extends control $this->view->position[] = $this->lang->product->line; $this->view->programs = array('') + $this->loadModel('program')->getTopPairs(); - $this->view->lines = $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('line')->andWhere('deleted')->eq(0)->orderBy('`order`')->fetchAll(); + $this->view->lines = $this->product->getLines(); $this->display(); } diff --git a/module/product/model.php b/module/product/model.php index 5ec8aa627e..1d3012d7ac 100644 --- a/module/product/model.php +++ b/module/product/model.php @@ -970,7 +970,7 @@ class productModel extends model else { $moduleList = array(); - $modules = array('' => '/'); + $modules = array('/'); $branchGroup = $this->loadModel('execution')->getBranchByProduct(array_keys($products), $this->session->project, ''); foreach($products as $productID => $productName) { @@ -996,7 +996,7 @@ class productModel extends model { $modules = $this->tree->getOptionMenu($productID, 'story', 0, $branch); } - $this->config->product->search['params']['module']['values'] = $modules; + $this->config->product->search['params']['module']['values'] = array('' => '') + $modules; $productInfo = $this->getById($productID); if(!$productID or $productInfo->type == 'normal' or $this->app->tab == 'assetlib') @@ -1786,7 +1786,7 @@ class productModel extends model * * @param int $programID * @access public - * @return void + * @return array */ public function getLinePairs($programID = 0) { @@ -1797,6 +1797,16 @@ class productModel extends model ->fetchPairs(); } + /* + * Get all lines. + * @access public + * @return array + */ + public function getLines() + { + return $this->dao->select('*')->from(TABLE_MODULE)->where('type')->eq('line')->andWhere('deleted')->eq(0)->orderBy('`order`')->fetchAll(); + } + /** * Get the summary of product's stories. * diff --git a/module/story/js/change.js b/module/story/js/change.js index fcdf2de956..df0c4cbd8e 100644 --- a/module/story/js/change.js +++ b/module/story/js/change.js @@ -4,6 +4,14 @@ $(function() { $('#reviewer').attr('disabled', $(this).is(':checked') ? 'disabled' : null).trigger('chosen:updated'); getStatus('change', "storyID=" + storyID + ",changed=" + changed + ",needNotReview=" + ($(this).prop('checked') ? 1 : 0)); + if($(this).is(':checked')) + { + $('.input-group-addon').removeClass('required'); + } + else + { + $('.input-group-addon').addClass('required'); + } }); $('#needNotReview').change(); diff --git a/module/story/model.php b/module/story/model.php index eab6a9657c..0bbab938cc 100644 --- a/module/story/model.php +++ b/module/story/model.php @@ -670,7 +670,7 @@ class storyModel extends model ->add('lastEditedDate', $now) ->setIF($specChanged, 'version', $oldStory->version + 1) ->setIF($specChanged and $oldStory->status == 'active' and $this->post->needNotReview == false, 'status', 'changed') - ->setIF($specChanged and $oldStory->status == 'draft' and $this->post->needNotReview, 'status', 'active') + ->setIF($oldStory->status == 'draft' and $this->post->needNotReview, 'status', 'active') ->setIF($specChanged, 'reviewedBy', '') ->setIF($specChanged, 'closedBy', '') ->setIF($specChanged, 'closedReason', '') @@ -679,7 +679,7 @@ class storyModel extends model ->stripTags($this->config->story->editor->change['id'], $this->config->allowedTags) ->remove('files,labels,reviewer,comment,needNotReview,uid') ->get(); - if($specChanged and $story->status == 'active' and $this->checkForceReview()) $story->status = 'changed'; + if($specChanged and isset($story->status) && $story->status == 'active' and $this->checkForceReview()) $story->status = 'changed'; $story = $this->loadModel('file')->processImgURL($story, $this->config->story->editor->change['id'], $this->post->uid); $this->dao->update(TABLE_STORY)->data($story, 'spec,verify') ->autoCheck() @@ -735,7 +735,7 @@ class storyModel extends model $this->file->updateObjectID($this->post->uid, $storyID, 'story'); - $oldStory->reviewers = implode(',', array_keys($oldStroyReviewers)); + $oldStory->reviewers = implode(',', array_keys($oldStoryReviewers)); $story->reviewers = implode(',', $_POST['reviewer']); return common::createChanges($oldStory, $story); } @@ -1315,11 +1315,11 @@ class storyModel extends model ->setDefault('lastEditedBy', $this->app->user->account) ->setDefault('lastEditedDate', $now) ->setDefault('status', $oldStory->status) + ->setDefault('reviewedDate', $date) ->setIF($this->post->result == 'revert', 'version', $this->post->preVersion) ->removeIF($this->post->result != 'reject', 'closedReason, duplicateStory, childStories') ->removeIF($this->post->result == 'reject' and $this->post->closedReason != 'duplicate', 'duplicateStory') ->removeIF($this->post->result == 'reject' and $this->post->closedReason != 'subdivided', 'childStories') - ->add('reviewedDate', $date) ->add('reviewedBy', $oldStory->reviewedBy . ',' . $this->app->user->account) ->remove('result,preVersion,comment') ->get(); @@ -2663,6 +2663,8 @@ class storyModel extends model { $storyQuery .= " AND `status` NOT IN ('draft', 'closed')"; } + + if($this->app->rawModule == 'build' and $this->app->rawMethod == 'linkstory') $storyQuery .= " AND `parent` != '-1'"; } elseif(strpos($storyQuery, $allBranch) !== false) { diff --git a/module/story/view/view.html.php b/module/story/view/view.html.php index 9d43318036..4f7b66447c 100644 --- a/module/story/view/view.html.php +++ b/module/story/view/view.html.php @@ -413,7 +413,7 @@ story->reviewedDate;?> - reviewedBy) echo $story->reviewedDate;?> + reviewedBy) echo date('Y-m-d', strtotime($story->reviewedDate))?> story->closedBy;?> diff --git a/module/upgrade/model.php b/module/upgrade/model.php index 3d1002f169..95392cc46c 100644 --- a/module/upgrade/model.php +++ b/module/upgrade/model.php @@ -5257,8 +5257,9 @@ class upgradeModel extends model $products = $this->dao->select('*')->from(TABLE_PRODUCT)->where('acl')->eq('custom')->fetchAll(); foreach($products as $product) { - $groups = explode(',', $product->whitelist); - $accounts = $this->dao->select('account')->from(TABLE_USERGROUP)->where('`group`')->in($groups)->fetchPairs('account'); + $groups = explode(',', $product->whitelist); + $accounts = $this->dao->select('account')->from(TABLE_USERGROUP)->where('`group`')->in($groups)->fetchPairs('account'); + $whiteList = ''; foreach($accounts as $account) { $acl = new stdclass(); @@ -5269,9 +5270,11 @@ class upgradeModel extends model $acl->source = 'upgrade'; $this->dao->insert(TABLE_ACL)->data($acl)->exec(); + + $whiteList .= ',' . $account; } - $this->dao->update(TABLE_PRODUCT)->set('acl')->eq('private')->where('id')->eq($product->id)->exec(); + $this->dao->update(TABLE_PRODUCT)->set('acl')->eq('private')->set('whitelist')->eq($whiteList)->where('id')->eq($product->id)->exec(); } return true; diff --git a/test/class/caselib.class.php b/test/class/caselib.class.php new file mode 100644 index 0000000000..3c7ce07afc --- /dev/null +++ b/test/class/caselib.class.php @@ -0,0 +1,134 @@ +objectModel = $tester->loadModel('caselib'); + } + + public function setLibMenuTest($libraries, $libID) + { + $objects = $this->objectModel->setLibMenu($libraries, $libID); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + public function saveLibStateTest($libID = 0, $libraries = array()) + { + $objects = $this->objectModel->saveLibState($libID, $libraries); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + public function getByIdTest($libID, $setImgSize = false) + { + $objects = $this->objectModel->getById($libID, $setImgSize); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + public function updateTest($libID) + { + $objects = $this->objectModel->update($libID); + + if(dao::isError()) return dao::getError(); + + $objects = $this->objectModel->getById($libID); + + return $objects; + } + + public function deleteTest($libID, $table = '') + { + $objects = $this->objectModel->delete($libID, $table); + + if(dao::isError()) return dao::getError(); + + $objects = $this->objectModel->getById($libID); + + return $objects; + } + + public function getLibrariesTest() + { + $objects = $this->objectModel->getLibraries(); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + public function getListTest($orderBy = 'id_desc', $pager = null) + { + $objects = $this->objectModel->getList($orderBy, $pager); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + public function createTest($param) + { + foreach($param as $k => $v) $_POST[$k] = $v; + $libID = $this->objectModel->create(); + unset($_POST); + + if(dao::isError()) return dao::getError(); + + $objects = $this->objectModel->getById($libID); + + return $objects; + } + + public function getLibCasesTest($libID, $browseType, $queryID = 0, $moduleID = 0, $sort = 'id_desc', $pager = null) + { + $objects = $this->objectModel->getLibCases($libID, $browseType, $queryID, $moduleID, $sort, $pager); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + public function buildSearchFormTest($libID, $libraries, $queryID, $actionURL) + { + $objects = $this->objectModel->buildSearchForm($libID, $libraries, $queryID, $actionURL); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + public function getLibLinkTest($module, $method, $extra) + { + $objects = $this->objectModel->getLibLink($module, $method, $extra); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + public function createFromImportTest($libID) + { + $objects = $this->objectModel->createFromImport($libID); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + public function batchCreateCaseTest($libID) + { + $objects = $this->objectModel->batchCreateCase($libID); + + if(dao::isError()) return dao::getError(); + + return $objects; + } +} diff --git a/test/class/projectrelease.class.php b/test/class/projectrelease.class.php new file mode 100644 index 0000000000..14e68da432 --- /dev/null +++ b/test/class/projectrelease.class.php @@ -0,0 +1,195 @@ +objectModel = $tester->loadModel('projectrelease'); + } + + /** + * Test get release by id. + * + * @param int $releaseID + * @access public + * @return object + */ + public function getByIDTest($releaseID) + { + $objects = $this->objectModel->getByID($releaseID); + + if(dao::isError()) + { + $error = dao::getError(); + return $error[0]; + } + + return $objects; + } + + /** + * Test get list of releases. + * + * @param int $projectID + * @param string $type + * @access public + * @return array + */ + public function getListTest($projectID, $type = 'all') + { + $objects = $this->objectModel->getList($projectID, $type); + + if(dao::isError()) + { + $error = dao::getError(); + return $error[0]; + } + + return $objects; + } + + /** + * Test get last release. + * + * @param int $projectID + * @access public + * @return object + */ + public function getLastTest($projectID) + { + $objects = $this->objectModel->getLast($projectID); + + if(dao::isError()) + { + $error = dao::getError(); + return $error[0]; + } + + return $objects; + } + + /** + * Test get released builds from project. + * + * @param int $projectID + * @access public + * @return array + */ + public function getReleasedBuildsTest($projectID) + { + $objects = $this->objectModel->getReleasedBuilds($projectID); + + if(dao::isError()) + { + $error = dao::getError(); + return $error[0]; + } + if(count($objects) == 1) + { + return count($objects); + } + else + { + return $objects; + } + } + + /** + * Test update a release. + * + * @param int $releaseID + * @param string $name + * @param string $date + * @access public + * @return array + */ + public function updateTest($releaseID, $name = '', $date = '') + { + global $app; + $app->loadConfig('release'); + + $updateFields['name'] = $name; + $updateFields['build'] = 1; + $updateFields['date'] = $date; + $updateFields['status'] = 'normal'; + $updateFields['desc'] = ''; + $updateFields['labels'] = array(); + $updateFields['files'] = array(); + $updateFields['uid'] = '62450877d0a27'; + $updateFields['product'] = 1; + foreach($updateFields as $field => $defaultValue) $_POST[$field] = $defaultValue; + + $objects = $this->objectModel->update($releaseID); + if($objects == array()) $objects = '没有数据更新'; + unset($_POST); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + /** + * Test link stories + * + * @param int $releaseID + * @access public + * @return array + */ + public function linkStoryTest($releaseID) + { + $_POST['stories'] = array(1, 2); + $this->objectModel->linkStory($releaseID); + + global $tester; + $objects = $tester->dao->select('stories')->from(TABLE_RELEASE)->where('id')->eq((int)$releaseID)->fetch(); + unset($_POST); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + /** + * Test unlink stories + * + * @param int $releaseID + * @param int $storyID + * @access public + * @return array + */ + public function unlinkStoryTest($releaseID, $storyID) + { + $this->linkStoryTest($releaseID); + $this->objectModel->unlinkStory($releaseID, $storyID); + + global $tester; + $objects = $tester->dao->select('stories')->from(TABLE_RELEASE)->where('id')->eq((int)$releaseID)->fetch(); + + if(dao::isError()) return dao::getError(); + + return $objects; + } + + /** + * Test link bugs. + * + * @param int $releaseID + * @param string $type + * @access public + * @return array + */ + public function linkBugTest($releaseID, $type = 'bug') + { + $_POST['bugs'] = array(1, 2); + $this->objectModel->linkBug($releaseID, $type); + + global $tester; + $field = $type == 'bug' ? 'bugs' : 'leftBugs'; + $objects = $tester->dao->select($field)->from(TABLE_RELEASE)->where('id')->eq((int)$releaseID)->fetch(); + unset($_POST); + + if(dao::isError()) return dao::getError(); + + return $objects; + } +} diff --git a/test/model/caselib/batchcreatecase.php b/test/model/caselib/batchcreatecase.php new file mode 100755 index 0000000000..7e864c3f11 --- /dev/null +++ b/test/model/caselib/batchcreatecase.php @@ -0,0 +1,35 @@ +#!/usr/bin/env php +batchCreateCase(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); +$_POST = array( + 'module' => array(0 => 0, 1 => 0), + 'title' => array(0 => '测试导入添加1', 1 => '测试导入添加2'), + 'color' => array(0 => '', 1 => ''), + 'type' => array(0 => 'performance', 1 => 'unit'), + 'pri' => array(0 => 2, 1 => 4), + 'precondition' => array(0 => '', 1 => ''), + 'keywords' => array(0 => '', 1 => ''), + 'stage' => array(0 => array(), 1 => array()), +); +$caselib->batchCreateCaseTest(201); +unset($_POST); +$total = $tester->dao->select('count(*) total')->from(TABLE_CASE)->where('lib')->eq(201)->fetch('total'); +$cases = $tester->dao->select('*')->from(TABLE_CASE)->where('lib')->eq(201)->fetchAll('id'); + +r($total) && p() && e('12'); // 添加两条数据之后查询数据条数是否正确 +r($cases) && p('411:title,type') && e('测试导入添加1,performance'); // 添加数据之后查询新加用例的名称,用例类型 +r($cases) && p('412:title,type') && e('测试导入添加2,unit'); // 添加数据之后查询新加用例的名称,用例类型 + +system('./ztest init'); diff --git a/test/model/caselib/buildsearchform.php b/test/model/caselib/buildsearchform.php new file mode 100755 index 0000000000..1008baf312 --- /dev/null +++ b/test/model/caselib/buildsearchform.php @@ -0,0 +1,25 @@ +#!/usr/bin/env php +buildSearchForm(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); +$libID = 201; +$queryID = 10; +$actionURL = helper::createLink('caselib', 'browse', "libID=$libID&browseType=bySearch&queryID=myQueryID"); +$libs = $tester->loadModel('caselib')->getLibraries(); + +$caselib->buildSearchFormTest($libID, $libs, $queryID, $actionURL); +$search = $tester->config->testcase->search; + +r($search) && p('actionURL') && e('model/caselib/buildsearchform.php?m=caselib&f=browse&t=&libID=201&browseType=bySearch&queryID=myQueryID'); //测试设置的url参数 +r($search) && p('queryID') && e('10'); //测试设置的queryID值是否正确 diff --git a/test/model/caselib/create.php b/test/model/caselib/create.php new file mode 100755 index 0000000000..282060adc3 --- /dev/null +++ b/test/model/caselib/create.php @@ -0,0 +1,35 @@ +#!/usr/bin/env php +create(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); + +$lib = new stdClass(); +$lib->name = ""; +$result1 = $caselib->createTest($lib); + +$lib = new stdClass(); +$lib->name = '测试用例库名称'; +$lib->desc = '测试用例库描述'; +$result2 = $caselib->createTest($lib); + +$lib = new stdClass(); +$lib->name = '测试用例库名称'; +$result3 = $caselib->createTest($lib); + +r($result1) && p('name:0') && e('『名称』不能为空。'); //测试名称是空时候添加 +r($result2) && p('name') && e('测试用例库名称'); //测试添加的名称信息 +r($result2) && p('desc') && e('测试用例库描述'); //测试添加的描述信息 +r($result3) && p('name:0') && e('『名称』已经有『测试用例库名称』这条记录了。如果您确定该记录已删除,请到后台-系统-数据-回收站还原。'); //测试名称是空时候添加 + +system('./ztest init'); diff --git a/test/model/caselib/createfromimport.php b/test/model/caselib/createfromimport.php new file mode 100755 index 0000000000..0503cfb7cd --- /dev/null +++ b/test/model/caselib/createfromimport.php @@ -0,0 +1,38 @@ +#!/usr/bin/env php +createFromImport(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); +$_POST = array( + 'lib' => array(2 => 201, 3 => 201), + 'title' => array(2 => '测试导入添加1', 3 => '测试导入添加2'), + 'module' => array(2 => 0, 3 => 0), + 'pri' => array(2 => 2, 3 => 4), + 'type' => array(2 => 'performance', 3 => 'unit'), + 'stage' => array(2 => array(), 3 => array()), + 'keywords' => array(2 => 'keywords1', 3 => 'keywords2'), + 'precondition' => array(2 => '', 3 => ''), + 'isEndPage' => 1, + 'pagerID' => 1 +); + +$caselib->createFromImportTest(201); +unset($_POST); +$total = $tester->dao->select('count(*) total')->from(TABLE_CASE)->where('lib')->eq(201)->fetch('total'); +$cases = $tester->dao->select('*')->from(TABLE_CASE)->where('lib')->eq(201)->fetchAll('id'); + +r($total) && p() && e('12'); //添加两条数据之后查询数据条数是否正确 +r($cases) && p('411:title,keywords') && e('测试导入添加1,keywords1'); //添加数据之后查询新加用例的名称,关键字 +r($cases) && p('412:title,keywords') && e('测试导入添加2,keywords2'); //添加数据之后查询新加用例的名称,关键字 + +system('./ztest init'); diff --git a/test/model/caselib/delete.php b/test/model/caselib/delete.php new file mode 100755 index 0000000000..18b6e67a32 --- /dev/null +++ b/test/model/caselib/delete.php @@ -0,0 +1,20 @@ +#!/usr/bin/env php +delete(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); +$lib = $caselib->deleteTest(201); + +r($lib) && p('deleted') && e('1'); //测试删除之后deleted值是否为1 + +system('./ztest init'); diff --git a/test/model/caselib/getbyid.php b/test/model/caselib/getbyid.php new file mode 100755 index 0000000000..c1b0baef36 --- /dev/null +++ b/test/model/caselib/getbyid.php @@ -0,0 +1,20 @@ +#!/usr/bin/env php +getById(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); +$data = $caselib->getByIdTest(201); + +r($data) && p('name') && e('这是测试套件名称201'); //测试获取数据的名称信息 +r($data) && p('desc') && e('这是测试套件的描述201'); //测试获取数据的描述信息 +r($data) && p('type') && e('library'); //测试获取数据的type类型 diff --git a/test/model/caselib/getlibcases.php b/test/model/caselib/getlibcases.php new file mode 100755 index 0000000000..a2c2bf7474 --- /dev/null +++ b/test/model/caselib/getlibcases.php @@ -0,0 +1,26 @@ +#!/usr/bin/env php +getLibCases(); +cid=1 +pid=1 + +*/ +global $tester; +$tester->app->loadClass('pager', $static = true); + +$pager = new pager(0, 5, 1); +$caselib = new caselibTest(); + +$list1 = $caselib->getLibCasesTest(201, 'all'); +$list2 = $caselib->getLibCasesTest(201, 'bysearch'); +$list3 = $caselib->getLibCasesTest(201, 'all', '0', '0', 'id_desc', $pager); + +r(count($list1)) && p() && e('10'); //所有状态下,用例库下用例数量 +r(count($list2)) && p() && e('10'); //搜索状态下,用例库下用例数量 +r(count($list3)) && p() && e('5'); //分页状态下,用例库下用例数量 diff --git a/test/model/caselib/getliblink.php b/test/model/caselib/getliblink.php new file mode 100755 index 0000000000..02d8d9dba4 --- /dev/null +++ b/test/model/caselib/getliblink.php @@ -0,0 +1,24 @@ +#!/usr/bin/env php +getLibLink(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); +$link1 = $caselib->getLibLinkTest('caselib', 'create', ''); +$link2 = $caselib->getLibLinkTest('caselib', 'test', ''); +$link3 = $caselib->getLibLinkTest('tree', '', ''); +$link4 = $caselib->getLibLinkTest('', '', ''); + +r($link1) && p() && e('model/caselib/getliblink.php?m=caselib&f=browse&t=&libID=%s'); // 测试参数情况1返回值 +r($link2) && p() && e('model/caselib/getliblink.php?m=caselib&f=test&t=&libID=%s'); // 测试参数情况2返回值 +r($link3) && p() && e('model/caselib/getliblink.php?m=tree&f=&t=&libID=%s&type=caselib¤tModuleID=0'); // 测试参数情况3返回值 +r($link4) && p() && e('model/caselib/getliblink.php?m=caselib&f=browse&t=&libID=%s'); // 测试参数情况4返回值 diff --git a/test/model/caselib/getlibraries.php b/test/model/caselib/getlibraries.php new file mode 100755 index 0000000000..d36719bf77 --- /dev/null +++ b/test/model/caselib/getlibraries.php @@ -0,0 +1,18 @@ +#!/usr/bin/env php +getLibraries(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); +$list = $caselib->getLibrariesTest(); + +r($list) && p('201') && e('这是测试套件名称201'); //测试获取用例库的键值对 diff --git a/test/model/caselib/getlist.php b/test/model/caselib/getlist.php new file mode 100755 index 0000000000..a574b7e285 --- /dev/null +++ b/test/model/caselib/getlist.php @@ -0,0 +1,19 @@ +#!/usr/bin/env php +getList(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); +$list = $caselib->getListTest(); + +r(count($list)) && p() && e('1'); //测试获取列表的个数,目前只有一个 +r($list) && p('201:name') && e('这是测试套件名称201');//测试获取列表某个用例库的名称信息 diff --git a/test/model/caselib/savelibstate.php b/test/model/caselib/savelibstate.php new file mode 100755 index 0000000000..fd95b8d816 --- /dev/null +++ b/test/model/caselib/savelibstate.php @@ -0,0 +1,19 @@ +#!/usr/bin/env php +saveLibState(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); +$libs = $tester->loadModel('caselib')->getLibraries(); +$id = $caselib->saveLibStateTest(201, $libs); + +r($id) && p() && e('201'); //保存用例库状态之后返回值 diff --git a/test/model/caselib/setlibmenu.php b/test/model/caselib/setlibmenu.php new file mode 100755 index 0000000000..5d7016e1d1 --- /dev/null +++ b/test/model/caselib/setlibmenu.php @@ -0,0 +1,22 @@ +#!/usr/bin/env php +setLibMenu(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); +$libs = $tester->loadModel('caselib')->getLibraries(); +$info = $caselib->setLibMenuTest($libs, 201); + +$menuStr = <<
    +EOT; +r($tester->lang->switcherMenu) && p() && e($menuStr); //修改下拉菜单之后返回值 diff --git a/test/model/caselib/update.php b/test/model/caselib/update.php new file mode 100755 index 0000000000..985a7078f7 --- /dev/null +++ b/test/model/caselib/update.php @@ -0,0 +1,29 @@ +#!/usr/bin/env php +update(); +cid=1 +pid=1 + +*/ + +$caselib = new caselibTest(); + +$_POST['name'] = ''; +$lib1 = $caselib->updateTest(201); + +$_POST['name'] = '测试修改名称'; +$_POST['desc'] = '测试修改描述'; +$lib2 = $caselib->updateTest(201); +unset($_POST); + +r($lib1) && p('name:0') && e('『name』不能为空。'); //测试更新名称为空时候返回 +r($lib2) && p('name') && e('测试修改名称'); //测试更新之后名称信息 +r($lib2) && p('desc') && e('测试修改描述'); //测试更新之后描述信息 + +system('./ztest init'); diff --git a/test/model/projectrelease/getbyid.php b/test/model/projectrelease/getbyid.php new file mode 100755 index 0000000000..a8ae32e0bf --- /dev/null +++ b/test/model/projectrelease/getbyid.php @@ -0,0 +1,23 @@ +#!/usr/bin/env php +getByID(); +cid=1 +pid=1 + +根据releaseID查找发布详情,能查询到结果 >> 产品正常的正常的发布1 +根据releaseID查找发布详情,不能查询到结果 >> 0 + +*/ + +$releaseID = array(1, 100); + +$projectrelease = new projectreleaseTest(); + +r($projectrelease->getByIDTest($releaseID[0])) && p('name') && e('产品正常的正常的发布1'); //根据releaseID查找发布详情,能查询到结果 +r($projectrelease->getByIDTest($releaseID[1])) && p('name') && e('0'); //根据releaseID查找发布详情,不能查询到结果 \ No newline at end of file diff --git a/test/model/projectrelease/getlast.php b/test/model/projectrelease/getlast.php new file mode 100755 index 0000000000..98cf3aaf90 --- /dev/null +++ b/test/model/projectrelease/getlast.php @@ -0,0 +1,25 @@ +#!/usr/bin/env php +getLast(); +cid=1 +pid=1 + +执行projectID正常存在 >> 产品发布9 +执行projectID不存在 >> 0 +执行projectID为空 >> 8 + +*/ + +$projectID = array(11, 1000, ''); + +$projectrelease = new projectreleaseTest(); + +r($projectrelease->getLastTest($projectID[0])) && p('name') && e('产品发布9'); //执行projectID正常存在 +r($projectrelease->getLastTest($projectID[1])) && p() && e('0'); //执行projectID不存在 +r($projectrelease->getLastTest($projectID[2])) && p('id') && e('8'); //执行projectID为空 \ No newline at end of file diff --git a/test/model/projectrelease/getlist.php b/test/model/projectrelease/getlist.php new file mode 100755 index 0000000000..053b38e1d2 --- /dev/null +++ b/test/model/projectrelease/getlist.php @@ -0,0 +1,34 @@ +#!/usr/bin/env php +getList(); +cid=1 +pid=1 + +查询projectID正常存在,type为all的发布 >> 产品发布9,normal +查询projectID正常存在,type为normal的发布 >> 产品发布9,normal +查询projectID正常存在,type为terminate的发布 >> 0 +查询projectID正常存在,type为''的发布 >> 0 +查询projectID正常存在的发布 >> 产品发布9,normal +查询projectID不存在,type为all的发布 >> 0 +查询projectID为空,type为all的发布 >> 8 + +*/ + +$projectID = array(11, 1000, ''); +$type = array('all', 'normal', 'terminate', ''); + +$projectrelease = new projectreleaseTest(); + +r($projectrelease->getListTest($projectID[0], $type[0])) && p('0:name,status') && e('产品发布9,normal'); //查询projectID正常存在,type为all的发布 +r($projectrelease->getListTest($projectID[0], $type[1])) && p('0:name,status') && e('产品发布9,normal'); //查询projectID正常存在,type为normal的发布 +r($projectrelease->getListTest($projectID[0], $type[2])) && p() && e('0'); //查询projectID正常存在,type为terminate的发布 +r($projectrelease->getListTest($projectID[0], $type[3])) && p() && e('0'); //查询projectID正常存在,type为''的发布 +r($projectrelease->getListTest($projectID[0])) && p('0:name,status') && e('产品发布9,normal'); //查询projectID正常存在的发布 +r($projectrelease->getListTest($projectID[1], $type[0])) && p() && e('0'); //查询projectID不存在,type为all的发布 +r($projectrelease->getListTest($projectID[2], $type[0])) && p('0:id') && e('8'); //查询projectID为空,type为all的发布 \ No newline at end of file diff --git a/test/model/projectrelease/getreleasedbuilds.php b/test/model/projectrelease/getreleasedbuilds.php new file mode 100755 index 0000000000..1aa2de6d5f --- /dev/null +++ b/test/model/projectrelease/getreleasedbuilds.php @@ -0,0 +1,25 @@ +#!/usr/bin/env php +getReleasedBuilds(); +cid=1 +pid=1 + +执行projectID正常存在 >> 2 +执行projectID不存在 >> 0 +执行projectID为空 >> 1 + +*/ + +$projectID = array(131, 1000, ''); + +$projectrelease = new projectreleaseTest(); + +r($projectrelease->getReleasedBuildsTest($projectID[0])) && p('1') && e('2'); //执行projectID正常存在 +r($projectrelease->getReleasedBuildsTest($projectID[1])) && p() && e('0'); //执行projectID不存在 +r($projectrelease->getReleasedBuildsTest($projectID[2])) && p() && e('1'); //执行projectID为空 \ No newline at end of file diff --git a/test/model/projectrelease/linkbug.php b/test/model/projectrelease/linkbug.php new file mode 100755 index 0000000000..5e3f149d1b --- /dev/null +++ b/test/model/projectrelease/linkbug.php @@ -0,0 +1,32 @@ +#!/usr/bin/env php +linkBug(); +cid=1 +pid=1 + +测试normal状态的发布,releaseID正常存在,type为bug >> ,1,2 +测试normal状态的发布,releaseID正常存在,type为leftBug >> ,1,2 +测试normal状态的发布,releaseID正常存在,type为空 >> ,1,2, +测试terminate状态的发布,releaseID正常存在,type为bug >> ,1,2 +测试terminate状态的发布,releaseID正常存在,type为leftBug >> ,1,2 +测试terminate状态的发布,releaseID正常存在,type为空 >> ,1,2, + +*/ +$releaseID = array(1, 10); +$type = array('bug', 'leftBug', ''); + +$projectrelease = new projectreleaseTest(); + +r($projectrelease->linkBugTest($releaseID[0],$type[0])) && p('bugs') && e(',1,2'); //测试normal状态的发布,releaseID正常存在,type为bug +r($projectrelease->linkBugTest($releaseID[0],$type[1])) && p('leftBugs') && e(',1,2'); //测试normal状态的发布,releaseID正常存在,type为leftBug +r($projectrelease->linkBugTest($releaseID[0],$type[2])) && p('leftBugs') && e(',1,2,'); //测试normal状态的发布,releaseID正常存在,type为空 +r($projectrelease->linkBugTest($releaseID[1],$type[0])) && p('bugs') && e(',1,2'); //测试terminate状态的发布,releaseID正常存在,type为bug +r($projectrelease->linkBugTest($releaseID[1],$type[1])) && p('leftBugs') && e(',1,2'); //测试terminate状态的发布,releaseID正常存在,type为leftBug +r($projectrelease->linkBugTest($releaseID[1],$type[2])) && p('leftBugs') && e(',1,2,'); //测试terminate状态的发布,releaseID正常存在,type为空 +system("./ztest init"); \ No newline at end of file diff --git a/test/model/projectrelease/linkstory.php b/test/model/projectrelease/linkstory.php new file mode 100755 index 0000000000..a11bf3093d --- /dev/null +++ b/test/model/projectrelease/linkstory.php @@ -0,0 +1,23 @@ +#!/usr/bin/env php +linkStory(); +cid=1 +pid=1 + +测试normal状态的发布,releaseID正常存在 >> ,1,2 +测试terminate状态的发布,releaseID正常存在 >> ,1,2 + +*/ +$releaseID = array(1, 10); + +$projectrelease = new projectreleaseTest(); + +r($projectrelease->linkStoryTest($releaseID[0])) && p('stories') && e(',1,2'); //测试normal状态的发布,releaseID正常存在 +r($projectrelease->linkStoryTest($releaseID[1])) && p('stories') && e(',1,2'); //测试terminate状态的发布,releaseID正常存在 +system("./ztest init"); \ No newline at end of file diff --git a/test/model/projectrelease/unlinkstory.php b/test/model/projectrelease/unlinkstory.php new file mode 100755 index 0000000000..ac4fe1aba0 --- /dev/null +++ b/test/model/projectrelease/unlinkstory.php @@ -0,0 +1,32 @@ +#!/usr/bin/env php +unlinkStory(); +cid=1 +pid=1 + +测试normal状态的发布,正常存在的storyID值为2,可移除 >> 1 +测试normal状态的发布,不存在的storyID值为100,不可移除 >> 1,2 +测试normal状态的发布,不存在的storyID值为空,不可移除 >> 1,2 +测试terminate状态的发布,正常存在的storyID值为2,可移除 >> 1 +测试terminate状态的发布,不存在的storyID值为100,不可移除 >> 1,2 +测试terminate状态的发布,不存在的storyID值为空,不可移除 >> 1,2 + +*/ +$releaseID = array(1, 10); +$storyID = array(2, 100, ''); + +$projectrelease = new projectreleaseTest(); + +r($projectrelease->unlinkStoryTest($releaseID[0], $storyID[0])) && p('stories') && e('1'); //测试normal状态的发布,正常存在的storyID值为2,可移除 +r($projectrelease->unlinkStoryTest($releaseID[0], $storyID[1])) && p('stories') && e('1,2'); //测试normal状态的发布,不存在的storyID值为100,不可移除 +r($projectrelease->unlinkStoryTest($releaseID[0], $storyID[2])) && p('stories') && e('1,2'); //测试normal状态的发布,不存在的storyID值为空,不可移除 +r($projectrelease->unlinkStoryTest($releaseID[1], $storyID[0])) && p('stories') && e('1'); //测试terminate状态的发布,正常存在的storyID值为2,可移除 +r($projectrelease->unlinkStoryTest($releaseID[1], $storyID[1])) && p('stories') && e('1,2'); //测试terminate状态的发布,不存在的storyID值为100,不可移除 +r($projectrelease->unlinkStoryTest($releaseID[1], $storyID[2])) && p('stories') && e('1,2'); //测试terminate状态的发布,不存在的storyID值为空,不可移除 +system("./ztest init"); \ No newline at end of file diff --git a/test/model/projectrelease/update.php b/test/model/projectrelease/update.php new file mode 100755 index 0000000000..40e59cca1d --- /dev/null +++ b/test/model/projectrelease/update.php @@ -0,0 +1,42 @@ +#!/usr/bin/env php +update(); +cid=1 +pid=1 + +测试releaseID不存在,name在发布中不存在,date正常存在,不可修改 >> 没有数据更新 +测试releaseID为空,name在发布中不存在,date正常存在,不可修改 >> 没有数据更新 +测试releaseID正常存在,name在当前发布存在,date正常存在,可修改 >> date,2022-03-03,2022-03-31 +测试releaseID正常存在,name在当前发布存在,date为空,不可修改 >> 『date』不能为空。 +测试releaseID正常存在,name在发布中不存在,date正常存在,可修改 >> name,产品正常的正常的发布2 +测试releaseID正常存在,name在发布中不存在,date为空,不可修改 >> 『date』不能为空。 +测试releaseID正常存在,name为空,date正常存在,不可修改 >> 『name』不能为空。 +测试releaseID正常存在,name为空,date为空,不可修改 >> 『name』不能为空。;『date』不能为空。 +测试releaseID正常存在,name在其他发布存在,date正常,不可修改 >> 『name』已经有『产品发布9』这条记录了。如果您确定该记录已删除,请到后台-系统-数据-回收站还原。 + +*/ + +$releaseID = array(1, 100, ''); +$name = array('产品正常的正常的发布1', '产品发布9', '产品正常的正常的发布2', ''); +$date = array('2022-03-31', ''); + +$projectrelease = new projectreleaseTest(); + +r($projectrelease->updateTest($releaseID[1], $name[2], $date[0])) && p() && e('没有数据更新'); //测试releaseID不存在,name在发布中不存在,date正常存在,不可修改 +r($projectrelease->updateTest($releaseID[2], $name[2], $date[0])) && p() && e('没有数据更新'); //测试releaseID为空,name在发布中不存在,date正常存在,不可修改 +r($projectrelease->updateTest($releaseID[0], $name[0], $date[0])) && p('0:field,old,new') && e('date,2022-03-03,2022-03-31'); //测试releaseID正常存在,name在当前发布存在,date正常存在,可修改 +r($projectrelease->updateTest($releaseID[0], $name[0], $date[1])) && p('date:0') && e('『date』不能为空。'); //测试releaseID正常存在,name在当前发布存在,date为空,不可修改 +r($projectrelease->updateTest($releaseID[0], $name[2], $date[0])) && p('0:field,new') && e('name,产品正常的正常的发布2'); //测试releaseID正常存在,name在发布中不存在,date正常存在,可修改 +r($projectrelease->updateTest($releaseID[0], $name[2], $date[1])) && p('date:0') && e('『date』不能为空。'); //测试releaseID正常存在,name在发布中不存在,date为空,不可修改 +r($projectrelease->updateTest($releaseID[0], $name[3], $date[0])) && p('name:0') && e('『name』不能为空。'); //测试releaseID正常存在,name为空,date正常存在,不可修改 +r($projectrelease->updateTest($releaseID[0], $name[3], $date[1])) && p('name:0;date:0') && e('『name』不能为空。;『date』不能为空。'); //测试releaseID正常存在,name为空,date为空,不可修改 + +r($projectrelease->updateTest($releaseID[0], $name[1], $date[0])) && p('name:0') && e('『name』已经有『产品发布9』这条记录了。如果您确定该记录已删除,请到后台-系统-数据-回收站还原。'); //测试releaseID正常存在,name在其他发布存在,date正常,不可修改 + +system("./ztest init"); \ No newline at end of file diff --git a/xuanxuan/extension/xuan/setting/ext/view/xuanxuan.html.php b/xuanxuan/extension/xuan/setting/ext/view/xuanxuan.html.php index b612a25dfc..af63fb354a 100644 --- a/xuanxuan/extension/xuan/setting/ext/view/xuanxuan.html.php +++ b/xuanxuan/extension/xuan/setting/ext/view/xuanxuan.html.php @@ -136,7 +136,7 @@ goback, '', 'class="btn" style="min-width: 120px"');?> xuanxuan->turnon ? '' : 'disabled';?> - im->downloadXXD, 'hiddenwin', "class='btn btn-primary download download-package $disabled'");?> + im->downloadXXD, 'hiddenwin', "class='btn btn-primary download download-package $disabled'");?> im->downloadConfig, 'hiddenwin', "class='btn btn-primary download $disabled'");?> im->changeSetting, '', "class='btn'");?> im->viewDebug, '', "class='btn viewDebug iframe' data-height=220");?>