* Refactor personnelModel::getUserHours, and modify its unit test.

This commit is contained in:
liumengyi
2023-12-06 10:41:18 +08:00
parent a9f2e2a61c
commit a3a224d97e
3 changed files with 49 additions and 39 deletions
+8 -8
View File
@@ -392,31 +392,31 @@ class personnelModel extends model
}
/**
* 获取用户工时。
* Get user hours.
*
* @param object $userTasks
* @param array $userTasks
* @access public
* @return object
* @return array
*/
public function getUserHours($userTasks)
public function getUserHours(array $userTasks): array
{
$accounts = array();
$taskIDList = array();
$taskIdList = array();
foreach($userTasks as $account => $taskID)
{
$accounts[] = $account;
$taskIDList = array_merge($taskIDList, $taskID);
$taskIdList = array_merge($taskIdList, $taskID);
}
$userHours = array();
$effortList = $this->dao->select('id, account, objectID , `left`, consumed')->from(TABLE_EFFORT)
->where('account')->in($accounts)
->andWhere('deleted')->eq(0)
->andWhere('objectID')->in($taskIDList)
->andWhere('objectID')->in($taskIdList)
->andWhere('objectType')->eq('task')
->orderBy('id_asc')
->fetchGroup('account', 'id');
$userHours = array();
foreach($effortList as $account => $efforts)
{
$latestLeft = array();
+34 -21
View File
@@ -1,40 +1,43 @@
#!/usr/bin/env php
<?php
declare(strict_types=1);
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/personnel.class.php';
su('admin');
$project = zdTable('project');
$project->id->range('1-10');
$project->project->range('0,0,2{8}');
$project->type->range('program,project,sprint{8}');
$project->id->range('1-6');
$project->project->range('0{3},3,4,3');
$project->type->range('program,project{2},sprint{8}');
$project->status->range('doing{3},wait{7}');
$project->vision->range('rnd');
$project->name->range('1-10')->prefix('Object');
$project->multiple->range('1');
$project->deleted->range('`0`');
$project->gen(10);
$project->gen(6);
$task = zdTable('task');
$task->id->range('1');
$task->id->range('1-20');
$task->name->range('task1');
$task->project->range('2');
$task->project->range('2{2},3{2}');
$task->execution->range('4{2},5{2}');
$task->type->range('dev');
$task->left->range('1');
$task->openedBy->range('admin');
$task->openedBy->range('admin,user1');
$task->consumed->range('5');
$task->deleted->range('`0`');
$task->gen(1);
$task->gen(20);
$effort = zdTable('effort');
$effort->id->range('1-2');
$effort->id->range('1-30');
$effort->objectType->range('task');
$effort->objectID->range('1');
$effort->account->range('admin');
$effort->left->range('7,1');
$effort->objectID->range('1-20');
$effort->account->range('admin,user1');
$effort->left->range('7,1,3');
$effort->consumed->range('2,3');
$effort->deleted->range('`0`');
$effort->gen(2);
$effort->gen(30);
zdTable('user')->gen(20);
/**
@@ -42,15 +45,25 @@ title=测试 personnelModel->getUserHours();
cid=1
pid=1
正常传入的情况 >> 1
传入不存在的情况 >> 0
*/
$personnel = new personnelTest('admin');
$result1 = $personnel->getUserHoursTest('2', array('admin'));
$result2 = $personnel->getUserHoursTest('100', array('admin'));
$projectIdList = array(2, 3, 100);
$accounts = array(array('admin' => 'admin', 'user1' => 'user1'), array('user2' => 'user2'));
r($result1['admin']->left) && p() && e('1'); //正常传入的情况
r($result2) && p() && e('0'); //传入不存在的情况
$result1 = $personnel->getUserHoursTest($projectIdList[0], $accounts[0]);
$result2 = $personnel->getUserHoursTest($projectIdList[1], $accounts[0]);
$result3 = $personnel->getUserHoursTest($projectIdList[2], $accounts[0]);
$result4 = $personnel->getUserHoursTest($projectIdList[0], $accounts[1]);
$result5 = $personnel->getUserHoursTest($projectIdList[1], $accounts[1]);
$result6 = $personnel->getUserHoursTest($projectIdList[2], $accounts[1]);
r($result1['admin']) && p('left,consumed') && e('19,16'); // 测试获取 项目 2 下用户 admin 的工时
r($result1['user1']) && p('left,consumed') && e('15,24'); // 测试获取 项目 2 下用户 user1 的工时
r($result2['admin']) && p('left,consumed') && e('15,14'); // 测试获取 项目 3 下用户 admin 的工时
r($result2['user1']) && p('left,consumed') && e('21,21'); // 测试获取 项目 3 下用户 user1 的工时
r($result3) && p() && e('0'); // 测试获取 不存在的 项目 100 下用户 admin 的工时
r($result4) && p() && e('0'); // 测试获取 项目 2 下不存在的用户 user2 的工时
r($result5) && p() && e('0'); // 测试获取 项目 3 下不存在的用户 user2 的工时
r($result6) && p() && e('0'); // 测试获取 不存在的 项目 100 下不存在的用户 user2 的工时
+7 -10
View File
@@ -190,14 +190,15 @@ class personnelTest
}
/**
* GetUserHoursTest
* 测试获取用户工时。
* Test get user hours.
*
* @param int $projectID
* @param array $accounts
* @param int $projectID
* @param array $accounts
* @access public
* @return void
* @return array
*/
public function getUserHoursTest($projectID, $accounts)
public function getUserHoursTest(int $projectID, array $accounts): array
{
global $tester;
$projects = $tester->dao->select('id')->from(TABLE_PROJECT)->where('id')->in($projectID)->fetchAll('id');
@@ -210,11 +211,7 @@ class personnelTest
$invest = array();
foreach($accounts as $account)
{
$invest[$account]['createdTask'] = 0;
$invest[$account]['finishedTask'] = 0;
$invest[$account]['pendingTask'] = 0;
$invest[$account]['consumedTask'] = 0;
$invest[$account]['leftTask'] = 0;
$invest[$account]['createdTask'] = $invest[$account]['finishedTask'] = $invest[$account]['pendingTask'] = $invest[$account]['consumedTask'] = $invest[$account]['leftTask'] = 0;
}
$userTasks = array();