From ac8377c841c2cbde1b05e85ce93871b5cbf86ecb Mon Sep 17 00:00:00 2001 From: liumengyi Date: Wed, 6 Sep 2023 10:28:11 +0800 Subject: [PATCH] * Refactor testcase::importToLib, and add testcaseTao::doUpdate, add unit test. --- module/testcase/control.php | 11 +- module/testcase/model.php | 132 +++++---------------- module/testcase/tao.php | 44 ++++++- module/testcase/test/model/importtolib.php | 31 +++++ module/testcase/test/tao/doupdate.php | 25 ++++ module/testcase/test/testcase.class.php | 128 ++++++++++++++++++++ module/testcase/zen.php | 108 +++++++++++++++++ 7 files changed, 373 insertions(+), 106 deletions(-) create mode 100644 module/testcase/test/model/importtolib.php create mode 100755 module/testcase/test/tao/doupdate.php diff --git a/module/testcase/control.php b/module/testcase/control.php index 096ffa0865..1fe82699e0 100644 --- a/module/testcase/control.php +++ b/module/testcase/control.php @@ -1211,17 +1211,24 @@ class testcase extends control } /** + * 导入用例到用例库。 * Import cases to library. * * @param int $caseID * @access public * @return void */ - public function importToLib($caseID = 0) + public function importToLib(int $caseID = 0) { if(!empty($_POST)) { - $this->testcase->importToLib($caseID); + $libID = $this->post->lib; + if(empty($libID)) return $this->send(array('result' => 'fail', 'message' => sprintf($this->lang->error->notempty, $this->lang->testcase->caselib))); + + list($cases, $steps, $files) = $this->testcaseZen->buildDataForImportToLib($caseID, $libID); + + $this->testcase->importToLib($cases, $steps, $files); + if(dao::isError()) return $this->send(array('result' => 'fail', 'message' => dao::getError())); if(!empty($caseID)) return $this->send(array('result' => 'success', 'message' => $this->lang->importSuccess, 'closeModal' => true)); return $this->send(array('result' => 'success', 'message' => $this->lang->importSuccess, 'load' => true, 'closeModal' => true)); diff --git a/module/testcase/model.php b/module/testcase/model.php index e16f90f8b3..cb93898bc8 100644 --- a/module/testcase/model.php +++ b/module/testcase/model.php @@ -40,8 +40,6 @@ class testcaseModel extends model */ public function create(object $case): bool|int { - if(empty($case->product)) $this->config->testcase->create->requiredFields = str_replace('story', '', $this->config->testcase->create->requiredFields); - /* 插入测试用例。 */ /* Insert testcase. */ $this->testcaseTao->doCreate($case); @@ -723,17 +721,7 @@ class testcaseModel extends model */ public function update(object $case, object $oldCase, array $testtasks = array()): bool|array { - /* Remove the require field named story when the case is a lib case.*/ - $requiredFields = $this->config->testcase->edit->requiredFields; - if($oldCase->lib != 0) $requiredFields = str_replace(',story,', ',', ",$requiredFields,"); - - $this->dao->update(TABLE_CASE)->data($case, 'deleteFiles,uid,stepChanged,comment,steps,expects,stepType,linkBug') - ->autoCheck() - ->batchCheck($requiredFields, 'notempty') - ->checkFlow() - ->where('id')->eq((int)$case->id) - ->exec(); - + $this->testcaseTao->doUpdate($case); if(dao::isError()) return false; $this->testcaseTao->updateCase2Project($oldCase, $case); @@ -1289,118 +1277,56 @@ class testcaseModel extends model } /** + * 导入测试用例到用例库。 * Import cases to lib. * - * @param int $caseIdList + * @param array $cases + * @param array $steps + * @param array $files * @access public - * @return void + * @return bool */ - public function importToLib($caseIdList = 0) + public function importToLib(array $cases, array $steps, array $files): bool { - if(empty($caseIdList)) $caseIdList = $this->post->caseIdList; - $caseIdList = explode(',' , $caseIdList); - $libID = $this->post->lib; - - if(empty($libID)) return dao::$errors[] = sprintf($this->lang->error->notempty, $this->lang->testcase->caselib); - $this->loadModel('action'); - $cases = $this->dao->select('*')->from(TABLE_CASE)->where('deleted')->eq(0)->andWhere('id')->in($caseIdList)->fetchAll('id'); - $caseSteps = $this->dao->select('*')->from(TABLE_CASESTEP)->where('`case`')->in($caseIdList)->orderBy('id')->fetchGroup('case'); - $caseFiles = $this->dao->select('*')->from(TABLE_FILE)->where('objectID')->in($caseIdList)->andWhere('objectType')->eq('testcase')->fetchGroup('objectID', 'id'); - $libCases = $this->loadModel('caselib')->getLibCases($libID, 'all'); - $libFiles = $this->dao->select('*')->from(TABLE_FILE)->where('objectID')->in(array_keys($libCases))->andWhere('objectType')->eq('testcase')->fetchGroup('objectID', 'id'); - $libCases = $this->dao->select('*')->from(TABLE_CASE)->where('lib')->eq($libID)->andWhere('product')->eq(0)->andWhere('deleted')->eq('0')->fetchGroup('fromCaseID', 'id'); - $maxOrder = $this->dao->select('max(`order`) as maxOrder')->from(TABLE_CASE)->where('deleted')->eq(0)->fetch('maxOrder'); - $maxModuleOrder = $this->dao->select('max(`order`) as maxOrder')->from(TABLE_MODULE)->where('deleted')->eq(0)->fetch('maxOrder'); - foreach($cases as $caseID => $case) + foreach($cases as $case) { - $libCase = new stdclass(); - $libCase->lib = $libID; - $libCase->title = $case->title; - $libCase->precondition = $case->precondition; - $libCase->keywords = $case->keywords; - $libCase->pri = $case->pri; - $libCase->type = $case->type; - $libCase->stage = $case->stage; - $libCase->status = $case->status; - $libCase->fromCaseID = $case->id; - $libCase->fromCaseVersion = $case->version; - $libCase->order = ++ $maxOrder; - $libCase->module = empty($case->module) ? 0 : $this->importCaseRelatedModules($libID, $case->module, $maxModuleOrder); - - if(empty($libCases[$caseID])) + /* 如果用例没有 ID,插入用例。 */ + /* If case id is not exist, insert it. */ + if(!isset($case->id)) { - $libCase->openedBy = $this->app->user->account; - $libCase->openedDate = helper::now(); - $this->dao->insert(TABLE_CASE)->data($libCase)->autoCheck()->exec(); - if(!dao::isError()) $libCaseID = $this->dao->lastInsertID(); - $this->action->create('case', $libCaseID, 'tolib', '', $caseID); + $this->testcaseTao->doCreate($case); + if(!dao::isError()) + { + $caseID = $this->dao->lastInsertID(); + $this->action->create('case', $caseID, 'tolib', '', $case->fromCaseID); + } } + /* 如果用例有 ID,更新用例。 */ + /* If case id is exist, update it. */ else { - $libCaseList = array_keys($libCases[$caseID]); - $libCaseID = $libCaseList[0]; + $caseID = $case->id; + $this->testcaseTao->doUpdate($case); + $this->action->create('case', $caseID, 'updatetolib', '', $case->fromCaseID); - $libCase->lastEditedBy = $this->app->user->account; - $libCase->lastEditedDate = helper::now(); - $libCase->version = (int)$libCases[$caseID][$libCaseID]->version + 1; - $this->dao->update(TABLE_CASE)->data($libCase)->autoCheck()->where('id')->eq((int)$libCaseID)->exec(); + $this->dao->delete()->from(TABLE_CASESTEP)->where('`case`')->eq($caseID)->exec(); - $this->action->create('case', $libCaseID, 'updatetolib', '', $caseID); - - $this->dao->delete()->from(TABLE_CASESTEP)->where('`case`')->eq($libCaseID)->exec(); - - $removeFiles = zget($libFiles, $libCaseID, array()); - $this->dao->delete()->from(TABLE_FILE)->where('`objectID`')->eq($libCaseID)->andWhere('objectType')->eq('testcase')->exec(); + $removeFiles = $this->dao->select('*')->from(TABLE_FILE)->where('`objectID`')->eq($caseID)->andWhere('objectType')->eq('testcase')->fetchAll('id'); + $this->dao->delete()->from(TABLE_FILE)->where('`objectID`')->eq($caseID)->andWhere('objectType')->eq('testcase')->exec(); foreach($removeFiles as $fileID => $file) { + if(empty($file->pathname)) continue; $filePath = pathinfo($file->pathname, PATHINFO_BASENAME); $datePath = substr($file->pathname, 0, 6); $filePath = $this->app->getAppRoot() . "www/data/upload/{$this->app->company->id}/" . "{$datePath}/" . $filePath; unlink($filePath); } } - - if(!dao::isError()) - { - if(isset($caseSteps[$caseID])) - { - foreach($caseSteps[$caseID] as $index => $step) - { - if($step->version != $case->version) continue; - $oldStepID = $step->id; - $step->case = $libCaseID; - $step->version = zget($libCase, 'version', '0'); - unset($step->id); - - $this->dao->insert(TABLE_CASESTEP)->data($step)->exec(); - } - } - - $oldFiles = zget($caseFiles, $caseID, array()); - foreach($oldFiles as $fileID => $file) - { - $originName = pathinfo($file->pathname, PATHINFO_FILENAME); - $datePath = substr($file->pathname, 0, 6); - $originFile = $this->app->getAppRoot() . "www/data/upload/{$this->app->company->id}/" . "{$datePath}/" . $originName; - - $copyName = $originName . 'copy' . $libCaseID; - $copyFile = $this->app->getAppRoot() . "www/data/upload/{$this->app->company->id}/" . "{$datePath}/" . $copyName; - copy($originFile, $copyFile); - - $newFileName = $file->pathname; - $newFileName = str_replace('.', "copy$libCaseID.", $newFileName); - $file->pathname = $newFileName; - - $file->objectID = $libCaseID; - $file->addedBy = $this->app->user->account; - $file->addedDate = helper::now(); - $file->downloads = 0; - unset($file->id); - $this->dao->insert(TABLE_FILE)->data($file)->exec(); - } - } + $this->testcaseTao->importSteps($caseID, zget($steps, $case->fromCaseID, array())); + $this->testcaseTao->importFiles($caseID, zget($files, $case->fromCaseID, array())); } + return !dao::isError(); } /** diff --git a/module/testcase/tao.php b/module/testcase/tao.php index 014bbc06fa..4cafd4c85e 100644 --- a/module/testcase/tao.php +++ b/module/testcase/tao.php @@ -229,7 +229,7 @@ class testcaseTao extends testcaseModel */ protected function getRelatedFiles(array $caseIdList): array { - return $this->dao->select('id, objectID, pathname, title')->from(TABLE_FILE)->where('objectType')->eq('testcase')->andWhere('objectID')->in($caseIdList)->andWhere('extra')->ne('editor')->fetchGroup('objectID'); + return $this->dao->select('*')->from(TABLE_FILE)->where('objectType')->eq('testcase')->andWhere('objectID')->in($caseIdList)->andWhere('extra')->ne('editor')->fetchGroup('objectID'); } /** @@ -242,6 +242,9 @@ class testcaseTao extends testcaseModel */ protected function doCreate(object $case): bool { + if(empty($case->product)) $this->config->testcase->create->requiredFields = str_replace('story', '', $this->config->testcase->create->requiredFields); + if(!empty($case->lib)) $this->config->testcase->create->requiredFields = str_replace('product', '', $this->config->testcase->create->requiredFields); + $this->dao->insert(TABLE_CASE)->data($case, 'steps,expects,files,labels,stepType,needReview,scriptFile,scriptName') ->autoCheck() ->batchCheck($this->config->testcase->create->requiredFields, 'notempty') @@ -250,6 +253,29 @@ class testcaseTao extends testcaseModel return !dao::isError(); } + /** + * 更新一个测试用例。 + * Update a test case. + * + * @param object $case + * @access protected + * @return bool + */ + protected function doUpdate(object $case): bool + { + /* Remove the require field named story when the case is a lib case.*/ + $requiredFields = $this->config->testcase->edit->requiredFields; + if(!empty($case->lib)) $requiredFields = str_replace(',story,', ',', ",$requiredFields,"); + + $this->dao->update(TABLE_CASE)->data($case, 'deleteFiles,uid,stepChanged,comment,steps,expects,stepType,linkBug') + ->autoCheck() + ->batchCheck($requiredFields, 'notempty') + ->checkFlow() + ->where('id')->eq((int)$case->id) + ->exec(); + return !dao::isError(); + } + /* * 处理用例和项目的关系。 * Deal with the relationship between the case and project when edit the case. @@ -430,6 +456,22 @@ class testcaseTao extends testcaseModel /* Insert files. */ foreach($files as $fileID => $file) { + if(isset($file->oldpathname)) + { + if(!empty($file->oldpathname)) + { + $originName = pathinfo($file->oldpathname, PATHINFO_FILENAME); + $datePath = substr($file->oldpathname, 0, 6); + $originFile = $this->app->getAppRoot() . "www/data/upload/{$this->app->company->id}/" . "{$datePath}/" . $originName; + + $copyName = $originName . 'copy' . $caseID; + $copyFile = $this->app->getAppRoot() . "www/data/upload/{$this->app->company->id}/" . "{$datePath}/" . $copyName; + copy($originFile, $copyFile); + } + + unset($file->oldpathname); + } + $file->objectID = $caseID; $file->addedBy = $this->app->user->account; $file->addedDate = helper::now(); diff --git a/module/testcase/test/model/importtolib.php b/module/testcase/test/model/importtolib.php new file mode 100644 index 0000000000..c31961794e --- /dev/null +++ b/module/testcase/test/model/importtolib.php @@ -0,0 +1,31 @@ +#!/usr/bin/env php +gen('20'); +zdTable('file')->config('casefile')->gen('20'); +zdTable('casestep')->config('casestep')->gen('20'); +zdTable('user')->gen('1'); + +su('admin'); + +/** + +title=测试 testcaseTao->importToLib(); +cid=1 +pid=1 + + +*/ + +$testcase = new testcaseTest(); + +$caseIdList = array(array(1, 2), array(3, 4), array(100)); + +r($testcase->importToLibTest($caseIdList[0])) && p() && e('1: 21,22,23,24,25,26,27,28,29,30,31,32 21,22; 2: 33 23,24;'); // 测试将case id 1,2 导入到用例库 +r($testcase->importToLibTest($caseIdList[1])) && p() && e('3: 34 25,26; 4: 35 27,28;'); // 测试将case id 3,4 导入到用例库 +r($testcase->importToLibTest($caseIdList[2])) && p() && e('0'); // 测试将不存在的case id 100 导入到用例库 +r($testcase->importToLibTest($caseIdList[0])) && p() && e('1: 36,37,38,39,40,41,42,43,44,45,46,47 29,30; 2: 48 31,32;'); // 测试重复将case id 1,2 导入到用例库 +r($testcase->importToLibTest($caseIdList[1])) && p() && e('3: 49 33,34; 4: 50 35,36;'); // 测试重复将case id 3,4 导入到用例库 +r($testcase->importToLibTest($caseIdList[2])) && p() && e('0'); // 测试重复将不存在的case id 100 导入到用例库 diff --git a/module/testcase/test/tao/doupdate.php b/module/testcase/test/tao/doupdate.php new file mode 100755 index 0000000000..9e977c721b --- /dev/null +++ b/module/testcase/test/tao/doupdate.php @@ -0,0 +1,25 @@ +#!/usr/bin/env php +doUpdate(); +timeout=0 +cid=1 + + +*/ + +$testcaseIdList = array(1, 2, 3); + +$title = array('title' => '修改后的用例'); +$type = array('type' => 'install'); +$pri = array('pri' => '1'); + +$testcase = new testCaseTest(); +r($testcase->doUpdateTest($testcaseIdList[0], $title)) && p('title,type,pri') && e('修改后的用例,feature,3'); // 测试更新用例名称 +r($testcase->doUpdateTest($testcaseIdList[1], $type)) && p('title,type,pri') && e('测试创建测试用例2,install,1'); // 测试更新用例类型 +r($testcase->doUpdateTest($testcaseIdList[2], $pri)) && p('title,type,pri') && e('测试创建测试用例3,feature,1'); // 测试更新用例优先级 diff --git a/module/testcase/test/testcase.class.php b/module/testcase/test/testcase.class.php index 3501f4c39c..fbd52ae81a 100644 --- a/module/testcase/test/testcase.class.php +++ b/module/testcase/test/testcase.class.php @@ -1003,4 +1003,132 @@ class testcaseTest $caseID = $tester->dao->lastInsertID(); return $this->objectModel->fetchBaseInfo($caseID); } + + /** + * 测试更新一个测试用例。 + * Test update a case. + * + * @param int $caseID + * @param array $param + * @access public + * @return bool|array|object + */ + public function doUpdateTest(int $caseID, array $param = array()): bool|array|object + { + $oldCase = $this->objectModel->getByID($caseID); + + $case = new stdclass(); + $case->id = $oldCase->id; + $case->title = $oldCase->title; + $case->color = $oldCase->color; + $case->precondition = $oldCase->precondition; + $case->steps = array('用例步骤描述1'); + $case->stepType = array('step'); + $case->expects = array('这是用例预期结果1'); + $case->comment = ''; + $case->lastEditedDate = $oldCase->lastEditedDate; + $case->product = $oldCase->product; + $case->module = $oldCase->module; + $case->story = $oldCase->story; + $case->type = $oldCase->type; + $case->stage = $oldCase->stage; + $case->pri = $oldCase->pri; + $case->status = $oldCase->status; + $case->keywords = $oldCase->keywords; + $case->linkBug = array(); + + foreach($param as $field => $value) $case->$field = $value; + + $this->objectModel->doUpdate($case); + + if(dao::isError()) return dao::getError(); + + return $this->objectModel->fetchBaseInfo($caseID); + } + + /** + * 测试导入测试用例到用例库。 + * Test import cases to lib. + * + * @param array $caseIdList + * @access public + * @return string + */ + public function importToLibTest(array $caseIdList): string + { + $cases = $this->objectModel->getByList($caseIdList); + + global $tester; + $files = $tester->dao->select('*')->from(TABLE_FILE)->where('`objectID`')->in($caseIdList)->andWhere('objectType')->eq('testcase')->fetchGroup('objectID', 'id'); + $steps = $tester->dao->select('*')->from(TABLE_CASESTEP)->where('`case`')->in($caseIdList)->fetchGroup('case', 'id'); + + $importCases = array(); + $libCases = $tester->dao->select('*')->from(TABLE_CASE)->where('`fromCaseID`')->in($caseIdList)->fetchGroup('fromCaseID', 'id'); + foreach($cases as $caseID => $case) + { + $libCase = new stdclass(); + $libCase->lib = '1'; + $libCase->product = '0'; + $libCase->title = $case->title; + $libCase->precondition = $case->precondition; + $libCase->keywords = $case->keywords; + $libCase->pri = $case->pri; + $libCase->type = $case->type; + $libCase->stage = $case->stage; + $libCase->status = $case->status; + $libCase->fromCaseID = $case->id; + $libCase->fromCaseVersion = $case->version; + $libCase->order = $case->order; + $libCase->module = 0; + + $libCaseID = 0; + if(empty($libCases[$caseID])) + { + $libCase->openedBy = $tester->app->user->account; + $libCase->openedDate = helper::now(); + } + else + { + $libCaseList = array_keys($libCases[$caseID]); + $libCaseID = $libCaseList[0]; + + $libCase->id = $libCaseID; + $libCase->lastEditedBy = $tester->app->user->account; + $libCase->lastEditedDate = helper::now(); + $libCase->version = (int)$libCases[$case->id][$libCaseID]->version + 1; + } + + if(!isset($steps[$caseID])) $steps[$caseID] = array(); + foreach($steps[$caseID] as $stepID => $step) + { + $step->version = zget($libCase, 'version', '0'); + unset($step->id); + } + + if(!isset($files[$caseID])) $files[$caseID] = array(); + foreach($files[$caseID] as $fileID => $file) + { + $file->oldpathname = $file->pathname; + $file->pathname = str_replace('.', "copy{$libCaseID}.", $file->pathname); + } + $importCases[] = $libCase; + } + + $this->objectModel->importToLib($importCases, $steps, $files); + + if(dao::isError()) return dao::getError()[0]; + $return = ''; + $libCases = $tester->dao->select('*')->from(TABLE_CASE)->where('`fromCaseID`')->in($caseIdList)->fetchGroup('fromCaseID', 'id'); + foreach($libCases as $caseID => $cases) + { + foreach($cases as $libCase) + { + $steps = $tester->dao->select('id')->from(TABLE_CASESTEP)->where('`case`')->eq($libCase->id)->fetchPairs(); + $files = $tester->dao->select('id')->from(TABLE_FILE)->where('`objectID`')->eq($libCase->id)->andWhere('objectType')->eq('testcase')->fetchPairs(); + $return .= $caseID . ': ' . implode(',', $steps) . ' ' . implode(',', $files) . '; '; + } + } + + return trim($return); + } } diff --git a/module/testcase/zen.php b/module/testcase/zen.php index 0eb78d6362..19ef586cac 100644 --- a/module/testcase/zen.php +++ b/module/testcase/zen.php @@ -1417,6 +1417,7 @@ class testcaseZen extends testcase } /** + * 构建从用例库导入的数据。 * Build data for importing from lib. * * @param int $productID @@ -1496,6 +1497,66 @@ class testcaseZen extends testcase return array($cases, $steps, $files, $imported); } + /** + * 构建导入到用例库的数据。 + * Build data for import to lib. + * + * @param int $caseID + * @param int $libID + * @access protected + * @return array + */ + protected function buildDataForImportToLib(int $caseID, int $libID): array + { + $cases = array(); + $steps = array(); + $files = array(); + $caseIdList = !empty($caseID) ? $caseID : $this->post->caseIdList; + $caseIdList = str_replace('case_' , '', $caseIdList); + $caseIdList = explode(',' , $caseIdList); + $fromCases = $this->testcase->getByList($caseIdList); + $fromSteps = $this->testcase->fetchStepsByList($caseIdList); + $fromFiles = $this->testcase->getRelatedFiles($caseIdList); + $libCases = $this->loadModel('caselib')->getLibCases($libID, 'all'); + $libCases = $this->dao->select('*')->from(TABLE_CASE)->where('lib')->eq($libID)->andWhere('product')->eq(0)->andWhere('deleted')->eq('0')->fetchGroup('fromCaseID', 'id'); + $maxOrder = $this->dao->select('max(`order`) as maxOrder')->from(TABLE_CASE)->where('deleted')->eq(0)->fetch('maxOrder'); + $maxModuleOrder = $this->dao->select('max(`order`) as maxOrder')->from(TABLE_MODULE)->where('deleted')->eq(0)->fetch('maxOrder'); + foreach($fromCases as $caseID => $case) + { + /* 初始化用例。 */ + /* Init case. */ + $libCase = $this->initLibCase($case, $libID, ++ $maxOrder, $maxModuleOrder, $libCases); + + /* 设置用例步骤。 */ + /* Set case steps. */ + $steps[$caseID] = array(); + if(!isset($fromSteps[$caseID])) $fromSteps[$caseID] = array(); + foreach($fromSteps[$caseID] as $step) + { + $stepID = $step->id; + $step->version = zget($libCase, 'version', '0'); + unset($step->id); + $steps[$caseID][$stepID] = $step; + } + + /* 设置用例文件。 */ + /* Set case files. */ + $files[$caseID] = array(); + if(!isset($fromFiles[$caseID])) $fromFiles[$caseID] = array(); + foreach($fromFiles[$caseID] as $file) + { + $file->oldpathname = $file->pathname; + $file->pathname = str_replace('.', "copy{$libCase->id}.", $file->pathname); + + $files[$caseID][$file->id] = $file; + } + + $cases[$caseID] = $libCase; + } + + return array($cases, $steps, $files); + } + /** * 为展示导入用例构建更新的用例。 * Build update case for showing import. @@ -1753,6 +1814,53 @@ class testcaseZen extends testcase return $case; } + /** + * 初始化要导入到用例库的用例 + * Init case to import to lib. + * + * @param object $case + * @param int $libID + * @param int $maxOrder + * @param int $maxModuleOrder + * @param bool $isImported + * @access protected + * @return object + */ + protected function initLibCase(object $case, int $libID, int $maxOrder, int $maxModuleOrder, array $libCases): object + { + $libCase = new stdclass(); + $libCase->lib = $libID; + $libCase->title = $case->title; + $libCase->precondition = $case->precondition; + $libCase->keywords = $case->keywords; + $libCase->pri = $case->pri; + $libCase->type = $case->type; + $libCase->stage = $case->stage; + $libCase->status = $case->status; + $libCase->fromCaseID = $case->id; + $libCase->fromCaseVersion = $case->version; + $libCase->order = $maxOrder; + $libCase->module = empty($case->module) ? 0 : $this->importCaseRelatedModules($libID, $case->module, $maxModuleOrder); + + if(!isset($libCases[$case->id])) + { + $libCase->openedBy = $this->app->user->account; + $libCase->openedDate = helper::now(); + } + else + { + $libCaseList = array_keys($libCases[$case->id]); + $libCaseID = $libCaseList[0]; + + $libCase->id = $libCaseID; + $libCase->lastEditedBy = $this->app->user->account; + $libCase->lastEditedDate = helper::now(); + $libCase->version = (int)$libCases[$case->id][$libCaseID]->version + 1; + } + + return $libCase; + } + /** * 导入用例。 * Import cases.