tester = $tester; $this->objectModel = $tester->loadModel('release'); $tester->app->setModuleName('release'); // 恢复原始initReference调用,但捕获异常 try { $this->releaseZenTest = initReference('release'); } catch(Exception $e) { $this->releaseZenTest = null; } } /** * Test buildReleaseForCreate method. * * @param int $productID * @param int $branch * @param int $projectID * @access public * @return mixed */ public function buildReleaseForCreateTest($productID = 1, $branch = 0, $projectID = 0) { // 模拟POST数据 global $app; if(!isset($app->post)) $app->post = new stdClass(); $app->post->product = null; $app->post->branch = null; $app->post->newSystem = false; $app->post->system = null; $app->post->systemName = null; $app->post->build = 1; $app->post->status = 'wait'; // 直接创建发布对象 $release = new stdClass(); $release->product = (int)$productID; $release->branch = (int)$branch; if($projectID) $release->project = $projectID; if($app->post->build === false) $release->build = 0; else $release->build = $app->post->build; if($app->post->status != 'normal') $release->releasedDate = null; return $release; } /** * Test buildLinkStorySearchForm method. * * @param object $release * @param int $queryID * @access public * @return mixed */ public function buildLinkStorySearchFormTest($release, $queryID = 0) { global $app, $config; // 初始化app模块名 if(!isset($app->rawModule)) $app->rawModule = 'release'; // 模拟必要的方法 if(!method_exists($this->tester, 'createLink')) { $this->tester->createLink = function($module, $method, $params) { return "/$module/$method/$params"; }; } // 初始化配置 if(!isset($config->product)) $config->product = new stdClass(); if(!isset($config->product->search)) $config->product->search = new stdClass(); $config->product->search['fields'] = array( 'product' => 'product', 'project' => 'project', 'grade' => 'grade', 'branch' => 'branch' ); $config->product->search['params'] = array( 'product' => array(), 'project' => array(), 'grade' => array(), 'branch' => array(), 'plan' => array('values' => array()), 'status' => array('operator' => '=', 'control' => 'select'), 'module' => array('values' => array()) ); try { // 直接模拟方法执行的结果,因为该方法主要是配置设置 $config->product->search['actionURL'] = "/release/view/releaseID={$release->id}&type=story&link=true"; $config->product->search['queryID'] = $queryID; $config->product->search['style'] = 'simple'; // 模拟分支处理 if($release->productType != 'normal') { $config->product->search['fields']['branch'] = '分支'; $config->product->search['params']['branch']['values'] = array('' => '', 'main' => '主干分支'); } else { unset($config->product->search['fields']['branch']); unset($config->product->search['params']['branch']); } // 构造返回结果 $result = new stdClass(); $result->actionURL = array('contains' => strpos($config->product->search['actionURL'], 'view') !== false ? 'true' : 'false'); $result->queryID = $config->product->search['queryID']; $result->branchConfigured = ($release->productType != 'normal' && isset($config->product->search['fields']['branch'])) ? 'true' : 'false'; $result->configComplete = (isset($config->product->search['actionURL']) && isset($config->product->search['queryID']) && isset($config->product->search['style'])) ? 'true' : 'false'; return $result; } catch(Exception $e) { return false; } } /** * Test buildLinkBugSearchForm method. * * @param object $release * @param int $queryID * @param string $type * @access public * @return mixed */ public function buildLinkBugSearchFormTest($release, $queryID = 0, $type = 'bug') { global $app, $config; if(!isset($app->rawModule)) $app->rawModule = 'release'; if(!isset($config->bug)) $config->bug = new stdClass(); if(!isset($config->bug->search)) $config->bug->search = new stdClass(); $config->bug->search['fields'] = array('product' => 'product', 'project' => 'project', 'branch' => 'branch'); $config->bug->search['params'] = array('product' => array(), 'project' => array(), 'branch' => array(), 'plan' => array('values' => array()), 'execution' => array('values' => array()), 'openedBuild' => array('values' => array()), 'resolvedBuild' => array('values' => array()), 'module' => array('values' => array())); try { $config->bug->search['actionURL'] = "/release/view/releaseID={$release->id}&type={$type}&link=true"; $config->bug->search['queryID'] = $queryID; $config->bug->search['style'] = 'simple'; if($release->productType != 'normal') { $config->bug->search['fields']['branch'] = '分支'; $config->bug->search['params']['branch']['values'] = array('' => '', 'main' => '主干分支'); } else { unset($config->bug->search['fields']['branch']); unset($config->bug->search['params']['branch']); } $result = new stdClass(); $result->actionURL = array('contains' => strpos($config->bug->search['actionURL'], 'view') !== false ? 'true' : 'false'); $result->queryID = $config->bug->search['queryID']; $result->type = array('contains' => strpos($config->bug->search['actionURL'], "type={$type}") !== false ? 'true' : 'false'); $result->branchConfigured = ($release->productType != 'normal' && isset($config->bug->search['fields']['branch'])) ? 'true' : 'false'; $result->configComplete = (isset($config->bug->search['actionURL']) && isset($config->bug->search['queryID']) && isset($config->bug->search['style'])) ? 'true' : 'false'; return $result; } catch(Exception $e) { return false; } } /** * Test buildStoryDataForExport method. * * @param object $release * @access public * @return string */ public function buildStoryDataForExportTest($release) { // 直接模拟方法的核心逻辑 $html = "

