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()) { $_POST = $postData; $result = $this->invokeArgs('checkImportJira', [$step]); if(dao::isError()) return dao::getError(); return $result; } /** * Test quickImportJiraData method. * * @param string $step * @param array $postData * @access public * @return mixed */ public function quickImportJiraDataTest() { $result = $this->invokeArgs('quickImportJiraData'); if(dao::isError()) return dao::getError(); return $result; } /** * Test batchImportJiraData method. * * @param string $step * @param array $postData * @access public * @return mixed */ public function batchImportJiraDataTest() { $this->instance->session->set('jiraApi', ''); $this->instance->session->set('jiraDB', ''); $this->instance->session->set('jiraMethod', 'api'); $result = $this->invokeArgs('batchImportJiraData'); 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()) { $result = $this->invokeArgs('convertStage', [$jiraStatus, $issueType, $relations]); if(dao::isError()) return dao::getError(); 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()) { $result = $this->invokeArgs('convertStatus', [$objectType, $jiraStatus, $issueType, $relations]); if(dao::isError()) return dao::getError(); 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) { $result = $this->invokeArgs('callJiraAPI', [$url, $start]); if(dao::isError()) return dao::getError(); return $result; } /** * Test checkJiraApi method. * * @param array $jiraApiData * @access public * @return mixed */ public function checkJiraApiTest() { $result = $this->invokeArgs('checkJiraApi'); if(dao::isError()) return dao::getError(); return $result; } /** * Test deleteJiraFile method. * * @access public * @return mixed */ public function deleteJiraFileTest() { try { // 获取jirafile目录路径 global $app; $jiraPath = $this->instance->app->getTmpRoot() . '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->session->jiraMethod ?? null; // 设置测试session数据 $this->instance->session->set('jiraMethod', 'db'); // 模拟sourceDBH连接 if(empty($this->instance->sourceDBH)) { $this->instance->sourceDBH = $this->instance->dbh; } $result = $this->instance->getIssueTypeList($relations); if(dao::isError()) { $errors = dao::getError(); return $errors; } return $result; } catch (Exception $e) { return array(); } catch (Error $e) { return array(); } } /** * Test getJiraAccount method. * * @param string $userKey * @access public * @return mixed */ public function getJiraAccountTest($userKey = '') { $sql = <<instance->dbh->exec($sql); $this->instance->dbh->exec('TRUNCATE TABLE jiratmprelation'); } catch (Exception $e) {} $result = $this->invokeArgs('getJiraAccount', [$userKey]); if(dao::isError()) return dao::getError(); return $result; } /** * Test getJiraArchivedProject method. * * @param array $dataList * @access public * @return array */ public function getJiraArchivedProjectTest($dataList = array()) { try { // 备份原始session数据 global $app; $originalJiraMethod = $this->instance->session->jiraMethod ?? null; $originalJiraApi = $this->instance->session->jiraApi ?? null; // 设置测试session数据 $this->instance->session->set('jiraMethod', 'db'); // 模拟sourceDBH连接 if(empty($this->instance->sourceDBH)) { $this->instance->sourceDBH = $this->instance->dbh; } $result = $this->instance->getJiraArchivedProject($dataList); if(dao::isError()) { $errors = dao::getError(); return $errors; } return $result; } catch (Exception $e) { return array(); } catch (Error $e) { 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 tableExists method. * * @param string $table * @access public * @return mixed */ public function tableExistsTest(string $table = '') { $result = $this->instance->tableExists($table); if(dao::isError()) return dao::getError(); return $result; } /** * Test tableExists method. * * @param string $table * @access public * @return mixed */ public function tableExistsOfJiraTest(string $dbName = '', string $table = '') { $result = $this->instance->tableExistsOfJira($dbName, $table); 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->session->jiraRelation ?? null; // 设置测试session数据 if(!empty($sessionData['jiraRelation'])) { $this->instance->session->set('jiraRelation', $sessionData['jiraRelation']); } try { $result = $this->instance->getObjectDefaultValue($step); if(dao::isError()) { $errors = dao::getError(); // 恢复原始session数据 if($originalJiraRelation !== null) { $this->instance->session->set('jiraRelation', $originalJiraRelation); } else { $this->instance->session->destroy('jiraRelation'); } return $errors; } // 恢复原始session数据 if($originalJiraRelation !== null) { $this->instance->session->set('jiraRelation', $originalJiraRelation); } else { $this->instance->session->destroy('jiraRelation'); } return $result; } catch (Exception $e) { // 恢复原始session数据 if($originalJiraRelation !== null) { $this->instance->session->set('jiraRelation', $originalJiraRelation); } else { $this->instance->session->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->session->jiraUser ?? null; // 设置测试用户配置 if(!empty($userConfig)) { $this->instance->session->set('jiraUser', $userConfig); } else { $this->instance->session->set('jiraUser', array('mode' => 'account')); } $result = $this->instance->processJiraUser($jiraAccount, $jiraEmail); if(dao::isError()) return dao::getError(); // 恢复原始session数据 if($originalJiraUser !== null) { $this->instance->session->set('jiraUser', $originalJiraUser); } else { $this->instance->session->destroy('jiraUser'); } return $result; } catch (Exception $e) { // 恢复原始session数据 if(isset($originalJiraUser) && $originalJiraUser !== null) { $this->instance->session->set('jiraUser', $originalJiraUser); } else { $this->instance->session->destroy('jiraUser'); } return 'exception: ' . $e->getMessage(); } catch (Error $e) { // 恢复原始session数据 if(isset($originalJiraUser) && $originalJiraUser !== null) { $this->instance->session->set('jiraUser', $originalJiraUser); } else { $this->instance->session->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->session->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->app->getTmpRoot() . '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(); } } /** * Test formatDatetime method. * * @param string $datetime * @access public * @return string */ public function formatDatetimeTest(string $datetime): string { return $this->instance->formatDatetime($datetime); } /** * Test formatDate method. * * @param string $date * @access public * @return string */ public function formatDateTest(string $date): string { return $this->instance->formatDate($date); } }