From ac193601e682697c083d9f125c1d2edcd92aafab Mon Sep 17 00:00:00 2001 From: liugang Date: Mon, 10 Nov 2025 18:14:33 +0800 Subject: [PATCH] * [misc] Update unit tests for bugZen::checkRquiredForEdit() method MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- module/bug/test/lib/zen.class.php | 6 +- module/bug/test/zen/checkrequiredforedit.php | 93 +++++--------------- 2 files changed, 25 insertions(+), 74 deletions(-) diff --git a/module/bug/test/lib/zen.class.php b/module/bug/test/lib/zen.class.php index 978902549d..8d86d38794 100644 --- a/module/bug/test/lib/zen.class.php +++ b/module/bug/test/lib/zen.class.php @@ -501,12 +501,12 @@ class bugZenTest extends baseTest * * @param object $bug * @access public - * @return bool + * @return mixed */ - public function checkRquiredForEditTest(object $bug): bool + public function checkRquiredForEditTest(object $bug) { $result = $this->invokeArgs('checkRquiredForEdit', [$bug]); - if(dao::isError()) return false; + if(dao::isError()) return dao::getError(); return $result; } diff --git a/module/bug/test/zen/checkrequiredforedit.php b/module/bug/test/zen/checkrequiredforedit.php index 6a1a5dc045..999dc7e311 100755 --- a/module/bug/test/zen/checkrequiredforedit.php +++ b/module/bug/test/zen/checkrequiredforedit.php @@ -7,33 +7,25 @@ title=测试 bugZen::checkRquiredForEdit(); timeout=0 cid=0 -- 无错误,验证通过 @0 -- 执行$errors属性title @『Bug标题』不能为空。 -- 执行$errors属性openedBuild[] @『影响版本』不能为空。 -- 执行$errors属性resolution @『解决方案』不能为空。 -- 执行$errors属性duplicateBug @『重复Bug』不能为空。 -- 执行$errors +- 步骤1:正常情况 @1 +- 步骤2:title为空属性title @『Bug标题』不能为空。 +- 步骤3:openedBuild为空属性openedBuild[] @『影响版本』不能为空。 +- 步骤4:resolvedBy有值但resolution为空属性resolution @『解决方案』不能为空。 +- 步骤5:resolution为duplicate但duplicateBug为空属性duplicateBug @『重复Bug』不能为空。 +- 步骤6:多个必填字段为空 - 属性title @『Bug标题』不能为空。 - 属性openedBuild[] @『影响版本』不能为空。 -- 执行$errors属性title @『Bug标题』不能为空。 -- 执行$errors属性duplicateBug @『重复Bug』不能为空。 -- 执行$errors +- 步骤7:title只包含空格属性title @『Bug标题』不能为空。 +- 步骤8:resolution为非duplicate @1 +- 步骤9:所有必填字段为null - 属性title @『Bug标题』不能为空。 - 属性openedBuild[] @『影响版本』不能为空。 -- 执行$errors @0 +- 步骤10:duplicateBug为0属性duplicateBug @『重复Bug』不能为空。 */ include dirname(__FILE__, 5) . '/test/lib/init.php'; - -// zendata数据准备 -$table = zenData('bug'); -$table->id->range('1-10'); -$table->title->range('测试Bug1,测试Bug2,测试Bug3,测试Bug4,测试Bug5,测试Bug6,测试Bug7,测试Bug8,测试Bug9,测试Bug10'); -$table->product->range('1'); -$table->status->range('active'); -$table->openedBy->range('admin'); -$table->gen(10); +include dirname(__FILE__, 2) . '/lib/zen.class.php'; // 设置必填字段配置 global $tester, $app, $config; @@ -43,56 +35,15 @@ $config->bug->edit->requiredFields = 'title,openedBuild'; su('admin'); -// 使用initReference获取zen对象 -$zen = initReference('bug'); -$func = $zen->getMethod('checkRquiredForEdit'); +$bugTest = new bugZenTest(); -// 步骤1:测试正常情况,所有必填字段都填写 -dao::$errors = array(); -$func->invokeArgs($zen->newInstance(), [(object)array('title' => 'Bug Title', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => '', 'duplicateBug' => '')]); -r(count(dao::$errors)) && p() && e(0); // 无错误,验证通过 - -// 步骤2:测试title字段为空 -dao::$errors = array(); -$func->invokeArgs($zen->newInstance(), [(object)array('title' => '', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => '', 'duplicateBug' => '')]); -r(dao::$errors) && p('title') && e('『Bug标题』不能为空。'); - -// 步骤3:测试openedBuild字段为空 -dao::$errors = array(); -$func->invokeArgs($zen->newInstance(), [(object)array('title' => 'Bug Title', 'openedBuild' => '', 'resolvedBy' => '', 'resolution' => '', 'duplicateBug' => '')]); -r(dao::$errors) && p('openedBuild[]') && e('『影响版本』不能为空。'); - -// 步骤4:测试resolvedBy有值但resolution为空 -dao::$errors = array(); -$func->invokeArgs($zen->newInstance(), [(object)array('title' => 'Bug Title', 'openedBuild' => 'trunk', 'resolvedBy' => 'admin', 'resolution' => '', 'duplicateBug' => '')]); -r(dao::$errors) && p('resolution') && e('『解决方案』不能为空。'); - -// 步骤5:测试resolution为duplicate但duplicateBug为空 -dao::$errors = array(); -$func->invokeArgs($zen->newInstance(), [(object)array('title' => 'Bug Title', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => 'duplicate', 'duplicateBug' => '')]); -r(dao::$errors) && p('duplicateBug') && e('『重复Bug』不能为空。'); - -// 步骤6:测试多个必填字段都为空 -dao::$errors = array(); -$func->invokeArgs($zen->newInstance(), [(object)array('title' => '', 'openedBuild' => '', 'resolvedBy' => '', 'resolution' => '', 'duplicateBug' => '')]); -r(dao::$errors) && p('title,openedBuild[]') && e('『Bug标题』不能为空。,『影响版本』不能为空。'); - -// 步骤7:测试title为空字符串(只有空格)的边界情况 -dao::$errors = array(); -$func->invokeArgs($zen->newInstance(), [(object)array('title' => ' ', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => '', 'duplicateBug' => '')]); -r(dao::$errors) && p('title') && e('『Bug标题』不能为空。'); - -// 步骤8:测试resolution为duplicate且duplicateBug为0 -dao::$errors = array(); -$func->invokeArgs($zen->newInstance(), [(object)array('title' => 'Bug Title', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => 'duplicate', 'duplicateBug' => '0')]); -r(dao::$errors) && p('duplicateBug') && e('『重复Bug』不能为空。'); - -// 步骤9:测试所有字段为null的情况 -dao::$errors = array(); -$func->invokeArgs($zen->newInstance(), [(object)array('title' => null, 'openedBuild' => null, 'resolvedBy' => null, 'resolution' => null, 'duplicateBug' => null)]); -r(dao::$errors) && p('title,openedBuild[]') && e('『Bug标题』不能为空。,『影响版本』不能为空。'); - -// 步骤10:测试resolution为非duplicate时duplicateBug为空(不应产生duplicateBug错误) -dao::$errors = array(); -$func->invokeArgs($zen->newInstance(), [(object)array('title' => 'Bug Title', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => 'fixed', 'duplicateBug' => '')]); -r(count(dao::$errors)) && p() && e(0); \ No newline at end of file +r($bugTest->checkRquiredForEditTest((object)array('title' => 'Bug Title', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => '', 'duplicateBug' => ''))) && p() && e('1'); // 步骤1:正常情况 +r($bugTest->checkRquiredForEditTest((object)array('title' => '', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => '', 'duplicateBug' => ''))) && p('title') && e('『Bug标题』不能为空。'); // 步骤2:title为空 +r($bugTest->checkRquiredForEditTest((object)array('title' => 'Bug Title', 'openedBuild' => '', 'resolvedBy' => '', 'resolution' => '', 'duplicateBug' => ''))) && p('openedBuild[]') && e('『影响版本』不能为空。'); // 步骤3:openedBuild为空 +r($bugTest->checkRquiredForEditTest((object)array('title' => 'Bug Title', 'openedBuild' => 'trunk', 'resolvedBy' => 'admin', 'resolution' => '', 'duplicateBug' => ''))) && p('resolution') && e('『解决方案』不能为空。'); // 步骤4:resolvedBy有值但resolution为空 +r($bugTest->checkRquiredForEditTest((object)array('title' => 'Bug Title', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => 'duplicate', 'duplicateBug' => ''))) && p('duplicateBug') && e('『重复Bug』不能为空。'); // 步骤5:resolution为duplicate但duplicateBug为空 +r($bugTest->checkRquiredForEditTest((object)array('title' => '', 'openedBuild' => '', 'resolvedBy' => '', 'resolution' => '', 'duplicateBug' => ''))) && p('title,openedBuild[]') && e('『Bug标题』不能为空。,『影响版本』不能为空。'); // 步骤6:多个必填字段为空 +r($bugTest->checkRquiredForEditTest((object)array('title' => ' ', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => '', 'duplicateBug' => ''))) && p('title') && e('『Bug标题』不能为空。'); // 步骤7:title只包含空格 +r($bugTest->checkRquiredForEditTest((object)array('title' => 'Bug Title', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => 'fixed', 'duplicateBug' => ''))) && p() && e('1'); // 步骤8:resolution为非duplicate +r($bugTest->checkRquiredForEditTest((object)array('title' => null, 'openedBuild' => null, 'resolvedBy' => null, 'resolution' => null, 'duplicateBug' => null))) && p('title,openedBuild[]') && e('『Bug标题』不能为空。,『影响版本』不能为空。'); // 步骤9:所有必填字段为null +r($bugTest->checkRquiredForEditTest((object)array('title' => 'Bug Title', 'openedBuild' => 'trunk', 'resolvedBy' => '', 'resolution' => 'duplicate', 'duplicateBug' => '0'))) && p('duplicateBug') && e('『重复Bug』不能为空。'); // 步骤10:duplicateBug为0 \ No newline at end of file