diff --git a/module/file/test/lib/file.unittest.class.php b/module/file/test/lib/file.unittest.class.php index adb04f7438..08dbe8d050 100755 --- a/module/file/test/lib/file.unittest.class.php +++ b/module/file/test/lib/file.unittest.class.php @@ -5,6 +5,7 @@ class fileTest { global $tester; $this->objectModel = $tester->loadModel('file'); + $this->objectTao = $tester->loadTao('file'); } /** @@ -1244,4 +1245,25 @@ class fileTest return $result; } + + /** + * Test saveFile method. + * + * @param array $file + * @param string $strSkipFields + * @access public + * @return int|false + */ + public function saveFileTest(array $file, string $strSkipFields = ''): int|false + { + // 使用反射访问protected方法 + $reflection = new ReflectionClass($this->objectTao); + $method = $reflection->getMethod('saveFile'); + $method->setAccessible(true); + + $result = $method->invoke($this->objectTao, $file, $strSkipFields); + if(dao::isError()) return dao::getError(); + + return $result; + } } diff --git a/module/file/test/tao/savefile.php b/module/file/test/tao/savefile.php old mode 100644 new mode 100755 index 16c7c67566..923e1acbb2 --- a/module/file/test/tao/savefile.php +++ b/module/file/test/tao/savefile.php @@ -1,38 +1,103 @@ #!/usr/bin/env php gen(5); -} -initData(); +// 2. zendata数据准备 +$table = zenData('file'); +$table->id->range('1-5'); +$table->pathname->range('file{5}'); +$table->title->range('File{5}'); +$table->extension->range('txt{5}'); +$table->size->range('1024{5}'); +$table->objectType->range('bug{5}'); +$table->objectID->range('1{5}'); +$table->addedBy->range('admin{5}'); +$table->addedDate->range('`2024-01-01 10:00:00`,`2024-01-02 10:00:00`,`2024-01-03 10:00:00`,`2024-01-04 10:00:00`,`2024-01-05 10:00:00`'); +$table->gen(5); -/** -title=fileTao->saveFile(); -cid=1 +// 3. 用户登录 +su('admin'); - */ +// 4. 创建测试实例 +$fileTest = new fileTest(); -global $app; -$tester = new fileTest('admin'); - -$file = array -( - 'pathname' => '', - 'title' => 'File 6', +// 5. 测试步骤1:正常保存文件数据 +$normalFile = array( + 'pathname' => '202401/02/normalfile.txt', + 'title' => 'Normal File.txt', + 'extension' => 'txt', + 'size' => 2048, 'objectType' => 'bug', - 'objectID' => 100, - 'addedBy' => '', - 'addedDate' => helper::now(), - 'realpath' => 'realpath', - 'extension' => 'text', - 'extra' => 'extra', + 'objectID' => 200, + 'addedBy' => 'admin', + 'addedDate' => helper::now() ); +r($fileTest->saveFileTest($normalFile)) && p('') && e('6'); -$lastInsertID = $tester->objectModel->saveFile($file, 'realpath'); -r($lastInsertID) && p('') && e('6'); +// 测试步骤2:保存文件时跳过指定字段 +$skipFieldsFile = array( + 'pathname' => '202401/02/skipfile.txt', + 'title' => 'Skip Fields File.txt', + 'extension' => 'txt', + 'size' => 1024, + 'objectType' => 'task', + 'objectID' => 201, + 'addedBy' => 'admin', + 'addedDate' => helper::now(), + 'extra' => 'skip', + 'realpath' => '/tmp/realpath2' +); +r($fileTest->saveFileTest($skipFieldsFile, 'realpath,extra')) && p('') && e('7'); -$fileList = $tester->objectModel->getByIdList(array($lastInsertID)); -r($fileList[$lastInsertID]) && p('objectType,objectID') && e('bug,100'); +// 测试步骤3:传入空数组参数 +$emptyFile = array(); +r($fileTest->saveFileTest($emptyFile)) && p('') && e('0'); + +// 测试步骤4:保存包含特殊字符的文件数据 +$specialFile = array( + 'pathname' => '202401/02/special_file.txt', + 'title' => 'Special File.txt', + 'extension' => 'txt', + 'size' => 4096, + 'objectType' => 'story', + 'objectID' => 202, + 'addedBy' => 'admin', + 'addedDate' => helper::now() +); +r($fileTest->saveFileTest($specialFile)) && p('') && e('8'); + +// 测试步骤5:保存文件数据验证数据库记录完整性 +$validateFile = array( + 'pathname' => '202401/02/validate.txt', + 'title' => 'Validate File.txt', + 'extension' => 'txt', + 'size' => 8192, + 'objectType' => 'bug', + 'objectID' => 203, + 'addedBy' => 'admin', + 'addedDate' => helper::now() +); +$insertID = $fileTest->saveFileTest($validateFile); +$savedFile = $fileTest->objectModel->getById($insertID); +r($savedFile) && p('title,objectType,objectID,extension') && e('Validate File.txt,bug,203,txt'); \ No newline at end of file