+ [misc] Add unit tests for aiModel::getObjectForPromptById() method

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
liugang
2025-09-15 15:06:08 +08:00
co-authored by Claude
parent 353434cb85
commit fb91c7e4bc
5 changed files with 410 additions and 0 deletions
+21
View File
@@ -1095,4 +1095,25 @@ class aiTest
return empty($schema) ? array() : $schema;
}
/**
* Test getObjectForPromptById method.
*
* @param mixed $promptID
* @param mixed $objectId
* @access public
* @return mixed
*/
public function getObjectForPromptByIdTest($promptID = null, $objectId = null)
{
if(empty($promptID)) return false;
$prompt = $this->objectModel->getPromptById($promptID);
if(empty($prompt)) return false;
$result = $this->objectModel->getObjectForPromptById($prompt, $objectId);
if(dao::isError()) return dao::getError();
return $result;
}
}
+74
View File
@@ -0,0 +1,74 @@
#!/usr/bin/env php
<?php
/**
title=测试 aiModel::getObjectForPromptById();
timeout=0
cid=0
- 步骤1:story模块正常情况,返回数组不为空 @~~
- 步骤2:task模块正常情况,返回数组不为空 @~~
- 步骤3:不存在的prompt ID @false
- 步骤4:不存在的object ID @false
- 步骤5deleted状态的prompt @false
- 步骤6:product模块测试,返回数组不为空 @~~
- 步骤7bug模块但object不存在 @false
*/
// 1. 导入依赖(路径固定,不可修改)
include dirname(__FILE__, 5) . '/test/lib/init.php';
include dirname(__FILE__, 2) . '/lib/ai.unittest.class.php';
// 2. zendata数据准备
$table = zenData('ai_prompt');
$table->id->range('1-10');
$table->name->range('story_prompt,task_prompt,bug_prompt,product_prompt,project_prompt,execution_prompt,test_prompt,dev_prompt,pm_prompt,qa_prompt');
$table->desc->range('测试描述内容{10}');
$table->model->range('0,1,2,3,4,5');
$table->module->range('story{2},task{2},bug{2},product{2},project{1},execution{1}');
$table->source->range(',story.title,story.spec,,task.name,task.desc,,bug.title,bug.steps,,product.name,product.desc,,project.name,project.desc,,execution.name,execution.desc,');
$table->targetForm->range('story.change,task.edit,bug.edit,product.edit,project.edit');
$table->purpose->range('测试目的内容{10}');
$table->elaboration->range('测试详细说明内容{10}');
$table->role->range('测试角色描述{10}');
$table->characterization->range('测试角色特征{10}');
$table->createdBy->range('admin,system,user1,user2');
$table->createdDate->range('`2023-08-10 10:00:00`,`2023-08-11 11:00:00`,`2023-08-12 12:00:00`');
$table->status->range('active{9},draft{1}');
$table->deleted->range('0{9},1{1}');
$table->gen(10);
$storyTable = zenData('story');
$storyTable->id->range('1-10');
$storyTable->title->range('用户登录功能,数据导出功能,权限管理功能,报表统计功能,文件上传功能,数据同步功能,权限控制功能,系统监控功能,日志管理功能,配置管理功能');
$storyTable->status->range('active{8},draft{2}');
$storyTable->gen(10);
$taskTable = zenData('task');
$taskTable->id->range('1-10');
$taskTable->name->range('登录接口开发,数据库设计,前端页面开发,单元测试编写,集成测试,性能测试,代码审查,文档编写,部署脚本,监控配置');
$taskTable->status->range('wait{5},doing{3},done{2}');
$taskTable->gen(10);
$productTable = zenData('product');
$productTable->id->range('1-10');
$productTable->name->range('产品A,产品B,产品C,产品D,产品E,产品F,产品G,产品H,产品I,产品J');
$productTable->status->range('normal{8},closed{2}');
$productTable->gen(10);
// 3. 用户登录
su('admin');
// 4. 创建测试实例
$aiTest = new aiTest();
// 5. 测试步骤(必须包含至少5个测试步骤)
r($aiTest->getObjectForPromptByIdTest(1, 1)) && p() && e('~~'); // 步骤1:story模块正常情况,返回数组不为空
r($aiTest->getObjectForPromptByIdTest(3, 2)) && p() && e('~~'); // 步骤2:task模块正常情况,返回数组不为空
r($aiTest->getObjectForPromptByIdTest(99, 1)) && p() && e('false'); // 步骤3:不存在的prompt ID
r($aiTest->getObjectForPromptByIdTest(1, 999)) && p() && e('false'); // 步骤4:不存在的object ID
r($aiTest->getObjectForPromptByIdTest(10, 1)) && p() && e('false'); // 步骤5deleted状态的prompt
r($aiTest->getObjectForPromptByIdTest(7, 1)) && p() && e('~~'); // 步骤6:product模块测试,返回数组不为空
r($aiTest->getObjectForPromptByIdTest(5, 999)) && p() && e('false'); // 步骤7bug模块但object不存在
@@ -0,0 +1,91 @@
---
title: AI Prompt测试数据 - getObjectForPromptById方法
desc: 为getObjectForPromptById方法提供测试数据
author: Claude AI
version: 1.0
fields:
- field: id
note: Prompt ID
range: 1-10
prefix: ""
postfix: ""
loop: 0
format: ""
- field: name
note: Prompt名称
range: story_prompt{1}, task_prompt{1}, bug_prompt{1}, product_prompt{1}, project_prompt{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: desc
note: Prompt描述
range: 需求润色提示词{2}, 任务优化提示词{2}, 缺陷分析提示词{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: model
note: 模型ID
range: 1-3
prefix: ""
postfix: ""
loop: 0
format: ""
- field: module
note: 模块名称
range: story{2}, task{2}, bug{2}, product{1}, project{1}, execution{1}, case{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: source
note: 数据源配置
range: story.title,story.spec{1}, task.name,task.desc{1}, bug.title,bug.steps{1}, product.name,product.desc{1}, project.name,project.desc{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: targetForm
note: 目标表单
range: story.edit{2}, task.edit{2}, bug.edit{2}, product.edit{1}, project.edit{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: purpose
note: 用途说明
range: 优化需求描述{2}, 优化任务信息{2}, 优化缺陷信息{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: status
note: 状态
range: active{8}, draft{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: createdBy
note: 创建者
range: admin{5}, user1{3}, user2{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: createdDate
note: 创建时间
range: 2024-01-01 10:00:00-2024-12-31 23:59:59:1D
prefix: ""
postfix: ""
loop: 0
format: "YYYY-MM-DD hh:mm:ss"
- field: deleted
note: 删除状态
range: 0{9}, 1{1}
prefix: ""
postfix: ""
loop: 0
format: ""
@@ -0,0 +1,105 @@
---
title: Story测试数据 - getObjectForPromptById方法
desc: 为story模块的getObjectForPromptById方法提供测试数据
author: Claude AI
version: 1.0
fields:
- field: id
note: Story ID
range: 1-10
prefix: ""
postfix: ""
loop: 0
format: ""
- field: title
note: Story标题
range: 用户登录功能{1}, 数据导出功能{1}, 权限管理功能{1}, 报表统计功能{1}, 文件上传功能{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: spec
note: Story规格说明
range: 作为一名用户,我希望能够登录系统{2}, 作为一名管理员,我希望能够导出数据{2}, 作为一名用户,我希望能够上传文件{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: verify
note: 验收标准
range: 1.能够正确登录 2.密码错误时提示{2}, 1.能够导出Excel文件 2.导出速度合理{2}, 1.支持常见文件格式{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: type
note: Story类型
range: story{8}, epic{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: pri
note: 优先级
range: 1{2}, 2{3}, 3{3}, 4{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: estimate
note: 估算工时
range: 1-40:0.5
prefix: ""
postfix: ""
loop: 0
format: ""
- field: status
note: 状态
range: draft{2}, active{5}, closed{2}, changed{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: stage
note: 阶段
range: wait{3}, planned{3}, projected{2}, developing{1}, testing{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: openedBy
note: 由谁创建
range: admin{3}, user1{3}, user2{2}, user3{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: openedDate
note: 创建时间
range: 2024-01-01 09:00:00-2024-12-31 18:00:00:1D
prefix: ""
postfix: ""
loop: 0
format: "YYYY-MM-DD hh:mm:ss"
- field: product
note: 产品ID
range: 1{5}, 2{3}, 3{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: module
note: 模块ID
range: 1{3}, 2{3}, 3{2}, 4{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: deleted
note: 删除状态
range: 0{9}, 1{1}
prefix: ""
postfix: ""
loop: 0
format: ""
@@ -0,0 +1,119 @@
---
title: Task测试数据 - getObjectForPromptById方法
desc: 为task模块的getObjectForPromptById方法提供测试数据
author: Claude AI
version: 1.0
fields:
- field: id
note: Task ID
range: 1-10
prefix: ""
postfix: ""
loop: 0
format: ""
- field: name
note: 任务名称
range: 登录接口开发{1}, 数据库设计{1}, 前端页面开发{1}, 单元测试编写{1}, 代码审查{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: desc
note: 任务描述
range: 开发用户登录API接口{2}, 设计用户相关数据表{2}, 开发登录页面UI{2}, 编写单元测试用例{2}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: type
note: 任务类型
range: devel{4}, test{3}, design{2}, study{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: pri
note: 优先级
range: 1{2}, 2{4}, 3{3}, 4{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: estimate
note: 预计工时
range: 1-80:0.5
prefix: ""
postfix: ""
loop: 0
format: ""
- field: consumed
note: 已消耗工时
range: 0-40:0.5
prefix: ""
postfix: ""
loop: 0
format: ""
- field: left
note: 剩余工时
range: 0-40:0.5
prefix: ""
postfix: ""
loop: 0
format: ""
- field: status
note: 任务状态
range: wait{3}, doing{3}, done{2}, pause{1}, cancel{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: assignedTo
note: 指派给
range: admin{2}, user1{3}, user2{2}, user3{2}, [']{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: openedBy
note: 由谁创建
range: admin{4}, user1{3}, user2{2}, user3{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: openedDate
note: 创建时间
range: 2024-01-01 09:00:00-2024-12-31 18:00:00:1D
prefix: ""
postfix: ""
loop: 0
format: "YYYY-MM-DD hh:mm:ss"
- field: estStarted
note: 预计开始时间
range: 2024-01-01-2024-12-31:1D
prefix: ""
postfix: ""
loop: 0
format: "YYYY-MM-DD"
- field: realStarted
note: 实际开始时间
range: 2024-01-01-2024-12-31:1D, [null]{3}
prefix: ""
postfix: ""
loop: 0
format: "YYYY-MM-DD"
- field: execution
note: 执行ID
range: 1{4}, 2{3}, 3{2}, 4{1}
prefix: ""
postfix: ""
loop: 0
format: ""
- field: deleted
note: 删除状态
range: 0{9}, 1{1}
prefix: ""
postfix: ""
loop: 0
format: ""