Files
EasySoft-ZenTaoPMS/module/user/test/lib/ui/testtask.ui.class.php
T

212 lines
7.8 KiB
PHP

<?php
require_once dirname(__FILE__, 6) . '/test/lib/ui.php';
define('TESTTASK_MENUS', array('assignedTo'));
define('TESTTASK_COLUMNS', array('id', 'name', 'pri', 'buildName', 'executionName', 'status', 'begin', 'end'));
define('PAGESIZE', array(5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 100, 200, 500, 1000, 2000));
class testtaskTester extends tester
{
/**
* 校验user模块testtask视图的内容及分页功能
* Verify the content and pagination of user testtask view.
*
* @param array $users 用户列表
* @param array $tasks 测试单数据
* @param int $pageSize 每页大小
* @return object 成功或失败对象
*/
public function verifyUserTesttask($users = array(), $tasks = array(), $pageSize = 5)
{
if(empty($users)) return $this->failed('用户列表不能为空');
if(empty($tasks)) return $this->failed('测试单列表不能为空');
if(!in_array($pageSize, PAGESIZE, true)) return $this->failed('pageSize无效');
$this->login();
$form = $this->initForm('user', 'testtask', array('userID' => $users[0]->id), 'appIframe-system');
$form->wait(2);
foreach($users as $user)
{
if($user != $users[0])
{
$form->dom->userPicker->picker($user->realname);
$form->wait(1);
if($form->dom->userPicker->getText() != $user->realname) return $this->failed('testtask页面切换用户显示失败');
}
foreach(TESTTASK_MENUS as $menu)
{
$form->dom->{$menu}->click();
$form->wait(1);
$ret = $this->verifyMenuContentAndPagination($form, $user, $tasks, $menu, $pageSize);
if($ret) return $ret;
}
}
return $this->success("开源版m=user&f=testtask测试成功");
}
/**
* 检查具体子菜单的内容以及分页功能
* Verify the content and pagination of a specific sub-menu in m=user&f=testtask.
*
* @param object $form 页面对象
* @param object $user 用户对象
* @param array $tasks 测试单数据
* @param string $menu assignedTo
* @param int $pageSize 每页大小
* @return object 成功返回null,失败返回对象
*/
private function verifyMenuContentAndPagination($form, $user, $tasks, $menu, $pageSize = 5)
{
$userTasks = $this->filterDataByMenu($tasks, $user, $menu);
$ret = $this->verifyContent($form, $userTasks, $user, $menu);
if($ret) return $ret;
$ret = $this->verifyPagination($form, $userTasks, $user, $menu, $pageSize);
if($ret) return $ret;
return null;
}
/**
* 根据菜单过滤数据
* Filter data based on menu
*
* @param array $tasks 测试单数据
* @param object $user 用户对象
* @param string $menu 菜单
* @return array 过滤后的测试单列表
*/
private function filterDataByMenu($tasks, $user, $menu)
{
$account = is_object($user) ? ($user->account ?? '') : ($user['account'] ?? '');
$filtered = array();
foreach($tasks as $task)
{
$tid = is_object($task) ? ($task->id ?? null) : ($task['id'] ?? null);
$owner = is_object($task) ? ($task->owner ?? '') : ($task['owner'] ?? '');
$members = is_object($task) ? ($task->members ?? '') : ($task['members'] ?? '');
$execution = is_object($task) ? ($task->execution ?? null) : ($task['execution'] ?? null);
// 首先检查sprints权限:execution必须在用户的sprints权限范围内
$userSprints = isset($user->sprints) ? explode(',', $user->sprints) : array();
$hasSprintAccess = in_array((string)$execution, $userSprints);
if(!$hasSprintAccess) continue;
// 然后检查owner和members权限
$isOwner = $owner === $account;
$isMember = !empty($members) && in_array($account, explode(',', $members));
if($menu === 'assignedTo' && ($isOwner || $isMember)) $filtered[$tid] = $task;
}
return $filtered;
}
/**
* 验证列值
* Verify the values in columns
*
* @param object $form 页面对象
* @param array $tasks 测试单数据
* @param object $user 用户对象
* @param string $menu 菜单名称
* @return object 成功返回null,失败返回对象
*/
private function verifyContent($form, $tasks, $user, $menu)
{
if(!$tasks)
{
if(!$form->dom->pageSizeMenu) return null;
return $this->failed("用户'{$user->realname}'的'{$menu}'菜单显示数量与实际不符");
}
$currentPageSize = (int) filter_var($form->dom->pagerSizeMenu->getText(), FILTER_SANITIZE_NUMBER_INT);
if(count($tasks) > $currentPageSize)
{
$form->dom->pagerSizeMenu->click();
$form->wait(1);
$form->dom->dropdownPicker(max(PAGESIZE));
$form->wait(1);
}
$display = array();
foreach(TESTTASK_COLUMNS as $c) $display[$c] = $form->dom->getElementListByXpathKey($c, true);
if(count($display['id']) != count($tasks)) return $this->failed("用户'{$user->realname}'的'{$menu}'菜单显示数量不匹配:期望" . count($tasks) . "个,实际显示" . count($display['id']) . "个");
foreach($display['id'] as $i => $id)
{
$t = $tasks[$id];
foreach(TESTTASK_COLUMNS as $c)
{
$actual = $display[$c][$i];
$header = isset($this->lang->testtask->{$c}) ? $this->lang->testtask->{$c} : $c;
switch ($c)
{
case 'status':
$expected = $this->lang->testtask->statusList->{$t->{$c}};
break;
case 'begin':
case 'end':
$expected = ($t->{$c} == '0000-00-00') ? '' : $t->{$c};
break;
default:
$expected = $t->{$c};
break;
}
if($actual != $expected) return $this->failed("USER={$user->realname}, MENU={$menu}, ID={$id}: {$header}不匹配,期望'{$expected}',实际'{$actual}'");
}
}
return null;
}
/**
* 验证分页
* verify pagination
*
* @param object $form 页面对象
* @param array $items 测试数据
* @param int $pageSize 每页数量
* @return object 成功返回null,失败返回对象
*/
private function verifyPagination($form, $items, $user, $menu, $pageSize = 5)
{
$total = count($items);
$pages = (int) ceil($total / $pageSize);
// 如果数据量大于每页大小,则进行分页验证
if($total > $pageSize)
{
$form->dom->pagerSizeMenu->click();
$form->wait(1);
$form->dom->dropdownPicker($pageSize);
$form->wait(1);
$form->dom->firstPage->click();
$form->wait(1);
}
for($i = 1; $i <= $pages; $i++)
{
$totalActual = count($form->dom->getElementListByXpathKey('id'));
$totalExpected = ($pages === 1) ? $total : ($i < $pages ? $pageSize : ($total - $pageSize * ($pages - 1)));
if($totalActual !== $totalExpected) return $this->failed("USER={$user->realname}, MENU={$menu} 分页第{$i}页数量不匹配:期望{$totalExpected},实际{$totalActual}");
if($i < $pages)
{
$form->dom->nextPage->click();
$form->wait(1);
}
}
return null;
}
}