From 86b5e908e6499a52911a3764f2fc5b91ff9fd840 Mon Sep 17 00:00:00 2001 From: daitingting Date: Tue, 30 May 2023 03:24:26 +0000 Subject: [PATCH] * Refactor getModuleOwner function. --- module/bug/model.php | 56 ++++++++++--------- module/bug/test/bug.class.php | 16 ++---- module/bug/test/model/getmoduleowner.php | 51 ++++++++--------- .../model/yaml/getmoduleowner/module.yaml | 21 +++++++ .../model/yaml/getmoduleowner/product.yaml | 8 +++ 5 files changed, 89 insertions(+), 63 deletions(-) create mode 100644 module/bug/test/model/yaml/getmoduleowner/module.yaml create mode 100644 module/bug/test/model/yaml/getmoduleowner/product.yaml diff --git a/module/bug/model.php b/module/bug/model.php index 857275fa74..85fb1789a9 100644 --- a/module/bug/model.php +++ b/module/bug/model.php @@ -284,43 +284,47 @@ class bugModel extends model } /** - * Get module owner. + * 获取模块的负责人。 + * Get the owner of module. * * @param int $moduleID * @param int $productID * @access public - * @return string + * @return array */ - public function getModuleOwner($moduleID, $productID) + public function getModuleOwner(int $moduleID, int $productID): array { $users = $this->loadModel('user')->getPairs('nodeleted'); - $owner = $this->dao->findByID($productID)->from(TABLE_PRODUCT)->fetch('QD'); - $owner = isset($users[$owner]) ? $owner : ''; - if($moduleID) + /* 获取所属产品的测试负责人。*/ + /* Return the QD of the product. */ + $account = $this->dao->findByID($productID)->from(TABLE_PRODUCT)->fetch('QD'); + $account = isset($users[$account]) ? $account : ''; + $realname = zget($users, $account, ''); + + /* 如果没有模块 ID,直接返回测试负责人。*/ + if(!$moduleID) return array($account, $realname); + + /* 获取模块,如果模块为空,直接返回测试负责人。*/ + $module = $this->dao->findByID($moduleID)->from(TABLE_MODULE)->andWhere('root')->eq($productID)->fetch(); + if(empty($module)) return array($account, $realname); + + /* 如果模块有负责人返回模块负责人。*/ + if($module->owner && isset($users[$module->owner])) return array($module->owner, $users[$module->owner]); + + /* 获取除了模块ID以外的模块的路径,如果没有其他路径,返回测试负责人。*/ + $moduleIdList = explode(',', trim(str_replace(",$module->id,", ',', $module->path), ',')); + if(!$moduleIdList) return array($account, $realname); + + /* 从上级到下级,如果有模块有负责人,返回模块负责人。*/ + krsort($moduleIdList); + $modules = $this->dao->select('*')->from(TABLE_MODULE)->where('id')->in($moduleIdList)->andWhere('deleted')->eq('0')->fetchAll('id'); + foreach($modules as $module) { - $module = $this->dao->findByID($moduleID)->from(TABLE_MODULE)->andWhere('root')->eq($productID)->fetch(); - if(empty($module)) return $owner; - - if($module->owner and isset($users[$module->owner])) return $module->owner; - - $moduleIdList = explode(',', trim(str_replace(",$module->id,", ',', $module->path), ',')); - krsort($moduleIdList); - if($moduleIdList) - { - $modules = $this->dao->select('*')->from(TABLE_MODULE)->where('id')->in($moduleIdList)->andWhere('deleted')->eq(0)->fetchAll('id'); - foreach($moduleIdList as $moduleID) - { - if(isset($modules[$moduleID])) - { - $module = $modules[$moduleID]; - if($module->owner and isset($users[$module->owner])) return $module->owner; - } - } - } + if($module->owner && isset($users[$module->owner])) return array($module->owner, $users[$module->owner]); } - return $owner; + return array($account, $realname); } /** diff --git a/module/bug/test/bug.class.php b/module/bug/test/bug.class.php index 01db24a804..d908a699ad 100644 --- a/module/bug/test/bug.class.php +++ b/module/bug/test/bug.class.php @@ -767,25 +767,21 @@ class bugTest } /** + * 获取模块的负责人的测试用例。 * Test get module owner. * * @param int $moduleID * @param int $productID * @access public - * @return string + * @return array */ - public function getModuleOwnerTest($moduleID, $productID) + public function getModuleOwnerTest(int $moduleID, int $productID): array { $owner = $this->objectModel->getModuleOwner($moduleID, $productID); - if(dao::isError()) - { - return dao::getError(); - } - else - { - return $owner; - } + if(dao::isError()) return dao::getError(); + + return $owner; } /** diff --git a/module/bug/test/model/getmoduleowner.php b/module/bug/test/model/getmoduleowner.php index 800e2d440e..ff767fd68a 100755 --- a/module/bug/test/model/getmoduleowner.php +++ b/module/bug/test/model/getmoduleowner.php @@ -4,41 +4,38 @@ include dirname(__FILE__, 5) . '/test/lib/init.php'; include dirname(__FILE__, 2) . '/bug.class.php'; su('admin'); +zdTable('user')->gen(10); +zdTable('module')->config('module')->gen(4); +zdTable('product')->config('product')->gen(2); + /** title=bugModel->getModuleOwner(); +timeout=0 cid=1 -pid=1 -查询模块1821 产品1的owner >> test1 -查询模块1821 产品2的owner >> test2 -查询模块1821 产品3的owner >> test3 -查询模块1821 不存在的产品1000001的owner >> 0 -查询模块1821 产品1的owner >> test1 -查询模块1821 产品2的owner >> test2 -查询模块1821 产品3的owner >> test3 -查询模块1821 不存在的产品1000001的owner >> 0 -查询模块1821 产品1的owner >> test1 -查询模块1821 产品2的owner >> test2 -查询模块1821 产品3的owner >> test3 -查询模块1821 不存在的产品1000001的owner >> 0 +- 没有模块,返回产品测试负责人 @admin + +- 模块有负责人,返回模块负责人 @user1 + +- 模块没有负责人,没有上级模块,返回产品测试负责人 @admin + +- 模块没有负责人,有上级模块,并且上级模块没有负责人,返回产品测试负责人 @user1 + +- 模块没有负责人,有上级模块,上级模块有负责人,返回上级模块负责人 @admin + +- 没有模块,没有产品测试负责人,返回空 @0 */ -$moduleIDList = array('1821', '1825', '1829'); -$productIDList = array('1', '2', '3', '1000001'); +$moduleIDList = array(0, 1, 2, 3, 4); +$productIDList = array(1, 2); $bug=new bugTest(); -r($bug->getModuleOwnerTest($moduleIDList[0], $productIDList[0])) && p() && e('test1'); // 查询模块1821 产品1的owner -r($bug->getModuleOwnerTest($moduleIDList[0], $productIDList[1])) && p() && e('test2'); // 查询模块1821 产品2的owner -r($bug->getModuleOwnerTest($moduleIDList[0], $productIDList[2])) && p() && e('test3'); // 查询模块1821 产品3的owner -r($bug->getModuleOwnerTest($moduleIDList[0], $productIDList[3])) && p() && e('0'); // 查询模块1821 不存在的产品1000001的owner -r($bug->getModuleOwnerTest($moduleIDList[1], $productIDList[0])) && p() && e('test1'); // 查询模块1821 产品1的owner -r($bug->getModuleOwnerTest($moduleIDList[1], $productIDList[1])) && p() && e('test2'); // 查询模块1821 产品2的owner -r($bug->getModuleOwnerTest($moduleIDList[1], $productIDList[2])) && p() && e('test3'); // 查询模块1821 产品3的owner -r($bug->getModuleOwnerTest($moduleIDList[1], $productIDList[3])) && p() && e('0'); // 查询模块1821 不存在的产品1000001的owner -r($bug->getModuleOwnerTest($moduleIDList[2], $productIDList[0])) && p() && e('test1'); // 查询模块1821 产品1的owner -r($bug->getModuleOwnerTest($moduleIDList[2], $productIDList[1])) && p() && e('test2'); // 查询模块1821 产品2的owner -r($bug->getModuleOwnerTest($moduleIDList[2], $productIDList[2])) && p() && e('test3'); // 查询模块1821 产品3的owner -r($bug->getModuleOwnerTest($moduleIDList[2], $productIDList[3])) && p() && e('0'); // 查询模块1821 不存在的产品1000001的owner \ No newline at end of file +r($bug->getModuleOwnerTest($moduleIDList[0], $productIDList[0])) && p('0') && e('admin'); // 没有模块,返回产品测试负责人 +r($bug->getModuleOwnerTest($moduleIDList[1], $productIDList[0])) && p('0') && e('user1'); // 模块有负责人,返回模块负责人 +r($bug->getModuleOwnerTest($moduleIDList[2], $productIDList[0])) && p('0') && e('admin'); // 模块没有负责人,没有上级模块,返回产品测试负责人 +r($bug->getModuleOwnerTest($moduleIDList[3], $productIDList[0])) && p('0') && e('user1'); // 模块没有负责人,有上级模块,并且上级模块没有负责人,返回产品测试负责人 +r($bug->getModuleOwnerTest($moduleIDList[4], $productIDList[0])) && p('0') && e('admin'); // 模块没有负责人,有上级模块,上级模块有负责人,返回上级模块负责人 +r($bug->getModuleOwnerTest($moduleIDList[0], $productIDList[1])[0]) && p() && e('0'); // 没有模块,没有产品测试负责人,返回空 \ No newline at end of file diff --git a/module/bug/test/model/yaml/getmoduleowner/module.yaml b/module/bug/test/model/yaml/getmoduleowner/module.yaml new file mode 100644 index 0000000000..51577c70c1 --- /dev/null +++ b/module/bug/test/model/yaml/getmoduleowner/module.yaml @@ -0,0 +1,21 @@ +--- +title: zt_module +author: Tingting Dai +version: "1.0" +fields: +- field: owner + range: "user1,[]{3}" +- field: parent + range: 0{2},[1-2]{2} +- field: grade + range: 1{2},2{2} +- field: path + fields: + - field: path1 + prefix: "," + range: "1,2,1,2" + - field: path2 + prefix: "," + range: "[]{2},3,4" + postfix: "," +... diff --git a/module/bug/test/model/yaml/getmoduleowner/product.yaml b/module/bug/test/model/yaml/getmoduleowner/product.yaml new file mode 100644 index 0000000000..81acfeff3a --- /dev/null +++ b/module/bug/test/model/yaml/getmoduleowner/product.yaml @@ -0,0 +1,8 @@ +--- +title: zt_product +author: Tingting Dai +version: "1.0" +fields: +- field: QD + range: "admin,[]{9}" +...