batchrun.html.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217
  1. <?php
  2. /**
  3. * The batch run view file of testtask module of ZenTaoPMS.
  4. * @copyright Copyright 2009-2023 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.zentao.net)
  5. * @license ZPL(https://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
  6. * @author Tingting Dai <daitingting@easycorp.ltd>
  7. * @package testtask
  8. * @link https://www.zentao.net
  9. */
  10. namespace zin;
  11. if(count($cases) != count($caseIdList))
  12. {
  13. h::js("zui.Modal.alert('{$lang->testtask->skipChangedCases}');");
  14. }
  15. if(!empty($emptyCases))
  16. {
  17. $emptyCasesTip = sprintf($lang->testtask->emptyCases, $emptyCases);
  18. pageJS("zui.Modal.alert({message: '{$emptyCasesTip}', icon: 'icon-exclamation-sign', iconClass: 'warning-pale rounded-full icon-2x'});\n");
  19. }
  20. unset($lang->testcase->resultList['n/a']);
  21. $caseItems = array();
  22. foreach($cases as $caseID => $case)
  23. {
  24. if($case->status == 'wait') continue;
  25. $stepItems = array();
  26. if(!empty($steps[$caseID]))
  27. {
  28. $lastGradeId = array();
  29. $grades = array();
  30. $preGrade = 0;
  31. foreach($steps[$caseID] as $stepID => $step)
  32. {
  33. if(empty($step->parent)) $grades[$step->id] = 1;
  34. if(!empty($step->parent)) $grades[$step->id] = $grades[$step->parent] + 1;
  35. $grade = $grades[$step->id];
  36. if(!isset($lastGradeId[$grade])) $lastGradeId[$grade] = 0;
  37. $lastGradeId[$grade] ++;
  38. if($preGrade > $grade)
  39. {
  40. foreach($lastGradeId as $thisGrade => $thisId)
  41. {
  42. if($thisGrade > $grade) unset($lastGradeId[$thisGrade]);
  43. }
  44. }
  45. $currentID = $lastGradeId[1];
  46. if($grade > 1) $currentID .= '.' . $lastGradeId[2];
  47. if($grade > 2) $currentID .= '.' . $lastGradeId[3];
  48. $stepClass = "step-{$step->type} pl-" . ($grade - 1) * 2;
  49. $stepResult = count($steps[$caseID]) == count($stepItems) + 1 ? 'fail' : 'pass';
  50. $preGrade = $grade;
  51. $stepItems[] = h::tr
  52. (
  53. h::td
  54. (
  55. setStyle('width', '30%'),
  56. set::className('break-words'),
  57. set::colspan($step->type == 'group' ? 2 : 1),
  58. span
  59. (
  60. set::className($stepClass),
  61. set::hint(true),
  62. $currentID . '、' . htmlspecialchars_decode($step->desc)
  63. )
  64. ),
  65. $step->type != 'group' ? h::td
  66. (
  67. setStyle('width', '30%'),
  68. set::className('break-words'),
  69. span
  70. (
  71. set::hint(true),
  72. $lang->testcase->stepExpect . ':' . htmlspecialchars_decode($step->expect)
  73. )
  74. ) : null,
  75. $step->type != 'group' ? h::td
  76. (
  77. setStyle('width', '90px'),
  78. set::className("hidden steps"),
  79. picker
  80. (
  81. set::name("steps[$caseID][$stepID]"),
  82. set::items($lang->testcase->resultList),
  83. set::required(true),
  84. set::value($stepResult)
  85. )
  86. ) : null,
  87. $step->type != 'group' ? h::td
  88. (
  89. set::className("hidden reals"),
  90. input
  91. (
  92. set::name("reals[$caseID][$stepID]")
  93. )
  94. ) : null
  95. );
  96. }
  97. }
  98. $caseItems[] = h::tr
  99. (
  100. h::td
  101. (
  102. $caseID,
  103. input
  104. (
  105. set::type('hidden'),
  106. set::name("version[$caseID]"),
  107. set::value($case->version)
  108. )
  109. ),
  110. h::td
  111. (
  112. h::span
  113. (
  114. set::hint(true),
  115. $modules[$case->module]
  116. )
  117. ),
  118. h::td
  119. (
  120. set::className('break-words'),
  121. h::span
  122. (
  123. set::hint(true),
  124. $case->title
  125. )
  126. ),
  127. h::td
  128. (
  129. set::className('precondition break-words'),
  130. span
  131. (
  132. set::hint(true),
  133. $case->precondition
  134. )
  135. ),
  136. h::td
  137. (
  138. radioList
  139. (
  140. set::primary(true),
  141. set::name("results[$caseID]"),
  142. set::value('pass'),
  143. set::inline(false),
  144. set::items($lang->testcase->resultList)
  145. )
  146. ),
  147. h::td
  148. (
  149. set::className(empty($steps[$caseID]) ? 'hidden reals' : 'stepsAndExpect'),
  150. !empty($steps[$caseID]) ? h::table
  151. (
  152. set::className('table bordered'),
  153. $stepItems
  154. ) : null,
  155. empty($steps[$caseID]) ? input
  156. (
  157. set::name("reals[$caseID][]")
  158. ) : null
  159. )
  160. );
  161. }
  162. formPanel
  163. (
  164. set::title(($from == 'testtask' ? $lang->testtask->common . $lang->hyphen : '') . $lang->testtask->batchRun),
  165. set::width('auto'),
  166. on::click('[name^=results]', 'toggleAction'),
  167. on::keyup('[name^=reals]', 'toggleStep'),
  168. h::table
  169. (
  170. set::className('table bordered'),
  171. h::thead
  172. (
  173. h::tr(h::th
  174. (
  175. setStyle('width', '60px'),
  176. $lang->idAB
  177. ), h::th
  178. (
  179. setStyle('width', '100px'),
  180. $lang->testcase->module
  181. ), h::th
  182. (
  183. setStyle('width', '200px'),
  184. $lang->testcase->title
  185. ), h::th
  186. (
  187. setStyle('width', '100px'),
  188. set::className('precondition'),
  189. $lang->testcase->precondition
  190. ), h::th
  191. (
  192. setStyle('width', '100px'),
  193. $lang->testcase->resultAB
  194. ), h::th
  195. (
  196. $lang->testcase->stepDesc . $lang->slash . $lang->testcase->stepExpect
  197. ))
  198. ),
  199. h::tbody
  200. (
  201. $caseItems
  202. )
  203. )
  204. );
  205. render();