+ [misc] Add unit tests for kanbanModel::getRDKanbanByGroup() method
🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1714,4 +1714,29 @@ class kanbanTest
|
||||
|
||||
return $this->objectModel->buildExecutionGroup($lane, $columns, $objectGroup, '', $storyCardMenu, $bugCardMenu, $taskCardMenu);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test get RD kanban by group.
|
||||
*
|
||||
* @param object $execution
|
||||
* @param string $browseType
|
||||
* @param string $orderBy
|
||||
* @param int $regionID
|
||||
* @param string $groupBy
|
||||
* @param string $searchValue
|
||||
* @access public
|
||||
* @return array
|
||||
*/
|
||||
public function getRDKanbanByGroupTest($execution, $browseType, $orderBy, $regionID, $groupBy, $searchValue = '')
|
||||
{
|
||||
// 使用反射来调用私有方法
|
||||
$reflection = new ReflectionClass($this->objectModel);
|
||||
$method = $reflection->getMethod('getRDKanbanByGroup');
|
||||
$method->setAccessible(true);
|
||||
|
||||
$result = $method->invoke($this->objectModel, $execution, $browseType, $orderBy, $regionID, $groupBy, $searchValue);
|
||||
if(dao::isError()) return dao::getError();
|
||||
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
+52
@@ -0,0 +1,52 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
/**
|
||||
|
||||
title=测试 kanbanModel::getRDKanbanByGroup();
|
||||
timeout=0
|
||||
cid=0
|
||||
|
||||
- 测试步骤1:正常execution对象分组看板查询第0条的key属性 @region1
|
||||
- 测试步骤2:不同browseType参数测试第0条的id属性 @1
|
||||
- 测试步骤3:不同groupBy参数测试第0条的key属性 @region1
|
||||
- 测试步骤4:包含searchValue参数测试第0条的toggleFromHeading属性 @1
|
||||
- 测试步骤5:边界值regionID测试第0条的key属性 @region1
|
||||
|
||||
*/
|
||||
|
||||
// 1. 导入依赖(路径固定,不可修改)
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/lib/kanban.unittest.class.php';
|
||||
|
||||
// 2. zendata数据准备
|
||||
zenData('user')->gen(10);
|
||||
zenData('module')->gen(10);
|
||||
zenData('story')->gen(20);
|
||||
zenData('bug')->gen(20);
|
||||
zenData('task')->gen(20);
|
||||
zenData('project')->loadYaml('kanbanexecution')->gen(5);
|
||||
zenData('kanbanregion')->loadYaml('rdkanbanregion')->gen(5);
|
||||
zenData('kanbangroup')->loadYaml('rdkanbangroup')->gen(20);
|
||||
zenData('kanbancolumn')->gen(20);
|
||||
zenData('kanbanlane')->loadYaml('rdkanbanlane')->gen(10);
|
||||
zenData('kanbancell')->loadYaml('rdkanbancell')->gen(20);
|
||||
|
||||
// 3. 用户登录
|
||||
su('admin');
|
||||
|
||||
// 4. 创建测试实例
|
||||
$kanbanTest = new kanbanTest();
|
||||
|
||||
// 5. 测试步骤(必须包含至少5个)
|
||||
// 准备execution对象
|
||||
$testExecution = new stdClass();
|
||||
$testExecution->id = 1;
|
||||
$testExecution->name = '看板1';
|
||||
$testExecution->attribute = 'mix';
|
||||
|
||||
r($kanbanTest->getRDKanbanByGroupTest($testExecution, 'story', 'id_asc', 1, 'pri', '')) && p('0:key') && e('region1'); // 测试步骤1:正常execution对象分组看板查询
|
||||
r($kanbanTest->getRDKanbanByGroupTest($testExecution, 'task', 'id_desc', 1, 'module', '')) && p('0:id') && e('1'); // 测试步骤2:不同browseType参数测试
|
||||
r($kanbanTest->getRDKanbanByGroupTest($testExecution, 'story', 'pri_asc', 1, 'category', '')) && p('0:key') && e('region1'); // 测试步骤3:不同groupBy参数测试
|
||||
r($kanbanTest->getRDKanbanByGroupTest($testExecution, 'story', 'id_asc', 1, 'pri', 'test')) && p('0:toggleFromHeading') && e('1'); // 测试步骤4:包含searchValue参数测试
|
||||
r($kanbanTest->getRDKanbanByGroupTest($testExecution, 'story', 'id_asc', 0, 'pri', '')) && p('0:key') && e('region1'); // 测试步骤5:边界值regionID测试
|
||||
@@ -0,0 +1,67 @@
|
||||
title: execution data for getRDKanbanByGroup test
|
||||
desc: execution test data
|
||||
author: Claude
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: id
|
||||
range: 1-10
|
||||
- field: name
|
||||
prefix: "执行项目"
|
||||
range: 1-10
|
||||
- field: project
|
||||
range: 1-5
|
||||
- field: type
|
||||
range: stage,sprint,kanban
|
||||
- field: model
|
||||
range: scrum,waterfall,kanban
|
||||
- field: status
|
||||
range: wait,doing,done
|
||||
- field: budget
|
||||
range: 100000-500000
|
||||
- field: percent
|
||||
range: 0,10,20,50,80,100
|
||||
- field: auth
|
||||
range: extend
|
||||
- field: desc
|
||||
prefix: "执行项目描述"
|
||||
range: 1-10
|
||||
- field: begin
|
||||
range: "(-1M)-(+1M):1D"
|
||||
type: timestamp
|
||||
format: "YY/MM/DD"
|
||||
- field: end
|
||||
range: "(+1w)-(+2M):1D"
|
||||
type: timestamp
|
||||
format: "YY/MM/DD"
|
||||
- field: grade
|
||||
range: 1
|
||||
- field: parent
|
||||
range: 1-5
|
||||
- field: attribute
|
||||
range: "[]{3},request,design,review,mix"
|
||||
- field: acl
|
||||
range: open,private
|
||||
- field: whitelist
|
||||
range: "[]{5},admin,user1,user2"
|
||||
- field: order
|
||||
range: 1-10
|
||||
- field: openedBy
|
||||
range: admin,user1,user2
|
||||
- field: openedDate
|
||||
range: "(-1M)-(now):1D"
|
||||
type: timestamp
|
||||
format: "YY/MM/DD hh:mm:ss"
|
||||
- field: closedBy
|
||||
range: "[]{7},admin,user1,user2"
|
||||
- field: closedDate
|
||||
range: "[]{7},(now)-(+1M):1D"
|
||||
type: timestamp
|
||||
format: "YY/MM/DD hh:mm:ss"
|
||||
- field: canceledBy
|
||||
range: "[]{9},admin"
|
||||
- field: canceledDate
|
||||
range: "[]{9},(now)-(+1M):1D"
|
||||
type: timestamp
|
||||
format: "YY/MM/DD hh:mm:ss"
|
||||
- field: deleted
|
||||
range: "0"
|
||||
Reference in New Issue
Block a user