znt/module/testtask/ui/results.html.php

337 lines
12 KiB
PHP
Raw Permalink Normal View History

<?php
declare(strict_types=1);
/**
* The results view file of testcase module of ZenTaoPMS.
* @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
* @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
* @author Mengyi Liu <liumengyi@easycorp.ltd>
* @package testcase
* @link https://www.zentao.net
*/
namespace zin;
jsVar('tab', $app->tab);
modalHeader
(
set::title($lang->testtask->lblResults),
set::entityText($case->title),
set::entityID($case->id),
);
div
(
setClass('border-b'),
div
(
h::strong($lang->testcase->precondition)
),
div
(
setClass('leading-6 my-2', empty($case->precondition) ? 'h-6' : ''),
nl2br($case->precondition)
)
);
$count = count($results);
$trs = array();
$fileModals = array();
$trCount = 1;
$failCount = 0;
$isEn = $app->getClientLang() == 'en';
foreach($results as $i => $result)
{
$class = ($result->caseResult == 'pass' ? 'success' : ($result->caseResult == 'fail' ? 'danger' : ($result->caseResult == 'blocked' ? 'warning' : '')));
$fileCount = count($result->files);
$isChinese = strpos($app->getClientLang(), 'zh-') !== false;
if($result->node == 0 && $result->task > 0)
{
$taskResult = $isChinese ? sprintf($lang->testtask->runInTask, zget($testtasks, $result->task, ''), zget($builds, $result->build, '')) : sprintf($lang->testtask->runInTask, zget($testtasks, $result->task, ''), zget($users, $result->lastRunner), zget($builds, $result->build, ''));
}
else
{
$taskResult = !$isChinese ? ' by <strong>' . zget($users, $result->lastRunner) . '</strong>' : '';
}
if($class != 'success') $failCount ++;
$trs[] = h::tr
(
setClass("result-item result{$class} h-12 is-collapsed"),
on::click('toggleShowResults'),
set('data-id', $result->id),
set('data-status', $result->node > 0 && empty($result->ZTFResult) ? 'running': 'ready'),
h::td
(
span(setClass('toggle-icon inline-block align-middle mr-2')),
width('120px'),
label(setClass('mx-2 gray-pale'), "#{$result->id}"),
$result->date,
$result->node > 0 ? sprintf($lang->testtask->runNode, zget($users, $result->lastRunner), $result->nodeName, $lang->testtask->runCase) : '',
$result->node == 0 || !empty($result->ZTFResult) ? html
(
$isChinese ? sprintf($lang->testtask->runCaseResult, zget($users, $result->lastRunner), $taskResult, $class, $lang->testcase->resultList[$result->caseResult]) : sprintf($lang->testtask->runCaseResult, $taskResult, $class, $lang->testcase->resultList[$result->caseResult])
) : h::strong
(
setClass('text-waring'),
$lang->testtask->running
),
$result->node > 0 ? span
(
setClass('label'),
$lang->testtask->auto
) : null
)
);
$stepResultTrs = array();
foreach($result->stepResults as $key => $stepResult)
{
if(empty($stepResult['id'])) $stepResult['id'] = 0;
if(empty($stepResult['type'])) $stepResult['type'] = 'step';
if(empty($stepResult['parent'])) $stepResult['parent'] = 0;
if(empty($stepResult['result'])) $stepResult['result'] = 0;
if(empty($stepResult['grade'])) $stepResult['grade'] = 0;
$itemTds = array();
$modalID = $result->id . '-' . $key;
$fileCount = count($stepResult['files']);
$resultFile = !empty($stepResult['files']) ? a
(
on::click('setFileModalHeight'),
set::href("#stepResult{$modalID}"),
set('data-toggle', 'modal'),
set('data-position', 'center'),
icon('paper-clip'),
$fileCount
) : '';
$expectWidth = $isEn ? 'calc(25%)' : 'calc(25% + 2px)';
$versionWidth = $isEn ? '94px' : '80px';
$resultWidth = $isEn ? '90px' : '56px';
$stepWidth = $isEn ? 'calc(75% - 504px)' : 'calc(75% - 292px)';
$itemTds[] = div
(
setClass('text-left flex border-r break-all'),
width($expectWidth),
isset($stepResult['expect']) ? html(nl2br($stepResult['expect'])) : ''
);
$itemTds[] = div
(
setClass('text-left flex border-r text-gray'),
width($versionWidth),
isset($stepResult['version']) ? "#{$stepResult['version']}" : ''
);
$itemTds[] = !empty($stepResult['result']) ? div
(
setClass("status-{$stepResult['result']} text-center flex border-r"),
width('80px'),
$lang->testcase->resultList[$stepResult['result']]
) : div
(
setClass('border-r'),
width('80px')
);
$itemTds[] = !empty($stepResult['result']) ? div
(
setClass('text-left flex border-r break-all'),
width('240px'),
html(nl2br($stepResult['real'] ?? ''))
) : div
(
setClass('border-r'),
width('240px')
);
if(empty($stepResult['result']))
{
$itemTds[] = div(width('56px'));
}
else
{
$itemTds[] = div
(
setClass('text-center flex'),
width('56px'),
!empty($stepResult['files']) ? a
(
on::click('setFileModalHeight'),
set::href("#stepResultFileModal{$modalID}"),
set('data-toggle', 'modal'),
set('data-position', 'center'),
icon('paper-clip'),
$fileCount
) : ''
);
}
$fileModals[] = modal
(
set::id("stepResultFileModal{$modalID}"),
!empty($stepResult['files']) ? fileList(set::extra($stepResult['id']), set::files($stepResult['files'])) : ''
);
$stepResultTrs[] = div
(
setClass("step flex border-b step-{$stepResult['type']} "),
set('data-parent', $stepResult['parent']),
set('data-grade', $stepResult['grade']),
set('data-id', $key),
div
(
setClass('step-id flex border-r check-item'),
width($stepWidth),
$result->caseResult == 'fail' ? checkbox
(
on::click('toggleCheckChildItem'),
set::id("stepIdList[{$result->id}][{$stepResult['id']}]"),
set('name', "stepIdList[{$result->id}][{$stepResult['id']}]"),
set('value', $key)
) : '',
div
(
setClass('inputGroup row', 'pl-' . ((zget($stepResult, 'grade', 1) - 1) * 2)),
span
(
setClass('step-item-id mr-2'),
zget($stepResult, 'name', '')
),
div(setClass('wrap break-all'), html(nl2br(zget($stepResult, 'desc', ''))))
)
),
$itemTds
);
}
$stepResultTrs[] = !empty($result->ZTFResult) && $result->node > 0 ? div
(
h::p($lang->testtask->runningLog),
h::p(html($result->ZTFResult))
) : '';
$projectParam = $this->app->tab == 'project' ? "projectID={$this->session->project}," : '';
$executionParam = $this->app->tab == 'execution' ? "executionID={$this->session->execution}" : "";
$executionParam = isset($testtask) ? "executionID={$testtask->execution}" : $executionParam;
$params = isset($testtask) ? ",testtask={$testtask->id}" : "";
$params = $params . ',buildID=' . (isset($testtask->build) ? $testtask->build : $result->build);
$linkParams = "product={$case->product}&branch={$case->branch}&extras={$projectParam}caseID={$case->id},version={$case->version},resultID={$result->id},runID={$result->run}{$params}";
if($executionParam) $params .= ',' . $executionParam;
$trs[] = h::tr
(
set::id('tr-detail_' . $trCount ++),
setClass('result-detail hidden'),
h::td
(
setClass('pd-0'),
form
(
set('data-params', $linkParams),
set::actions(array()),
div
(
setClass('resultSteps ' . $result->caseResult),
div
(
setClass('steps-header flex border-b'),
div
(
width($stepWidth),
setClass('text-left desc border-r'),
$lang->testcase->stepDesc
),
div
(
width('calc(25%)'),
setClass('text-left border-r'),
$lang->testcase->stepExpect
),
div
(
width($versionWidth),
setClass('text-center border-r'),
$lang->testcase->version
),
div
(
width('80px'),
setClass('text-center border-r'),
$lang->testcase->resultAB
),
div
(
width('240px'),
setClass('text-left border-r'),
$lang->testcase->real
),
div
(
width($resultWidth),
setClass('text-left'),
$lang->attach
)
),
div
(
setClass($isEn ? 'steps-body' : 'steps-body ml-2'),
$stepResultTrs
),
$result->caseResult == 'fail' && common::hasPriv('testcase', 'createBug') ? div
(
setClass('check-all flex items-center h-12 pl-4 border-t'),
checkbox
(
on::click('toggleCheckAll'),
set::id("checkAll[{$i}]"),
set('type', 'checkbox'),
set('name', 'checkAll'),
set::text($lang->selectAll)
),
div
(
btn
(
setClass('btn h-7 px-6 ml-8 to-bug-button'),
set::type('primary'),
on::click('createBug'),
$lang->testcase->createBug
)
)
) : ''
)
)
)
);
}
$resultItem = array();
$resultItem[] = span
(
setClass('px-3 my-1 border-r'),
html(sprintf($lang->testtask->showResult, $count))
);
$resultItem[] = span
(
setClass('pl-3 my-1'),
html(sprintf($lang->testtask->showFail, $failCount))
);
div
(
div
(
setClass('main' . ($type != 'fail' ? ' mt-6' : '')),
set::id('casesResults'),
$case->auto != 'unit' && $type != 'fail' ? formRowGroup
(
set::title($lang->testcase->resultAB),
set::items
(
$resultItem
)
) : null,
h::table
(
setClass('table border'),
$trs
),
$fileModals
)
);
render();