From 40e63172c0992c6b7f68650a8feaee2289cd978d Mon Sep 17 00:00:00 2001 From: tanghucheng Date: Wed, 20 Dec 2023 17:24:34 +0800 Subject: [PATCH] * Refactor transfer model: getRows method. --- module/task/config/dtable.php | 6 ++-- module/transfer/model.php | 34 +++++++++---------- module/transfer/test/model/getrows.php | 44 +++++++++++++++++++++++++ module/transfer/test/transfer.class.php | 30 +++++++++++++++++ 4 files changed, 93 insertions(+), 21 deletions(-) create mode 100644 module/transfer/test/model/getrows.php diff --git a/module/task/config/dtable.php b/module/task/config/dtable.php index 961ad29a40..20d18cc606 100644 --- a/module/task/config/dtable.php +++ b/module/task/config/dtable.php @@ -151,17 +151,17 @@ $config->task->dtable->fieldList['story']['type'] = 'desc'; $config->task->dtable->fieldList['story']['sortType'] = true; $config->task->dtable->fieldList['story']['show'] = true; $config->task->dtable->fieldList['story']['group'] = 9; -$config->task->dtable->fieldList['story']['dataSource'] = array('module' => 'story', 'method' => 'getExecutionStoryPairs', 'params' => '$executionID&0&all&&&active'); +$config->task->dtable->fieldList['story']['dataSource'] = array('module' => 'story', 'method' => 'getExecutionStoryPairs', 'params' => ['executionID' => (int)'$executionID', 'productID' => 0, 'branch' => 'all', 'moduleIdList' => '', 'type' => '', 'status' => 'active']); $config->task->dtable->fieldList['module']['title'] = 'module'; $config->task->dtable->fieldList['module']['control'] = 'select'; -$config->task->dtable->fieldList['module']['dataSource'] = array('module' => 'tree', 'method' => 'getTaskOptionMenu', 'params' => '$executionID'); +$config->task->dtable->fieldList['module']['dataSource'] = array('module' => 'tree', 'method' => 'getTaskOptionMenu', 'params' => ['rootID' => (int)'$executionID']); $config->task->dtable->fieldList['module']['display'] = false; $config->task->dtable->fieldList['execution']['title'] = 'execution'; $config->task->dtable->fieldList['execution']['control'] = 'hidden'; $config->task->dtable->fieldList['execution']['type'] = 'html'; -$config->task->dtable->fieldList['execution']['dataSource'] = array('module' => 'execution', 'method' => 'getPairs'); +$config->task->dtable->fieldList['execution']['dataSource'] = array('module' => 'execution', 'method' => 'getPairs', 'params' => ['projectID' => 0]); $config->task->dtable->fieldList['execution']['display'] = false; $config->task->dtable->fieldList['project']['title'] = 'project'; diff --git a/module/transfer/model.php b/module/transfer/model.php index 93ef32b2af..55ee1d6a2e 100644 --- a/module/transfer/model.php +++ b/module/transfer/model.php @@ -532,27 +532,27 @@ class transferModel extends model } /** + * 获取导出数据。 * Get Rows. * - * @param string $module - * @param object|string|array $fieldList + * @param string $module + * @param object|array $fieldList * @access public - * @return void + * @return array */ - public function getRows(string $module, object|string|array $fieldList) + public function getRows(string $module, object|array $fieldList) { - $moduleDatas = $this->getQueryDatas($module); + $moduleDatas = $this->getQueryDatas($module); // 根据SESSION中的条件查询数据。 - if(is_object($fieldList)) $fieldList = (array) $fieldList; - if(isset($fieldList['files'])) $moduleDatas = $this->getFiles($module, $moduleDatas); + if(is_object($fieldList)) $fieldList = (array) $fieldList; + if(isset($fieldList['files'])) $moduleDatas = $this->getFiles($module, $moduleDatas); // 如果有附件字段则获取附件。 + /* 如果存在rows则用rows中的数据覆盖查询的数据。*/ + /* If has rows, use rows data to cover query data. */ $rows = !empty($_POST['rows']) ? $_POST['rows'] : array(); + foreach($rows as $id => $row) $moduleDatas[$id] = (object) array_merge((array)$moduleDatas[$id], (array)$row); - foreach($rows as $id => $row) - { - $moduleDatas[$id] = (object) array_merge((array)$moduleDatas[$id], (array)$row); - } - + /* 设置子数据。*/ /* Deal children datas and multiple tasks. */ if($moduleDatas) $moduleDatas = $this->updateChildDatas($moduleDatas); @@ -834,16 +834,14 @@ class transferModel extends model $children = array(); foreach($datas as $data) { + $id = $data->id; + if(!empty($data->mode)) $datas[$id]->name = '[' . $this->lang->task->multipleAB . '] ' . $data->name; if(!empty($data->parent) and isset($datas[$data->parent])) { if(!empty($data->name)) $data->name = '>' . $data->name; elseif(!empty($data->title)) $data->title = '>' . $data->title; - $children[$data->parent][$data->id] = $data; - unset($datas[$data->id]); - } - if(!empty($data->mode)) - { - $datas[$data->id]->name = '[' . $this->lang->task->multipleAB . '] ' . $data->name; + $children[$data->parent][$id] = $data; + unset($datas[$id]); } } diff --git a/module/transfer/test/model/getrows.php b/module/transfer/test/model/getrows.php new file mode 100644 index 0000000000..eee39393f6 --- /dev/null +++ b/module/transfer/test/model/getrows.php @@ -0,0 +1,44 @@ +#!/usr/bin/env php +gen(20); +$file = zdTable('file'); +$file->objectType->range('task'); +$file->gen(10); + +$task = zdTable('task'); +$task->project->range('11'); +$task->parent->range('0{3},3{7}'); +$task->mode->range('linear{1},multi{1},0{8}'); +$task->execution->range('101'); +$task->gen(10); + +su('admin'); + +/** + +title=测试 transfer->getRows(); +timeout=0 +cid=1 + +- 测试导出多人并行任务第0条的name属性 @[多人] 开发任务11 +- 测试导出多人串行任务第1条的name属性 @[多人] 开发任务12 +- 测试导出正常任务第2条的name属性 @开发任务13 +- 测试导出子任务第3条的name属性 @>开发任务14 + +*/ +$transfer = new transferTest(); + +//a($transfer->getRowsTest('task'));die; +/* 测试导出任务。*/ +r($transfer->getRowsTest('task')) && p('0:name') && e('[多人] 开发任务11'); // 测试导出多人并行任务 +r($transfer->getRowsTest('task')) && p('1:name') && e('[多人] 开发任务12'); // 测试导出多人串行任务 +r($transfer->getRowsTest('task')) && p('2:name') && e('开发任务13'); // 测试导出正常任务 +r($transfer->getRowsTest('task')) && p('3:name') && e('>开发任务14'); // 测试导出子任务 +r(isset($transfer->getRowsTest('task')[8]->files)) && p('') && e('1'); // 测试导出附件是否存在 + +$task = new stdclass(); +$task->name = '追加任务1'; +$_POST['rows']['2'] = $task; +r($transfer->getRowsTest('task')) && p('1:name') && e('[多人] 追加任务1'); // 测试当有数据需要单独处理时 diff --git a/module/transfer/test/transfer.class.php b/module/transfer/test/transfer.class.php index e34f54a9b3..01c1292311 100644 --- a/module/transfer/test/transfer.class.php +++ b/module/transfer/test/transfer.class.php @@ -154,4 +154,34 @@ class transferTest return $this->objectModel->getQueryDatas($module); } + + /** + * 测试getRows。 + * Get query datas. + * + * @param string $module + * @access public + * @return array + */ + public function getRowsTest(string $module = '', string $checkedItem = '') + { + global $tester, $app; + $app->methodName = 'export'; + + $object = $tester->loadModel($module); + $fields = isset($object->config->$module->exportFields) ? $object->config->$module->exportFields : ''; + + $_SESSION[$module . 'TransferParams']['executionID'] = 101; + if($module == 'testcase') + { + $app->config->testcase->cascade = array('story' => 'module'); + $app->config->testcase->listFields = 'module,type,stage,pri,story,status,branch,results'; + } + + $fields = explode(',', $fields); + $fieldList = $this->objectModel->initFieldList($module, $fields); + + $this->getQueryDatasTest($module); + return $this->objectModel->getRows($module, $fieldList); + } }