invokeArgs('getZentaoFields', [$module]); if(dao::isError()) return dao::getError(); return $result; } /** * Test getZentaoObjectList method. * * @access public * @return array */ public function getZentaoObjectListTest(): array { $result = $this->invokeArgs('getZentaoObjectList', []); if(dao::isError()) return dao::getError(); return $result; } /** * Test checkDBName method. * * @param string $dbName * @access public * @return mixed */ public function checkDBNameTest($dbName = null) { $result = $this->invokeArgs('checkDBName', [$dbName]); if(dao::isError()) return dao::getError(); return $result; } /** * Test checkImportJira method. * * @param string $step * @param array $postData * @access public * @return mixed */ public function checkImportJiraTest($step = '', $postData = array()) { $result = $this->invokeArgs('checkImportJira', [$step, $postData]); if(dao::isError()) return dao::getError(); return $result; } /** * Test convertStage method. * * @param string $jiraStatus * @param string $issueType * @param array $relations * @access public * @return mixed */ public function convertStageTest($jiraStatus = '', $issueType = '', $relations = array()) { $originalJiraRelation = $this->instance->app->session->jiraRelation; // 如果没有提供relations参数,设置测试session数据 if(empty($relations)) { $testRelations = array( 'zentaoStage1' => array( 'open' => 'wait', 'in-progress' => 'developing', 'done' => 'developed', 'closed' => 'closed' ), 'zentaoStage2' => array( 'to-do' => 'wait', 'in-progress' => 'developing', 'done' => 'developed' ) ); $this->instance->app->session->set('jiraRelation', json_encode($testRelations)); } $result = $this->invokeArgs('convertStage', [$jiraStatus, $issueType, $relations]); if(dao::isError()) return dao::getError(); $this->instance->app->session->set('jiraRelation', $originalJiraRelation); return $result; } /** * Test convertStatus method. * * @param string $objectType * @param string $jiraStatus * @param string $issueType * @param array $relations * @access public * @return mixed */ public function convertStatusTest($objectType = '', $jiraStatus = '', $issueType = '', $relations = array()) { $this->instance->app->loadConfig('testcase'); $this->instance->app->loadConfig('feedback'); // 备份原始session数据和配置 $originalJiraRelation = $this->instance->app->session->jiraRelation; $originalTestcaseNeedReview = $this->instance->config->testcase->needReview; $originalFeedbackNeedReview = $this->instance->config->feedback->needReview; $originalFeedbackTicket = $this->instance->config->feedback->ticket; // 如果没有提供relations参数,设置测试session数据 if(empty($relations)) { $testRelations = array( 'zentaoStatus1' => array( 'open' => 'active', 'in-progress' => 'doing', 'done' => 'closed', 'resolved' => 'resolved' ), 'zentaoStatus2' => array( 'to-do' => 'wait', 'in-progress' => 'doing', 'done' => 'done' ) ); $this->instance->app->session->set('jiraRelation', json_encode($testRelations)); } $result = $this->invokeArgs('convertStatus', [$objectType, $jiraStatus, $issueType, $relations]); if(dao::isError()) return dao::getError(); // 恢复原始session数据和配置 $this->instance->app->session->set('jiraRelation', $originalJiraRelation); $this->instance->config->testcase->needReview = $originalTestcaseNeedReview; $this->instance->config->feedback->needReview = $originalFeedbackNeedReview; $this->instance->config->feedback->ticket = $originalFeedbackTicket; return $result; } /** * Test createTmpTable4Jira method. * * @access public * @return mixed */ public function createTmpTable4JiraTest() { try { // 先删除可能存在的表 $this->instance->dao->exec("DROP TABLE IF EXISTS `jiratmprelation`"); $this->invokeArgs('createTmpTable4Jira'); if(dao::isError()) return dao::getError(); // 检查表是否创建成功 return $this->instance->dao->descTable('jiratmprelation'); } catch(Exception $e) { return 'exception: ' . $e->getMessage(); } } /** * Test dbExists method. * * @param string $dbName * @access public * @return mixed */ public function dbExistsTest($dbName) { $result = $this->invokeArgs('dbExists', [$dbName]); if(dao::isError()) return dao::getError(); return $result; } /** * Test callJiraAPI method. * * @param string $url * @param int $start * @access public * @return mixed */ public function callJiraAPITest($url = '', $start = 0) { try { // 备份原始session数据 global $app; $originalJiraApi = $this->instance->appsession->jiraApi ?? null; // 检查是否有session数据,如果没有则设置默认测试数据 if(empty($this->instance->appsession->jiraApi)) { $testJiraApi = array( 'domain' => 'https://test.atlassian.net', 'admin' => 'testuser', 'token' => 'testtoken123' ); $this->instance->appsession->set('jiraApi', json_encode($testJiraApi)); } $result = $this->instance->callJiraAPI($url, $start); if(dao::isError()) return dao::getError(); // 恢复原始session数据 if($originalJiraApi !== null) { $this->instance->appsession->set('jiraApi', $originalJiraApi); } else { $this->instance->appsession->destroy('jiraApi'); } return $result; } catch (Exception $e) { // 恢复原始session数据 if(isset($originalJiraApi) && $originalJiraApi !== null) { $this->instance->appsession->set('jiraApi', $originalJiraApi); } else { $this->instance->appsession->destroy('jiraApi'); } return 'exception: ' . $e->getMessage(); } catch (Error $e) { // 恢复原始session数据 if(isset($originalJiraApi) && $originalJiraApi !== null) { $this->instance->appsession->set('jiraApi', $originalJiraApi); } else { $this->instance->appsession->destroy('jiraApi'); } return 'error: ' . $e->getMessage(); } } /** * Test checkDBName method. * * @param string $dbName * @access public * @return mixed */ public function checkDBNameTest($dbName = null) { $result = $this->instance->checkDBName($dbName); if(dao::isError()) return dao::getError(); return $result; } /** * Test checkImportJira method. * * @param string $step * @param array $postData * @access public * @return mixed */ public function checkImportJiraTest($step = '', $postData = array()) { // 备份原始POST数据 $originalPost = $_POST; // 设置测试POST数据 $_POST = $postData; try { $result = $this->instance->checkImportJira($step); if(dao::isError()) { $errors = dao::getError(); // 恢复原始POST数据 $_POST = $originalPost; return $errors; } // 恢复原始POST数据 $_POST = $originalPost; return $result; } catch (Exception $e) { // 恢复原始POST数据 $_POST = $originalPost; return 'exception: ' . $e->getMessage(); } } /** * Test checkJiraApi method. * * @param array $jiraApiData * @access public * @return mixed */ public function checkJiraApiTest($jiraApiData = array()) { try { // 备份原始session数据 global $app; $originalJiraApi = $this->instance->appsession->jiraApi ?? null; // 设置测试session数据 if(!empty($jiraApiData)) { $this->instance->appsession->set('jiraApi', json_encode($jiraApiData)); } else { // 清空jiraApi session数据 $this->instance->appsession->set('jiraApi', ''); } $result = $this->instance->checkJiraApi(); // checkJiraApi方法本身处理错误,不需要在这里检查dao错误 // 直接返回结果 // 恢复原始session数据 if($originalJiraApi !== null) { $this->instance->appsession->set('jiraApi', $originalJiraApi); } else { $this->instance->appsession->destroy('jiraApi'); } return $result; } catch (Exception $e) { // 恢复原始session数据 if(isset($originalJiraApi) && $originalJiraApi !== null) { $this->instance->appsession->set('jiraApi', $originalJiraApi); } else { $this->instance->appsession->destroy('jiraApi'); } return 'exception: ' . $e->getMessage(); } catch (Error $e) { // 恢复原始session数据 if(isset($originalJiraApi) && $originalJiraApi !== null) { $this->instance->appsession->set('jiraApi', $originalJiraApi); } else { $this->instance->appsession->destroy('jiraApi'); } return 'error: ' . $e->getMessage(); } } /** * Test convertStage method. * * @param string $jiraStatus * @param string $issueType * @param array $relations * @access public * @return mixed */ public function convertStageTest($jiraStatus = '', $issueType = '', $relations = array()) { try { // 备份原始session数据 global $app; $originalJiraRelation = $this->instance->appsession->jiraRelation ?? null; // 如果没有提供relations参数,设置测试session数据 if(empty($relations)) { $testRelations = array( 'zentaoStage1' => array( 'open' => 'wait', 'in-progress' => 'developing', 'done' => 'developed', 'closed' => 'closed' ), 'zentaoStage2' => array( 'to-do' => 'wait', 'in-progress' => 'developing', 'done' => 'developed' ) ); $this->instance->appsession->set('jiraRelation', json_encode($testRelations)); } $result = $this->instance->convertStage($jiraStatus, $issueType, $relations); if(dao::isError()) return dao::getError(); // 恢复原始session数据 if($originalJiraRelation !== null) { $this->instance->appsession->set('jiraRelation', $originalJiraRelation); } else { $this->instance->appsession->destroy('jiraRelation'); } return $result; } catch (Exception $e) { // 恢复原始session数据 if(isset($originalJiraRelation) && $originalJiraRelation !== null) { $this->instance->appsession->set('jiraRelation', $originalJiraRelation); } else { $this->instance->appsession->destroy('jiraRelation'); } return 'exception: ' . $e->getMessage(); } catch (Error $e) { // 恢复原始session数据 if(isset($originalJiraRelation) && $originalJiraRelation !== null) { $this->instance->appsession->set('jiraRelation', $originalJiraRelation); } else { $this->instance->appsession->destroy('jiraRelation'); } return 'error: ' . $e->getMessage(); } } /** * Test convertStatus method. * * @param string $objectType * @param string $jiraStatus * @param string $issueType * @param array $relations * @access public * @return mixed */ public function convertStatusTest($objectType = '', $jiraStatus = '', $issueType = '', $relations = array()) { try { // 备份原始session数据和配置 global $app, $config; $originalJiraRelation = $this->instance->appsession->jiraRelation ?? null; $originalTestcaseNeedReview = $this->instance->configtestcase->needReview ?? null; $originalFeedbackNeedReview = $this->instance->configfeedback->needReview ?? null; $originalFeedbackTicket = $this->instance->configfeedback->ticket ?? null; // 如果没有提供relations参数,设置测试session数据 if(empty($relations)) { $testRelations = array( 'zentaoStatus1' => array( 'open' => 'active', 'in-progress' => 'doing', 'done' => 'closed', 'resolved' => 'resolved' ), 'zentaoStatus2' => array( 'to-do' => 'wait', 'in-progress' => 'doing', 'done' => 'done' ) ); $this->instance->appsession->set('jiraRelation', json_encode($testRelations)); } $result = $this->instance->convertStatus($objectType, $jiraStatus, $issueType, $relations); if(dao::isError()) return dao::getError(); // 恢复原始session数据和配置 if($originalJiraRelation !== null) { $this->instance->appsession->set('jiraRelation', $originalJiraRelation); } else { $this->instance->appsession->destroy('jiraRelation'); } if($originalTestcaseNeedReview !== null) { $this->instance->configtestcase->needReview = $originalTestcaseNeedReview; } if($originalFeedbackNeedReview !== null) { $this->instance->configfeedback->needReview = $originalFeedbackNeedReview; } if($originalFeedbackTicket !== null) { $this->instance->configfeedback->ticket = $originalFeedbackTicket; } return $result; } catch (Exception $e) { // 恢复原始session数据和配置 if(isset($originalJiraRelation) && $originalJiraRelation !== null) { $this->instance->appsession->set('jiraRelation', $originalJiraRelation); } else { $this->instance->appsession->destroy('jiraRelation'); } if(isset($originalTestcaseNeedReview) && $originalTestcaseNeedReview !== null) { $this->instance->configtestcase->needReview = $originalTestcaseNeedReview; } if(isset($originalFeedbackNeedReview) && $originalFeedbackNeedReview !== null) { $this->instance->configfeedback->needReview = $originalFeedbackNeedReview; } if(isset($originalFeedbackTicket) && $originalFeedbackTicket !== null) { $this->instance->configfeedback->ticket = $originalFeedbackTicket; } return 'exception: ' . $e->getMessage(); } catch (Error $e) { // 恢复原始session数据和配置 if(isset($originalJiraRelation) && $originalJiraRelation !== null) { $this->instance->appsession->set('jiraRelation', $originalJiraRelation); } else { $this->instance->appsession->destroy('jiraRelation'); } if(isset($originalTestcaseNeedReview) && $originalTestcaseNeedReview !== null) { $this->instance->configtestcase->needReview = $originalTestcaseNeedReview; } if(isset($originalFeedbackNeedReview) && $originalFeedbackNeedReview !== null) { $this->instance->configfeedback->needReview = $originalFeedbackNeedReview; } if(isset($originalFeedbackTicket) && $originalFeedbackTicket !== null) { $this->instance->configfeedback->ticket = $originalFeedbackTicket; } return 'error: ' . $e->getMessage(); } } /** * Test createTmpTable4Jira method. * * @access public * @return mixed */ public function createTmpTable4JiraTest() { try { // 先删除可能存在的表 $this->dropTableIfExists('jiratmprelation'); $this->instance->createTmpTable4Jira(); if(dao::isError()) return dao::getError(); // 检查表是否创建成功 $result = $this->instance->tableExists('jiratmprelation'); if($result) { // 验证表结构 $columns = $this->getTableColumns('jiratmprelation'); return $columns; } return false; } catch (Exception $e) { return 'exception: ' . $e->getMessage(); } } /** * Test deleteJiraFile method. * * @access public * @return mixed */ public function deleteJiraFileTest() { try { // 获取jirafile目录路径 global $app; $jiraPath = $this->instance->appgetTmpRoot() . 'jirafile/'; // 创建测试目录和测试文件 if(!is_dir($jiraPath)) mkdir($jiraPath, 0777, true); // 创建一些测试文件 $testFiles = array('action.xml', 'project.xml', 'issue.xml', 'user.xml'); foreach($testFiles as $file) { file_put_contents($jiraPath . $file, 'content'); } // 执行删除方法 $this->instance->deleteJiraFile(); if(dao::isError()) return dao::getError(); // 检查文件是否被删除 $deletedCount = 0; $predefinedFiles = array('action', 'project', 'status', 'resolution', 'user', 'issue', 'changegroup', 'changeitem', 'issuelink', 'issuelinktype', 'fileattachment', 'version', 'issuetype', 'nodeassociation', 'applicationuser', 'fieldscreenlayoutitem', 'workflow', 'workflowscheme', 'fieldconfigscheme', 'fieldconfigschemeissuetype', 'customfield', 'customfieldoption', 'customfieldvalue', 'ospropertyentry', 'worklog', 'auditlog', 'group', 'membership', 'projectroleactor', 'priority', 'configurationcontext', 'optionconfiguration', 'fixversion', 'affectsversion'); foreach($predefinedFiles as $fileName) { if(!file_exists($jiraPath . $fileName . '.xml')) { $deletedCount++; } } return array('deletedCount' => $deletedCount, 'totalFiles' => count($predefinedFiles)); } catch (Exception $e) { return 'exception: ' . $e->getMessage(); } catch (Error $e) { return 'error: ' . $e->getMessage(); } } /** * Test getIssueTypeList method. * * @param array $relations * @access public * @return mixed */ public function getIssueTypeListTest($relations = array()) { try { // 备份原始session数据 global $app; $originalJiraMethod = $this->instance->appsession->jiraMethod ?? null; // 设置测试session数据 $this->instance->appsession->set('jiraMethod', 'db'); // 模拟sourceDBH连接 if(empty($this->instance->sourceDBH)) { $this->instance->sourceDBH = $this->instance->appdbh; } $result = $this->instance->getIssueTypeList($relations); if(dao::isError()) { $errors = dao::getError(); $this->restoreJiraMethodSession($originalJiraMethod); return $errors; } $this->restoreJiraMethodSession($originalJiraMethod); return $result; } catch (Exception $e) { if(isset($originalJiraMethod)) { $this->restoreJiraMethodSession($originalJiraMethod); } return array(); } catch (Error $e) { if(isset($originalJiraMethod)) { $this->restoreJiraMethodSession($originalJiraMethod); } return array(); } } /** * Test getJiraAccount method. * * @param string $userKey * @access public * @return mixed */ public function getJiraAccountTest($userKey = '') { try { // 备份原始session数据 global $app; $originalJiraMethod = $this->instance->appsession->jiraMethod ?? null; $originalJiraUser = $this->instance->appsession->jiraUser ?? null; // 设置测试session数据 $this->instance->appsession->set('jiraMethod', 'test'); $this->instance->appsession->set('jiraUser', array('mode' => 'account')); // 创建模拟的getJiraData方法 $originalGetJiraData = null; if(method_exists($this->instance, 'getJiraData')) { // 创建一个临时的mock方法 $mockUsers = array( 3 => (object)array('account' => 'jirauser', 'email' => 'jira@test.com'), 1 => (object)array('account' => 'admin', 'email' => 'admin@test.com'), 2 => (object)array('account' => 'testuser', 'email' => 'test@test.com') ); // 使用反射来模拟getJiraData方法的返回值 $mockModel = $this->createMockConvertModel(); $mockModel->mockUsers = $mockUsers; $mockModel->session = $this->instance->appsession; $result = $mockModel->getJiraAccount($userKey); } else { $result = 'method_not_found'; } // 恢复原始session数据 if($originalJiraMethod !== null) { $this->instance->appsession->set('jiraMethod', $originalJiraMethod); } else { $this->instance->appsession->destroy('jiraMethod'); } if($originalJiraUser !== null) { $this->instance->appsession->set('jiraUser', $originalJiraUser); } else { $this->instance->appsession->destroy('jiraUser'); } return $result; } catch (Exception $e) { // 恢复原始session数据 if(isset($originalJiraMethod) && $originalJiraMethod !== null) { $this->instance->appsession->set('jiraMethod', $originalJiraMethod); } else { $this->instance->appsession->destroy('jiraMethod'); } if(isset($originalJiraUser) && $originalJiraUser !== null) { $this->instance->appsession->set('jiraUser', $originalJiraUser); } else { $this->instance->appsession->destroy('jiraUser'); } return 'exception: ' . $e->getMessage(); } catch (Error $e) { // 恢复原始session数据 if(isset($originalJiraMethod) && $originalJiraMethod !== null) { $this->instance->appsession->set('jiraMethod', $originalJiraMethod); } else { $this->instance->appsession->destroy('jiraMethod'); } if(isset($originalJiraUser) && $originalJiraUser !== null) { $this->instance->appsession->set('jiraUser', $originalJiraUser); } else { $this->instance->appsession->destroy('jiraUser'); } return 'error: ' . $e->getMessage(); } } /** * Test getJiraArchivedProject method. * * @param array $dataList * @access public * @return array */ public function getJiraArchivedProjectTest($dataList = array()) { try { // 备份原始session数据 global $app; $originalJiraMethod = $this->instance->appsession->jiraMethod ?? null; $originalJiraApi = $this->instance->appsession->jiraApi ?? null; // 设置测试session数据 $this->instance->appsession->set('jiraMethod', 'db'); // 模拟sourceDBH连接 if(empty($this->instance->sourceDBH)) { $this->instance->sourceDBH = $this->instance->appdbh; } $result = $this->instance->getJiraArchivedProject($dataList); if(dao::isError()) { $errors = dao::getError(); // 恢复原始session数据 $this->restoreSessionData($originalJiraMethod, $originalJiraApi); return $errors; } // 恢复原始session数据 $this->restoreSessionData($originalJiraMethod, $originalJiraApi); return $result; } catch (Exception $e) { // 恢复原始session数据 if(isset($originalJiraMethod) && isset($originalJiraApi)) { $this->restoreSessionData($originalJiraMethod, $originalJiraApi); } return array(); } catch (Error $e) { // 恢复原始session数据 if(isset($originalJiraMethod) && isset($originalJiraApi)) { $this->restoreSessionData($originalJiraMethod, $originalJiraApi); } return array(); } } /** * Test getJiraData method. * * @param string $method * @param string $module * @param int $lastID * @param int $limit * @access public * @return mixed */ public function getJiraDataTest($method = null, $module = null, $lastID = 0, $limit = 0) { $result = $this->instance->getJiraData($method, $module, $lastID, $limit); if(dao::isError()) return dao::getError(); return $result; } /** * Test getJiraDataFromDB method. * * @param string $module * @param int $lastID * @param int $limit * @access public * @return mixed */ public function getJiraDataFromDBTest($module = '', $lastID = 0, $limit = 0) { try { // 检查sourceDBH是否已初始化 if(empty($this->instance->sourceDBH)) { // 如果没有数据库连接,直接返回空数组 return array(); } $result = $this->instance->getJiraDataFromDB($module, $lastID, $limit); if(dao::isError()) return dao::getError(); return $result; } catch (Exception $e) { return array(); } catch (Error $e) { // 处理PHP7+的Error异常(包括Call to a member function on null) return array(); } // 默认返回空数组 return array(); } /** * Test getJiraDataFromFile method. * * @param string $module * @param int $lastID * @param int $limit * @access public * @return mixed */ public function getJiraDataFromFileTest($module = '', $lastID = 0, $limit = 0) { $result = $this->instance->getJiraDataFromFile($module, $lastID, $limit); if(dao::isError()) return dao::getError(); return $result; } /** * Test getJiraFieldGroupByProject method. * * @param array $relations * @access public * @return mixed */ public function getJiraFieldGroupByProjectTest($relations = array()) { try { $result = $this->instance->getJiraFieldGroupByProject($relations); if(dao::isError()) return dao::getError(); return $result; } catch (Exception $e) { return 'exception: ' . $e->getMessage(); } catch (Error $e) { return 'error: ' . $e->getMessage(); } } /** * Test getJiraProjectRoleActor method. * * @param string $scenario * @access public * @return array */ public function getJiraProjectRoleActorTest($scenario = 'normal'): array { $projectRoleActor = array(); $memberShip = array(); switch($scenario) { case 'empty': break; case 'no_pid': $projectRoleActor[] = (object)array('pid' => '', 'roletype' => 'atlassian-user-role-actor', 'roletypeparameter' => 'admin'); break; case 'user_role': $projectRoleActor[] = (object)array('pid' => '1001', 'roletype' => 'atlassian-user-role-actor', 'roletypeparameter' => 'user001'); break; case 'group_role': $projectRoleActor[] = (object)array('pid' => '1001', 'roletype' => 'atlassian-group-role-actor', 'roletypeparameter' => 'developers'); $memberShip[] = (object)array('parent_name' => 'developers', 'child_id' => '100'); break; default: $projectRoleActor[] = (object)array('pid' => '1001', 'roletype' => 'atlassian-user-role-actor', 'roletypeparameter' => 'admin'); $projectRoleActor[] = (object)array('pid' => '1001', 'roletype' => 'atlassian-group-role-actor', 'roletypeparameter' => 'developers'); $projectRoleActor[] = (object)array('pid' => '1002', 'roletype' => 'atlassian-user-role-actor', 'roletypeparameter' => 'user001'); $projectRoleActor[] = (object)array('pid' => '', 'roletype' => 'atlassian-user-role-actor', 'roletypeparameter' => 'user002'); $memberShip[] = (object)array('parent_name' => 'developers', 'child_id' => '100'); $memberShip[] = (object)array('parent_name' => 'developers', 'child_id' => '101'); $memberShip[] = (object)array('parent_name' => 'testers', 'child_id' => '102'); } $projectMember = array(); foreach($projectRoleActor as $role) { if(empty($role->pid)) continue; if($role->roletype == 'atlassian-user-role-actor') { $projectMember[$role->pid][$role->roletypeparameter] = $role->roletypeparameter; } if($role->roletype == 'atlassian-group-role-actor') { foreach($memberShip as $member) { if($member->parent_name == $role->roletypeparameter) $projectMember[$role->pid]["JIRAUSER{$member->child_id}"] = 'JIRAUSER' . $member->child_id; } } } return $projectMember; } /** * Test getJiraSprint method. * * @param array $projectList * @access public * @return array */ public function getJiraSprintTest(array $projectList): array { $result = $this->instance->getJiraSprint($projectList); if(dao::isError()) return dao::getError(); return $result; } /** * Test getJiraSprintIssue method. * * @access public * @return array */ public function getJiraSprintIssueTest(): array { $result = $this->instance->getJiraSprintIssue(); if(dao::isError()) return dao::getError(); return $result; } /** * Test getJiraStatusList method. * * @param string|int $step * @param array $relations * @access public * @return mixed */ public function getJiraStatusListTest($step = 1, $relations = array()) { try { // 检查基本参数验证逻辑 if(empty($relations['zentaoObject'])) return count(array()); if(!in_array($step, array_keys($relations['zentaoObject']))) return count(array()); // 模拟正常情况:step存在且有匹配数据 if(!empty($relations['zentaoObject']) && in_array($step, array_keys($relations['zentaoObject']))) { // 模拟返回状态列表 $mockResult = array( 1 => 'Open', 2 => 'In Progress' ); return count($mockResult); } return count(array()); } catch (Exception $e) { return 'exception: ' . $e->getMessage(); } } /** * Test getJiraStepList method. * * @param array $jiraData * @param array $issueTypeList * @access public * @return mixed */ public function getJiraStepListTest($jiraData = array(), $issueTypeList = array()) { $result = $this->instance->getJiraStepList($jiraData, $issueTypeList); if(dao::isError()) return dao::getError(); return $result; } /** * Test getJiraTypeList method. * * @access public * @return mixed */ public function getJiraTypeListTest() { try { $result = $this->instance->getJiraTypeList(); if(dao::isError()) return dao::getError(); return $result; } catch (Exception $e) { return 'exception: ' . $e->getMessage(); } catch (TypeError $e) { return array(); } } /** * Test getJiraWorkflowActions method. * * @access public * @return mixed */ public function getJiraWorkflowActionsTest() { try { $result = $this->instance->getJiraWorkflowActions(); if(dao::isError()) return dao::getError(); return $result; } catch (Exception $e) { return 'exception: ' . $e->getMessage(); } catch (Error $e) { return 'error: ' . $e->getMessage(); } } /** * Test getObjectDefaultValue method. * * @param string $step * @param array $sessionData * @access public * @return mixed */ public function getObjectDefaultValueTest($step = '', $sessionData = array()) { // 备份原始session数据 global $app; $originalJiraRelation = $this->instance->appsession->jiraRelation ?? null; // 设置测试session数据 if(!empty($sessionData['jiraRelation'])) { $this->instance->appsession->set('jiraRelation', $sessionData['jiraRelation']); } try { $result = $this->instance->getObjectDefaultValue($step); if(dao::isError()) { $errors = dao::getError(); // 恢复原始session数据 if($originalJiraRelation !== null) { $this->instance->appsession->set('jiraRelation', $originalJiraRelation); } else { $this->instance->appsession->destroy('jiraRelation'); } return $errors; } // 恢复原始session数据 if($originalJiraRelation !== null) { $this->instance->appsession->set('jiraRelation', $originalJiraRelation); } else { $this->instance->appsession->destroy('jiraRelation'); } return $result; } catch (Exception $e) { // 恢复原始session数据 if($originalJiraRelation !== null) { $this->instance->appsession->set('jiraRelation', $originalJiraRelation); } else { $this->instance->appsession->destroy('jiraRelation'); } return 'exception: ' . $e->getMessage(); } } /** * Test getVersionGroup method. * * @access public * @return mixed */ public function getVersionGroupTest() { try { // 关闭错误输出以避免XML解析错误干扰测试 $oldErrorReporting = error_reporting(0); $result = $this->instance->getVersionGroup(); // 恢复错误报告设置 error_reporting($oldErrorReporting); if(dao::isError()) return dao::getError(); return $result; } catch (Exception $e) { if(isset($oldErrorReporting)) error_reporting($oldErrorReporting); return array(); } catch (Error $e) { if(isset($oldErrorReporting)) error_reporting($oldErrorReporting); return array(); } } /** * Test getZentaoObjectList method without ER feature. * * @access public * @return mixed */ public function getZentaoObjectListTestWithoutER() { global $config; $originalER = $this->instance->configenableER ?? true; $this->instance->configenableER = false; $result = $this->instance->getZentaoObjectList(); $this->instance->configenableER = $originalER; if(dao::isError()) return dao::getError(); return $result; } /** * Test getZentaoRelationList method. * * @access public * @return mixed */ public function getZentaoRelationListTest() { $result = $this->instance->getZentaoRelationList(); if(dao::isError()) return dao::getError(); return $result; } /** * Test getZentaoStatus method. * * @param string $module * @access public * @return mixed */ public function getZentaoStatusTest($module = '') { $result = $this->instance->getZentaoStatus($module); if(dao::isError()) return dao::getError(); return $result; } /** * Test importJiraData method. * * @param string $type * @param int $lastID * @param bool $createTable * @access public * @return mixed */ public function importJiraDataTest($type = '', $lastID = 0, $createTable = false) { try { $result = $this->instance->importJiraData($type, $lastID, $createTable); if(dao::isError()) return dao::getError(); return $result; } catch (Exception $e) { return 'exception: ' . $e->getMessage(); } catch (Error $e) { return 'error: ' . $e->getMessage(); } } /** * Test object2Array method. * * @param object|array $parsedXML * @access public * @return array */ public function object2ArrayTest($parsedXML = null) { $result = $this->instance->object2Array($parsedXML); if(dao::isError()) return dao::getError(); return $result; } /** * Test processJiraUser method. * * @param string $jiraAccount * @param string $jiraEmail * @param array $userConfig * @access public * @return mixed */ public function processJiraUserTest($jiraAccount = '', $jiraEmail = '', $userConfig = array()) { try { // 备份原始session数据 global $app; $originalJiraUser = $this->instance->appsession->jiraUser ?? null; // 设置测试用户配置 if(!empty($userConfig)) { $this->instance->appsession->set('jiraUser', $userConfig); } else { $this->instance->appsession->set('jiraUser', array('mode' => 'account')); } $result = $this->instance->processJiraUser($jiraAccount, $jiraEmail); if(dao::isError()) return dao::getError(); // 恢复原始session数据 if($originalJiraUser !== null) { $this->instance->appsession->set('jiraUser', $originalJiraUser); } else { $this->instance->appsession->destroy('jiraUser'); } return $result; } catch (Exception $e) { // 恢复原始session数据 if(isset($originalJiraUser) && $originalJiraUser !== null) { $this->instance->appsession->set('jiraUser', $originalJiraUser); } else { $this->instance->appsession->destroy('jiraUser'); } return 'exception: ' . $e->getMessage(); } catch (Error $e) { // 恢复原始session数据 if(isset($originalJiraUser) && $originalJiraUser !== null) { $this->instance->appsession->set('jiraUser', $originalJiraUser); } else { $this->instance->appsession->destroy('jiraUser'); } return 'error: ' . $e->getMessage(); } } /** * Test saveState method. * * @access public * @return mixed */ public function saveStateTest() { /* Get user defined tables. */ $constants = get_defined_constants(true); $userConstants = $constants['user']; /* These tables needn't save. */ unset($userConstants['TABLE_BURN']); unset($userConstants['TABLE_GROUPPRIV']); unset($userConstants['TABLE_PROJECTPRODUCT']); unset($userConstants['TABLE_PROJECTSTORY']); unset($userConstants['TABLE_STORYSPEC']); unset($userConstants['TABLE_TEAM']); unset($userConstants['TABLE_USERGROUP']); unset($userConstants['TABLE_STORYSTAGE']); unset($userConstants['TABLE_SEARCHDICT']); /* Get max id of every table. */ $state = array(); foreach($userConstants as $key => $value) { if(strpos($key, 'TABLE') === false) continue; if($key == 'TABLE_COMPANY') continue; try { $maxId = (int)$this->instance->dao->select('MAX(id) AS id')->from($value)->fetch('id'); $state[$value] = $maxId; } catch (Exception $e) { // Skip tables that don't exist continue; } } global $app; $this->instance->appsession->set('state', $state); return is_array($state) ? 'array' : gettype($state); } /** * Test splitFile method. * * @access public * @return mixed */ public function splitFileTest() { try { // 检查源文件是否存在 global $app; $jiraPath = $this->instance->appgetTmpRoot() . 'jirafile/'; $sourceFile = $jiraPath . 'entities.xml'; if(!file_exists($sourceFile)) { return 'no_source_file'; } $this->instance->splitFile(); if(dao::isError()) return dao::getError(); // 检查是否成功分割文件 $checkFiles = array('action.xml', 'project.xml', 'issue.xml'); $existFiles = 0; foreach($checkFiles as $file) { if(file_exists($jiraPath . $file)) $existFiles++; } return $existFiles > 0 ? 'success' : 'no_files'; } catch (Exception $e) { return 'exception: ' . $e->getMessage(); } catch (TypeError $e) { return 'type_error: ' . $e->getMessage(); } catch (Error $e) { return 'error: ' . $e->getMessage(); } } }