From 28dcc89171cdb09d274493d10fc067a708da375b Mon Sep 17 00:00:00 2001 From: liumengyi Date: Tue, 28 Nov 2023 09:31:22 +0800 Subject: [PATCH] * Refactor myModel::getReviewingList, and add its unit test. --- module/my/model.php | 35 +++++++++------- module/my/test/model/getreviewinglist.php | 51 +++++++++++++++++++++++ module/my/test/my.class.php | 24 +++++++++++ 3 files changed, 94 insertions(+), 16 deletions(-) create mode 100644 module/my/test/model/getreviewinglist.php diff --git a/module/my/model.php b/module/my/model.php index 05d8ac10e5..6e13042425 100644 --- a/module/my/model.php +++ b/module/my/model.php @@ -907,6 +907,7 @@ class myModel extends model } /** + * 获取我的审批列表。 * Get reviewing list for me. * * @param string $browseType @@ -915,17 +916,16 @@ class myModel extends model * @access public * @return array */ - public function getReviewingList($browseType, $orderBy = 'time_desc', $pager = null) + public function getReviewingList(string $browseType, string $orderBy = 'time_desc', object $pager = null): array { $reviewList = array(); - if($browseType == 'all' or $browseType == 'demand') $reviewList = array_merge($reviewList, $this->getReviewingDemands()); - if($browseType == 'all' or $browseType == 'story') $reviewList = array_merge($reviewList, $this->getReviewingStories()); - if($browseType == 'all' or $browseType == 'testcase') $reviewList = array_merge($reviewList, $this->getReviewingCases()); - if($browseType == 'all' or $browseType == 'project') $reviewList = array_merge($reviewList, $this->getReviewingApprovals()); - if($browseType == 'all' or $browseType == 'feedback') $reviewList = array_merge($reviewList, $this->getReviewingFeedbacks()); - if($browseType == 'all' or $browseType == 'oa') $reviewList = array_merge($reviewList, $this->getReviewingOA()); - if($browseType == 'all' or !in_array($browseType, array('story', 'testcase', 'feedback', 'oa'))) $reviewList = array_merge($reviewList, $this->getReviewingFlows($browseType)); - + if($browseType == 'all' || $browseType == 'demand') $reviewList = array_merge($reviewList, $this->getReviewingDemands()); + if($browseType == 'all' || $browseType == 'story') $reviewList = array_merge($reviewList, $this->getReviewingStories()); + if($browseType == 'all' || $browseType == 'testcase') $reviewList = array_merge($reviewList, $this->getReviewingCases()); + if($browseType == 'all' || $browseType == 'project') $reviewList = array_merge($reviewList, $this->getReviewingApprovals()); + if($browseType == 'all' || $browseType == 'feedback') $reviewList = array_merge($reviewList, $this->getReviewingFeedbacks()); + if($browseType == 'all' || $browseType == 'oa') $reviewList = array_merge($reviewList, $this->getReviewingOA()); + if($browseType == 'all' || !in_array($browseType, array('story', 'testcase', 'feedback', 'oa'))) $reviewList = array_merge($reviewList, $this->getReviewingFlows($browseType)); if(empty($reviewList)) return array(); $field = $orderBy; @@ -936,8 +936,8 @@ class myModel extends model $reviewGroup = array(); foreach($reviewList as $review) { - if(!isset($review->$field)) $field = 'time'; - $reviewGroup[$review->$field][] = $review; + if(!isset($review->{$field})) $field = 'time'; + $reviewGroup[$review->{$field}][] = $review; } if($direction == 'asc') ksort($reviewGroup); if($direction == 'desc') krsort($reviewGroup); @@ -946,11 +946,14 @@ class myModel extends model foreach($reviewGroup as $reviews) $reviewList = array_merge($reviewList, $reviews); /* Pager. */ - $pager->setRecTotal(count($reviewList)); - $pager->setPageTotal(); - $pager->setPageID($pager->pageID); - $reviewList = array_chunk($reviewList, $pager->recPerPage); - $reviewList = $reviewList[$pager->pageID - 1]; + if(!is_null($pager)) + { + $pager->setRecTotal(count($reviewList)); + $pager->setPageTotal(); + $pager->setPageID($pager->pageID); + $reviewList = array_chunk($reviewList, $pager->recPerPage); + $reviewList = $reviewList[$pager->pageID - 1]; + } return $reviewList; } diff --git a/module/my/test/model/getreviewinglist.php b/module/my/test/model/getreviewinglist.php new file mode 100644 index 0000000000..a3ee01bb6d --- /dev/null +++ b/module/my/test/model/getreviewinglist.php @@ -0,0 +1,51 @@ +#!/usr/bin/env php +config('story_reviewing')->gen('10'); +zdTable('storyreview')->config('storyreview')->gen('10'); +zdTable('case')->gen('20'); +zdTable('demand')->config('demand_reviewing')->gen('20'); +zdTable('demandreview')->gen('20'); +zdTable('user')->gen('10'); + +/** + +title=测试 myModel->getReviewingList(); +cid=1 +pid=1 + +*/ + +global $teser; +$tester->app->moduleName = 'my'; +$tester->app->methodName = 'getReviewingList'; +$tester->app->loadClass('pager', true); +$pager = pager::init('10', 2, 1); + +$my = new myTest(); + +$account = array('admin', 'user1'); +$browseType = array('all', 'createdbyme'); +$orderBy = array('id_desc', 'id_asc'); +$pageList = array(null, $pager); + +r($my->getReviewingListTest($account[0], $browseType[0], $orderBy[0], $pageList[0])) && p() && e('demand,19;testcase,17;demand,15;testcase,13;demand,11;story,10;testcase,9;story,8;demand,7;story,6;testcase,5;story,4;demand,3;story,2;testcase,1;'); // 测试获取用户 admin 类型 all 排序 id_desc 不分页 的待评审类型。 +r($my->getReviewingListTest($account[0], $browseType[0], $orderBy[1], $pageList[0])) && p() && e('testcase,1;story,2;demand,3;story,4;testcase,5;story,6;demand,7;story,8;testcase,9;story,10;demand,11;testcase,13;demand,15;testcase,17;demand,19;'); // 测试获取用户 admin 类型 all 排序 id_asc 不分页 的待评审类型。 +r($my->getReviewingListTest($account[0], $browseType[0], $orderBy[0], $pageList[1])) && p() && e('demand,19;testcase,17;'); // 测试获取用户 admin 类型 all 排序 id_desc 获取前两个 的待评审类型。 +r($my->getReviewingListTest($account[0], $browseType[0], $orderBy[1], $pageList[1])) && p() && e('testcase,1;story,2;'); // 测试获取用户 admin 类型 all 排序 id_asc 获取前两个 的待评审类型。 +r($my->getReviewingListTest($account[0], $browseType[1], $orderBy[0], $pageList[0])) && p() && e('0'); // 测试获取用户 admin 类型 createdbyme 排序 id_desc 不分页 的待评审类型。 +r($my->getReviewingListTest($account[0], $browseType[1], $orderBy[1], $pageList[0])) && p() && e('0'); // 测试获取用户 admin 类型 createdbyme 排序 id_asc 不分页 的待评审类型。 +r($my->getReviewingListTest($account[0], $browseType[1], $orderBy[0], $pageList[1])) && p() && e('0'); // 测试获取用户 admin 类型 createdbyme 排序 id_desc 获取前两个 的待评审类型。 +r($my->getReviewingListTest($account[0], $browseType[1], $orderBy[1], $pageList[1])) && p() && e('0'); // 测试获取用户 admin 类型 createdbyme 排序 id_asc 获取前两个 的待评审类型。 + +r($my->getReviewingListTest($account[1], $browseType[0], $orderBy[0], $pageList[0])) && p() && e('0'); // 测试获取用户 user1 类型 all 排序 id_desc 不分页 的待评审类型。 +r($my->getReviewingListTest($account[1], $browseType[1], $orderBy[0], $pageList[0])) && p() && e('0'); // 测试获取用户 user1 类型 createdbyme 排序 id_desc 不分页 的待评审类型。 +r($my->getReviewingListTest($account[1], $browseType[0], $orderBy[1], $pageList[0])) && p() && e('0'); // 测试获取用户 user1 类型 all 排序 id_asc 不分页 的待评审类型。 +r($my->getReviewingListTest($account[1], $browseType[1], $orderBy[1], $pageList[0])) && p() && e('0'); // 测试获取用户 user1 类型 createdbyme 排序 id_asc 不分页 的待评审类型。 +r($my->getReviewingListTest($account[1], $browseType[0], $orderBy[0], $pageList[1])) && p() && e('0'); // 测试获取用户 user1 类型 all 排序 id_desc 获取前两个 的待评审类型。 +r($my->getReviewingListTest($account[1], $browseType[1], $orderBy[0], $pageList[1])) && p() && e('0'); // 测试获取用户 user1 类型 createdbyme 排序 id_desc 获取前两个 的待评审类型。 +r($my->getReviewingListTest($account[1], $browseType[0], $orderBy[1], $pageList[1])) && p() && e('0'); // 测试获取用户 user1 类型 all 排序 id_asc 获取前两个 的待评审类型。 +r($my->getReviewingListTest($account[1], $browseType[1], $orderBy[1], $pageList[1])) && p() && e('0'); // 测试获取用户 user1 类型 createdbyme 排序 id_asc 获取前两个 的待评审类型。 diff --git a/module/my/test/my.class.php b/module/my/test/my.class.php index 15ae0dcb34..b7bd2a0e66 100644 --- a/module/my/test/my.class.php +++ b/module/my/test/my.class.php @@ -560,4 +560,28 @@ class myTest foreach($menu as $menuKey => $menuName) $return .= "{$menuKey}:{$menuName},"; return trim($return, ','); } + + /** + * 测试获取审批类型列表。 + * Test get reviewing list. + * + * @param string $account + * @param string $browseType + * @param string $orderBy + * @param object $pager + * @access public + * @return string|array + */ + public function getReviewingListTest(string $account, string $browseType, string $orderBy, object $pager = null): string|array + { + su($account); + + $reviewList = $this->objectModel->getReviewingList($browseType, $orderBy, $pager); + + if(dao::isError()) return dao::getError(); + + $return = ''; + foreach($reviewList as $review) $return .= "{$review->type},{$review->id};"; + return trim($return, ','); + } }