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 = '该场景有子场景或测试用例存在,要全部删除吗?';