znt/module/user/test/lib/ui/testtask.ui.class.php

212 lines
7.8 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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;
}
}