diff --git a/module/my/control.php b/module/my/control.php index 79e00a5c5b..95a9e1e590 100755 --- a/module/my/control.php +++ b/module/my/control.php @@ -695,14 +695,29 @@ EOF; $actionURL = $this->createLink('my', $currentMethod, "mode=testcase&type=bysearch¶m=myQueryID&orderBy={$orderBy}&recTotal={$recTotal}&recPerPage={$recPerPage}&pageID={$pageID}"); $this->my->buildTestCaseSearchForm($queryID, $actionURL, $currentMethod); + $failCount = 0; + foreach($cases as $case) + { + if($case->lastRunResult && $case->lastRunResult != 'pass') $failCount ++; + if($case->needconfirm) + { + $case->status = $this->lang->story->changed; + } + else if(isset($case->fromCaseVersion) and $case->fromCaseVersion > $case->version and !$case->needconfirm) + { + $case->status = $this->lang->testcase->changed; + } + if(!$case->lastRunResult) $case->lastRunResult = $this->lang->testcase->unexecuted; + } + /* Assign. */ $this->view->title = $this->lang->my->common . $this->lang->colon . $this->lang->my->myTestCase; $this->view->cases = $cases; $this->view->users = $this->user->getPairs('noletter'); $this->view->tabID = 'test'; $this->view->type = $type; + $this->view->failCount = $failCount; $this->view->param = $param; - $this->view->summary = $this->testcase->summary($cases); $this->view->recTotal = $recTotal; $this->view->recPerPage = $recPerPage; $this->view->pageID = $pageID; diff --git a/module/my/js/testcase.ui.js b/module/my/js/testcase.ui.js index 234f2d3c39..1e3b2a9629 100644 --- a/module/my/js/testcase.ui.js +++ b/module/my/js/testcase.ui.js @@ -17,3 +17,23 @@ $(document).off('click', '.batch-btn').on('click', '.batch-btn', function() postAndLoadPage(url, form); } }); + +/** + * 设置表格的统计信息。 + * Set summary for table footer. + * + * @param element element + * @param array checkedIDList + * @access public + * @return object + */ +window.setStatistics = function(element, checks) +{ + let failCount = 0; + checks.forEach((checkID) => { + const caseInfo = element.getRowInfo(checkID).data; + if(caseInfo.lastRunResult != unexecuted && caseInfo.lastRunResult != 'pass') failCount ++; + }) + if(checks.length) return {html: element.options.checkedSummary.replaceAll('%total%', `${checks.length}`).replaceAll('%fail%', failCount)}; + return zui.formatString(element.options.defaultSummary); +} diff --git a/module/my/ui/testcase.html.php b/module/my/ui/testcase.html.php index c9150e53af..524cfb9240 100644 --- a/module/my/ui/testcase.html.php +++ b/module/my/ui/testcase.html.php @@ -9,6 +9,7 @@ declare(strict_types=1); * @link https://www.zentao.net */ namespace zin; +jsVar('unexecuted', $lang->testcase->unexecuted); featureBar ( @@ -17,9 +18,10 @@ featureBar li(searchToggle()) ); -$footToolbar = array('items' => array +$canBatchEdit = common::hasPriv('testcase', 'batchEdit'); +$footToolbar = array('items' => array ( - array('text' => $lang->edit, 'className' => 'batch-btn ' . (common::hasPriv('testcase', 'batchEdit') ? '' : 'hidden'), 'data-url' => helper::createLink('testcase', 'batchEdit', 'productID=0&branch=all&type=case&tab=my')) + $canBatchEdit ? array('text' => $lang->edit, 'className' => 'batch-btn', 'data-url' => helper::createLink('testcase', 'batchEdit', 'productID=0&branch=all&type=case&tab=my')) : null ), 'btnProps' => array('size' => 'sm', 'btnType' => 'secondary')); if($type == 'openedbyme') @@ -28,16 +30,22 @@ if($type == 'openedbyme') unset($config->my->testcase->dtable->fieldList['openedBy']); } +if($type == 'assigntome') $config->my->testcase->dtable->fieldList['title']['link']['params'] .= "&from=testtask&taskID={task}"; + $cases = initTableData($cases, $config->my->testcase->dtable->fieldList, $this->testcase); -$cols = array_values($config->my->testcase->dtable->fieldList); $data = array_values($cases); + +$defaultSummary = sprintf($lang->testcase->failSummary, count($cases), $failCount); dtable ( - set::cols($cols), set::data($data), + set::cols($config->my->testcase->dtable->fieldList), set::userMap($users), set::fixedLeftWidth('44%'), set::checkable(true), + set::defaultSummary(array('html' => $defaultSummary)), + set::checkedSummary($lang->testcase->failCheckedSummary), + set::checkInfo(jsRaw('function(checkedIDList){return window.setStatistics(this, checkedIDList);}')), set::footToolbar($footToolbar), set::footPager(usePager()), ); diff --git a/module/testcase/lang/de.php b/module/testcase/lang/de.php index ab6f588634..72d77a02d6 100644 --- a/module/testcase/lang/de.php +++ b/module/testcase/lang/de.php @@ -184,7 +184,6 @@ $lang->testcase->legendLinkBugs = 'Bug'; $lang->testcase->legendOpenAndEdit = 'Erstellt/Bearbeitet'; $lang->testcase->legendComment = 'Bemerkung'; -$lang->testcase->summary = "Fälle auf dieser Seite: %s insgesamt, %s ausgeführt."; $lang->testcase->confirmDelete = 'Möchten Sie diesen Testfall schließen?'; $lang->testcase->confirmBatchDelete = 'Möchten Sie diese Testfälle schließen?'; $lang->testcase->ditto = 'Dito'; @@ -313,25 +312,27 @@ $lang->testcase->batchChangeScene = "Batch change scene"; $lang->testcase->updateOrder = "Drag Sort"; $lang->testcase->differentProduct = "Different product"; -$lang->testcase->newScene = "Add Scene"; -$lang->testcase->sceneTitle = 'Scene Title'; -$lang->testcase->parentScene = "Parent Scene"; -$lang->testcase->scene = "Scene"; -$lang->testcase->summary = 'Total %d Top Scene,%d Independent test case.'; -$lang->testcase->summaryScene = 'Total %d Top Scene.'; -$lang->testcase->checkedSummary = '{checked} checked test cases, {run} run.'; -$lang->testcase->deleteScene = 'Delete Scene'; -$lang->testcase->editScene = 'Edit Scene'; -$lang->testcase->hasChildren = 'This scene has sub scene or test cases. Do you want to delete them all?'; -$lang->testcase->confirmDeleteScene = 'Are you sure you want to delete the scene: \"%s\"?'; -$lang->testcase->sceneb = "Scene"; -$lang->testcase->onlyScene = 'Only Scene'; -$lang->testcase->iScene = 'Scene'; -$lang->testcase->generalTitle = 'Title'; -$lang->testcase->noScene = 'No Scene'; -$lang->testcase->rowIndex = 'Row Index'; -$lang->testcase->nestTotal = 'nest total'; -$lang->testcase->normal = 'normal'; +$lang->testcase->newScene = "Add Scene"; +$lang->testcase->sceneTitle = 'Scene Title'; +$lang->testcase->parentScene = "Parent Scene"; +$lang->testcase->scene = "Scene"; +$lang->testcase->summary = 'Total %d Top Scene,%d Independent test case.'; +$lang->testcase->summaryScene = 'Total %d Top Scene.'; +$lang->testcase->failSummary = 'Total %d Cases, which did not pass %d.'; +$lang->testcase->checkedSummary = '{checked} checked test cases, {run} run.'; +$lang->testcase->failCheckedSummary = '%total% checked test cases,%fail% run fail。'; +$lang->testcase->deleteScene = 'Delete Scene'; +$lang->testcase->editScene = 'Edit Scene'; +$lang->testcase->hasChildren = 'This scene has sub scene or test cases. Do you want to delete them all?'; +$lang->testcase->confirmDeleteScene = 'Are you sure you want to delete the scene: \"%s\"?'; +$lang->testcase->sceneb = "Scene"; +$lang->testcase->onlyScene = 'Only Scene'; +$lang->testcase->iScene = 'Scene'; +$lang->testcase->generalTitle = 'Title'; +$lang->testcase->noScene = 'No Scene'; +$lang->testcase->rowIndex = 'Row Index'; +$lang->testcase->nestTotal = 'nest total'; +$lang->testcase->normal = 'normal'; /* Translation for drag modal message box. */ $lang->testcase->dragModalTitle = 'Drag and drop operation selection'; diff --git a/module/testcase/lang/en.php b/module/testcase/lang/en.php index 1f113066c8..4ff75aa9a9 100644 --- a/module/testcase/lang/en.php +++ b/module/testcase/lang/en.php @@ -312,25 +312,27 @@ $lang->testcase->batchChangeScene = "Batch change scene"; $lang->testcase->updateOrder = "Drag Sort"; $lang->testcase->differentProduct = "Different product"; -$lang->testcase->newScene = "Add Scene"; -$lang->testcase->sceneTitle = 'Scene Title'; -$lang->testcase->parentScene = "Parent Scene"; -$lang->testcase->scene = "Scene"; -$lang->testcase->summary = 'Total %d Top Scene,%d Independent test case.'; -$lang->testcase->summaryScene = 'Total %d Top Scene.'; -$lang->testcase->checkedSummary = '{checked} checked test cases, {run} run.'; -$lang->testcase->deleteScene = 'Delete Scene'; -$lang->testcase->editScene = 'Edit Scene'; -$lang->testcase->hasChildren = 'This scene has sub scene or test cases. Do you want to delete them all?'; -$lang->testcase->confirmDeleteScene = 'Are you sure you want to delete the scene: \"%s\"?'; -$lang->testcase->sceneb = "Scene"; -$lang->testcase->onlyScene = 'Only Scene'; -$lang->testcase->iScene = 'Scene'; -$lang->testcase->generalTitle = 'Title'; -$lang->testcase->noScene = 'No Scene'; -$lang->testcase->rowIndex = 'Row Index'; -$lang->testcase->nestTotal = 'nest total'; -$lang->testcase->normal = 'normal'; +$lang->testcase->newScene = "Add Scene"; +$lang->testcase->sceneTitle = 'Scene Title'; +$lang->testcase->parentScene = "Parent Scene"; +$lang->testcase->scene = "Scene"; +$lang->testcase->summary = 'Total %d Top Scene,%d Independent test case.'; +$lang->testcase->summaryScene = 'Total %d Top Scene.'; +$lang->testcase->failSummary = 'Total %d Cases, which did not pass %d.'; +$lang->testcase->checkedSummary = '{checked} checked test cases, {run} run.'; +$lang->testcase->failCheckedSummary = '%total% checked test cases,%fail% run fail。'; +$lang->testcase->deleteScene = 'Delete Scene'; +$lang->testcase->editScene = 'Edit Scene'; +$lang->testcase->hasChildren = 'This scene has sub scene or test cases. Do you want to delete them all?'; +$lang->testcase->confirmDeleteScene = 'Are you sure you want to delete the scene: \"%s\"?'; +$lang->testcase->sceneb = "Scene"; +$lang->testcase->onlyScene = 'Only Scene'; +$lang->testcase->iScene = 'Scene'; +$lang->testcase->generalTitle = 'Title'; +$lang->testcase->noScene = 'No Scene'; +$lang->testcase->rowIndex = 'Row Index'; +$lang->testcase->nestTotal = 'nest total'; +$lang->testcase->normal = 'normal'; /* Translation for drag modal message box. */ $lang->testcase->dragModalTitle = 'Drag and drop operation selection'; diff --git a/module/testcase/lang/fr.php b/module/testcase/lang/fr.php index 4092ce4498..9863bd4aa8 100644 --- a/module/testcase/lang/fr.php +++ b/module/testcase/lang/fr.php @@ -312,25 +312,27 @@ $lang->testcase->batchChangeScene = "Batch change scene"; $lang->testcase->updateOrder = "Drag Sort"; $lang->testcase->differentProduct = "Different product"; -$lang->testcase->newScene = "Add Scene"; -$lang->testcase->sceneTitle = 'Scene Title'; -$lang->testcase->parentScene = "Parent Scene"; -$lang->testcase->scene = "Scene"; -$lang->testcase->summary = 'Total %d Top Scene,%d Independent test case.'; -$lang->testcase->summaryScene = 'Total %d Top Scene.'; -$lang->testcase->checkedSummary = '{checked} checked test cases, {run} run.'; -$lang->testcase->deleteScene = 'Delete Scene'; -$lang->testcase->editScene = 'Edit Scene'; -$lang->testcase->hasChildren = 'This scene has sub scene or test cases. Do you want to delete them all?'; -$lang->testcase->confirmDeleteScene = 'Are you sure you want to delete the scene: \"%s\"?'; -$lang->testcase->sceneb = "Scene"; -$lang->testcase->onlyScene = 'Only Scene'; -$lang->testcase->iScene = 'Scene'; -$lang->testcase->generalTitle = 'Title'; -$lang->testcase->noScene = 'No Scene'; -$lang->testcase->rowIndex = 'Row Index'; -$lang->testcase->nestTotal = 'nest total'; -$lang->testcase->normal = 'normal'; +$lang->testcase->newScene = "Add Scene"; +$lang->testcase->sceneTitle = 'Scene Title'; +$lang->testcase->parentScene = "Parent Scene"; +$lang->testcase->scene = "Scene"; +$lang->testcase->summary = 'Total %d Top Scene,%d Independent test case.'; +$lang->testcase->summaryScene = 'Total %d Top Scene.'; +$lang->testcase->failSummary = 'Total %d Cases, which did not pass %d.'; +$lang->testcase->checkedSummary = '{checked} checked test cases, {run} run.'; +$lang->testcase->failCheckedSummary = '%total% checked test cases,%fail% run fail。'; +$lang->testcase->deleteScene = 'Delete Scene'; +$lang->testcase->editScene = 'Edit Scene'; +$lang->testcase->hasChildren = 'This scene has sub scene or test cases. Do you want to delete them all?'; +$lang->testcase->confirmDeleteScene = 'Are you sure you want to delete the scene: \"%s\"?'; +$lang->testcase->sceneb = "Scene"; +$lang->testcase->onlyScene = 'Only Scene'; +$lang->testcase->iScene = 'Scene'; +$lang->testcase->generalTitle = 'Title'; +$lang->testcase->noScene = 'No Scene'; +$lang->testcase->rowIndex = 'Row Index'; +$lang->testcase->nestTotal = 'nest total'; +$lang->testcase->normal = 'normal'; /* Translation for drag modal message box. */ $lang->testcase->dragModalTitle = 'Drag and drop operation selection'; diff --git a/module/testcase/lang/zh-cn.php b/module/testcase/lang/zh-cn.php index a29f34ce3f..8c6cc52727 100644 --- a/module/testcase/lang/zh-cn.php +++ b/module/testcase/lang/zh-cn.php @@ -318,7 +318,9 @@ $lang->testcase->parentScene = "父场景"; $lang->testcase->scene = "所属场景"; $lang->testcase->summary = '本页共 %d 个顶级场景,%d 个独立用例。'; $lang->testcase->summaryScene = '本页共 %d 个顶级场景。'; +$lang->testcase->failSummary = '本页共 %d 个用例,未通过 %d。'; $lang->testcase->checkedSummary = '已选中 {checked} 个用例,已执行 {run} 个。'; +$lang->testcase->failCheckedSummary = '已选中 %total% 个用例,未通过 %fail%。'; $lang->testcase->deleteScene = '删除场景'; $lang->testcase->editScene = '编辑场景'; $lang->testcase->hasChildren = '该场景有子场景或测试用例存在,要全部删除吗?';