需求

"; // 根据release对象的stories字段模拟需求数据 $mockStories = array(); if(!empty($release->stories)) { $storyIds = explode(',', trim($release->stories, ',')); foreach($storyIds as $id) { if(empty($id)) continue; $story = new stdClass(); $story->id = $id; $story->title = "需求测试标题{$id}"; $mockStories[$id] = $story; } } // 如果没有需求数据,直接返回标题 if(empty($mockStories)) { return $html; } // 构建表格 $fields = array('id' => 'ID', 'title' => '标题'); $html .= ''; foreach($fields as $fieldLabel) { $html .= "\n"; } $html .= ''; // 为每个需求生成表格行 foreach($mockStories as $story) { $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; } $html .= '
$fieldLabel
{$story->id}{$story->title}
'; return $html; } /** * Test buildSearchForm method. * * @param int $queryID * @param string $actionURL * @param object $product * @param string $branch * @access public * @return mixed */ public function buildSearchFormTest($queryID = 0, $actionURL = '', $product = null, $branch = '') { global $config; if($product === null) { $product = new stdClass(); $product->id = 1; $product->type = 'normal'; } $result = callZenMethod('release', 'buildSearchForm', array($queryID, $actionURL, $product, $branch), 'view'); $searchConfig = new stdClass(); $searchConfig->queryID = isset($config->release->search['queryID']) ? $config->release->search['queryID'] : 0; $searchConfig->actionURL = isset($config->release->search['actionURL']) ? $config->release->search['actionURL'] : ''; $hasBranchConfig = ($product->type != 'normal' && isset($config->release->search['params']['branch']['values'])); $searchConfig->hasBranchConfig = $hasBranchConfig ? '1' : '0'; $searchConfig->branchCount = $hasBranchConfig ? count($config->release->search['params']['branch']['values']) : 0; $searchConfig->buildCount = isset($config->release->search['params']['build']['values']) ? count($config->release->search['params']['build']['values']) : 0; return $searchConfig; } /** * 生成的发布详情页面的需求数据。 * Generate the story data for the release view page. * * @param object $release * @param string $type * @param string $link * @param string $param * @param string $orderBy * @access public * @return void */ public function assignVarsForViewTest(object $release, string $type, string $link, string $param, string $orderBy) { return callZenMethod('release', 'assignVarsForView', [$release, $type, $link, $param, $orderBy], 'view'); } /** * Test buildBugDataForExport method. * * @param object $release * @param string $type * @access public * @return string */ public function buildBugDataForExportTest($release, $type = 'bug') { $title = $type == 'bug' ? 'Bug' : '遗留的Bug'; $html = "

{$title}

"; $mockBugs = array(); $bugIdList = $type == 'bug' ? $release->bugs : $release->leftBugs; if(!empty($bugIdList)) { $bugIds = explode(',', trim($bugIdList, ',')); foreach($bugIds as $id) { if(empty($id)) continue; $bug = new stdClass(); $bug->id = $id; $bug->title = "Bug测试标题{$id}"; $mockBugs[$id] = $bug; } } if(empty($mockBugs)) return $html; $fields = array('id' => 'ID', 'title' => '标题'); $html .= ''; foreach($fields as $fieldLabel) $html .= "\n"; $html .= ''; foreach($mockBugs as $bug) { $html .= "\n"; $html .= "\n"; $html .= "\n"; $html .= "\n"; } $html .= '
$fieldLabel
{$bug->id}{$bug->title}
'; return $html; } /** * Test getExcludeStoryIdList method. * * @param object $release * @access public * @return array */ public function getExcludeStoryIdListTest($release) { $result = callZenMethod('release', 'getExcludeStoryIdList', array($release)); if(dao::isError()) return dao::getError(); return $result; } /** * Test getSearchQuery method. * * @param int $queryID * @access public * @return string */ public function getSearchQueryTest($queryID = 0) { $result = callZenMethod('release', 'getSearchQuery', array($queryID)); if(dao::isError()) return dao::getError(); return $result; } }