* Refactor myModel::getReviewingList, and add its unit test.

This commit is contained in:
liumengyi
2023-11-28 09:31:40 +08:00
parent 56db6ebf1c
commit 28dcc89171
3 changed files with 94 additions and 16 deletions
+19 -16
View File
@@ -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;
}
+51
View File
@@ -0,0 +1,51 @@
#!/usr/bin/env php
<?php
declare(strict_types=1);
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/my.class.php';
zdTable('story')->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 获取前两个 的待评审类型。
+24
View File
@@ -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, ',');
}
}