tao.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. <?php
  2. class caselibTao extends caselibModel
  3. {
  4. /**
  5. * 初始化导入的用例。
  6. * Init imported case.
  7. *
  8. * @param object $data
  9. * @access public
  10. * @return bool|arry
  11. */
  12. protected function initImportedCase($data)
  13. {
  14. $line = 1;
  15. $cases = array();
  16. if($this->config->edition != 'open') $fieldList = $this->loadModel('workflowaction')->getFields('caselib', 'showimport');
  17. $this->loadModel('testcase');
  18. foreach($data->lib as $key => $lib)
  19. {
  20. $key = (int)$key;
  21. $caseData = new stdclass();
  22. $caseData->lib = $lib;
  23. $caseData->module = (int)$data->module[$key];
  24. $caseData->title = $data->title[$key];
  25. $caseData->pri = (int)$data->pri[$key];
  26. $caseData->type = $data->type[$key];
  27. $caseData->stage = join(',', $data->stage[$key]);
  28. $caseData->keywords = $data->keywords[$key];
  29. $caseData->frequency = 1;
  30. $caseData->precondition = nl2br($data->precondition[$key]);
  31. list($caseData->steps, $caseData->stepType) = $this->testcase->processStepsOrExpects($data->steps[$key]);
  32. list($caseData->expects) = $this->testcase->processStepsOrExpects($data->expects[$key]);
  33. /* 追加工作流字段,保存到数据库。 */
  34. if($this->config->edition != 'open')
  35. {
  36. foreach($fieldList as $field)
  37. {
  38. if(empty($field->show)) continue;
  39. if(!isset($data->{$field->field}[$key])) continue;
  40. $fieldValue = $data->{$field->field}[$key];
  41. $caseData->{$field->field} = $fieldValue;
  42. }
  43. }
  44. if(isset($this->config->testcase->create->requiredFields))
  45. {
  46. $requiredFields = explode(',', $this->config->testcase->create->requiredFields);
  47. foreach($requiredFields as $requiredField)
  48. {
  49. $requiredField = trim($requiredField);
  50. if(!isset($caseData->$requiredField)) continue;
  51. if(empty($caseData->$requiredField)) dao::$errors[$requiredField][] = sprintf($this->lang->testcase->noRequire, $line, $this->lang->testcase->$requiredField);
  52. }
  53. }
  54. $cases[$key] = $caseData;
  55. $line++;
  56. }
  57. if(dao::isError()) return false;
  58. return $cases;
  59. }
  60. /**
  61. * 检查步骤是否改变。
  62. * Check the step is changed or not.
  63. *
  64. * @param array $oldSteps
  65. * @param array $steps
  66. * @access private
  67. * @return bool
  68. */
  69. private function checkStepChanged($oldSteps, $steps)
  70. {
  71. if(($oldSteps != $steps) || (count($oldSteps) != count($steps))) return true;
  72. /* Compare every step. */
  73. $stepChanged = false;
  74. foreach($oldSteps as $id => $oldStep)
  75. {
  76. if(trim($oldStep->desc) != trim($steps[$id]->desc) || trim($oldStep->expect) != $steps[$id]->expect)
  77. {
  78. $stepChanged = true;
  79. break;
  80. }
  81. }
  82. return $stepChanged;
  83. }
  84. /**
  85. * 根据描述获取用例步骤。
  86. * Get steps form descs.
  87. *
  88. * @param array $descs
  89. * @param array $stepTypes
  90. * @param array $expects
  91. * @access private
  92. * @return array
  93. */
  94. private function processSteps($descs, $stepTypes, $expects)
  95. {
  96. $steps = array();
  97. foreach($descs as $id => $desc)
  98. {
  99. $desc = trim($desc);
  100. if(empty($desc)) continue;
  101. $step = new stdclass();
  102. $step->type = $stepTypes[$id];
  103. $step->desc = htmlSpecialString($desc);
  104. $step->expect = htmlSpecialString(trim($expects[$id]));
  105. $steps[] = $step;
  106. }
  107. return $steps;
  108. }
  109. /**
  110. * 更新导入的用例。
  111. * Update imported case.
  112. *
  113. * @param int $key
  114. * @param object $caseData
  115. * @param object $data
  116. * @param bool $forceNotReview
  117. * @param object $oldCase
  118. * @access protected
  119. * @return bool
  120. */
  121. protected function updateImportedCase($key, $caseData, $data, $forceNotReview, $oldCase)
  122. {
  123. $caseID = $data->id[$key];
  124. /* 如果已经存在的用例和导入的用例的用例库不同,不导入。*/
  125. /* Ignore updating cases for different libs. */
  126. if($oldCase->lib != $caseData->lib) return false;
  127. $stepChanged = $this->loadModel('testcase')->processStepsChanged($caseData, $oldCase->steps);
  128. $changes = common::createChanges($oldCase, $caseData);
  129. if(!$changes && !$stepChanged) return false;
  130. $caseData->id = $caseID;
  131. $caseData->product = 0;
  132. $caseData->branch = 0;
  133. $caseData->story = 0;
  134. $caseData->lastEditedBy = $this->app->user->account;
  135. $caseData->lastEditedDate = helper::now();
  136. $caseData->stepChanged = $stepChanged;
  137. $caseData->version = $stepChanged ? $oldCase->version + 1 : $oldCase->version;
  138. if($stepChanged && !$forceNotReview) $caseData->status = 'wait';
  139. $changes = $this->testcase->update($caseData, $oldCase);
  140. if(dao::isError()) return false;
  141. $actionID = $this->loadModel('action')->create('case', (int)$caseID, 'Edited');
  142. $this->action->logHistory($actionID, $changes);
  143. return !dao::isError();
  144. }
  145. }