diff --git a/module/ai/test/lib/ai.unittest.class.php b/module/ai/test/lib/ai.unittest.class.php index 06cab4feba..680a0a3c19 100644 --- a/module/ai/test/lib/ai.unittest.class.php +++ b/module/ai/test/lib/ai.unittest.class.php @@ -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; + } } \ No newline at end of file diff --git a/module/ai/test/model/getobjectforpromptbyid.php b/module/ai/test/model/getobjectforpromptbyid.php new file mode 100755 index 0000000000..5fff1a2543 --- /dev/null +++ b/module/ai/test/model/getobjectforpromptbyid.php @@ -0,0 +1,74 @@ +#!/usr/bin/env php +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'); // 步骤5:deleted状态的prompt +r($aiTest->getObjectForPromptByIdTest(7, 1)) && p() && e('~~'); // 步骤6:product模块测试,返回数组不为空 +r($aiTest->getObjectForPromptByIdTest(5, 999)) && p() && e('false'); // 步骤7:bug模块但object不存在 \ No newline at end of file diff --git a/module/ai/test/model/yaml/ai_prompt_getobjectforpromptbyid.yaml b/module/ai/test/model/yaml/ai_prompt_getobjectforpromptbyid.yaml new file mode 100644 index 0000000000..9f9810327a --- /dev/null +++ b/module/ai/test/model/yaml/ai_prompt_getobjectforpromptbyid.yaml @@ -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: "" \ No newline at end of file diff --git a/module/ai/test/model/yaml/story_getobjectforpromptbyid.yaml b/module/ai/test/model/yaml/story_getobjectforpromptbyid.yaml new file mode 100644 index 0000000000..20a980840c --- /dev/null +++ b/module/ai/test/model/yaml/story_getobjectforpromptbyid.yaml @@ -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: "" \ No newline at end of file diff --git a/module/ai/test/model/yaml/task_getobjectforpromptbyid.yaml b/module/ai/test/model/yaml/task_getobjectforpromptbyid.yaml new file mode 100644 index 0000000000..397c576f91 --- /dev/null +++ b/module/ai/test/model/yaml/task_getobjectforpromptbyid.yaml @@ -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: "" \ No newline at end of file