* Refactor bugModel-batchCreate, and add unit test.
This commit is contained in:
+11
-1
@@ -269,10 +269,20 @@ class bug extends control
|
||||
$bugs = $this->bugZen->buildBugsForBatchCreate($productID, $branch, $this->session->bugImagesFile);
|
||||
|
||||
/* Batch create bugs. */
|
||||
$actions = $this->bug->batchCreate($productID, $branch, $extra);
|
||||
$actions = $this->bug->batchCreate($productID, $branch, $output, $this->post->uploadImage, $this->session->bugImagesFile);
|
||||
|
||||
helper::setcookie('bugModule', 0, 0);
|
||||
|
||||
/* Remove upload image file and session. */
|
||||
if(!empty($this->post->uploadImage) and !empty($this->session->bugImagesFile))
|
||||
{
|
||||
$classFile = $this->app->loadClass('zfile');
|
||||
$file = current($_SESSION['bugImagesFile']);
|
||||
$realPath = dirname($file['realpath']);
|
||||
if(is_dir($realPath)) $classFile->removeDir($realPath);
|
||||
unset($_SESSION['bugImagesFile']);
|
||||
}
|
||||
|
||||
$response = $this->bugZen->responseAfterBatchCreate($productID, $branch, $executionID, $actions);
|
||||
return $this->send($response);
|
||||
}
|
||||
|
||||
+149
-181
@@ -68,167 +68,39 @@ class bugModel extends model
|
||||
}
|
||||
|
||||
/**
|
||||
* Batch create
|
||||
* 批量创建bug
|
||||
* Batch create bugs.
|
||||
*
|
||||
* @param int $productID
|
||||
* @param int $branch
|
||||
* @param string $extra
|
||||
* @param int $productID
|
||||
* @param array $extra
|
||||
* @param array|bool $extra
|
||||
* @access public
|
||||
* @return void
|
||||
* @return array
|
||||
*/
|
||||
public function batchCreate($productID, $branch = 0, $extra = '')
|
||||
public function batchCreate(array $bugs, int $productID, array $output = array(), array|bool $uploadImages = false, array|bool $bugImagesFiles = false)
|
||||
{
|
||||
$extra = str_replace(array(',', ' '), array('&', ''), $extra);
|
||||
parse_str($extra, $output);
|
||||
|
||||
/* Load module and init vars. */
|
||||
$this->loadModel('action');
|
||||
$this->loadModel('kanban');
|
||||
$branch = (int)$branch;
|
||||
$productID = (int)$productID;
|
||||
$now = helper::now();
|
||||
$actions = array();
|
||||
$data = fixer::input('post')->get();
|
||||
if(!empty($uploadImages)) $this->loadModel('file');
|
||||
|
||||
/* Remove the bug with the same name within the specified time. */
|
||||
$result = $this->loadModel('common')->removeDuplicate('bug', $data, "product={$productID}");
|
||||
$data = $result['data'];
|
||||
/* Check bugs. */
|
||||
$bugs = $this->bugTao->checkBugsForBatchCreate($bugs, $productID);
|
||||
if(dao::isError()) return false;
|
||||
|
||||
/* Get pairs(moduleID => moduleOwner) for bug. */
|
||||
$stmt = $this->dbh->query($this->loadModel('tree')->buildMenuQuery($productID, 'bug', $startModuleID = 0, $branch));
|
||||
$moduleOwners = array();
|
||||
while($module = $stmt->fetch()) $moduleOwners[$module->id] = $module->owner;
|
||||
|
||||
/* Construct data. */
|
||||
$module = 0;
|
||||
$project = 0;
|
||||
$execution = 0;
|
||||
$type = '';
|
||||
$pri = 0;
|
||||
foreach($data->title as $i => $title)
|
||||
{
|
||||
if(empty($title) and $this->common->checkValidRow('bug', $data, $i))
|
||||
{
|
||||
dao::$errors['message'][] = sprintf($this->lang->error->notempty, $this->lang->bug->title);
|
||||
return false;
|
||||
}
|
||||
|
||||
$oses = array_filter($data->oses[$i]);
|
||||
$browsers = array_filter($data->browsers[$i]);
|
||||
|
||||
if($data->modules[$i] != 'ditto') $module = (int)$data->modules[$i];
|
||||
if($data->projects[$i] != 'ditto') $project = (int)$data->projects[$i];
|
||||
if($data->executions[$i] != 'ditto') $execution = (int)$data->executions[$i];
|
||||
if($data->types[$i] != 'ditto') $type = $data->types[$i];
|
||||
if($data->pris[$i] != 'ditto') $pri = $data->pris[$i];
|
||||
|
||||
$data->modules[$i] = (int)$module;
|
||||
$data->projects[$i] = (int)$project;
|
||||
$data->executions[$i] = (int)$execution;
|
||||
$data->types[$i] = $type;
|
||||
$data->pris[$i] = $pri;
|
||||
$data->oses[$i] = implode(',', $oses);
|
||||
$data->browsers[$i] = implode(',', $browsers);
|
||||
}
|
||||
|
||||
/* Get bug data. */
|
||||
if(isset($data->uploadImage)) $this->loadModel('file');
|
||||
$extendFields = $this->getFlowExtendFields();
|
||||
$bugs = array();
|
||||
foreach($data->title as $i => $title)
|
||||
{
|
||||
$title = trim($title);
|
||||
if(empty($title)) continue;
|
||||
|
||||
$bug = new stdClass();
|
||||
$bug->openedBy = $this->app->user->account;
|
||||
$bug->openedDate = $now;
|
||||
$bug->product = (int)$productID;
|
||||
$bug->branch = isset($data->branches) ? (int)$data->branches[$i] : 0;
|
||||
$bug->module = (int)$data->modules[$i];
|
||||
$bug->project = (int)$data->projects[$i];
|
||||
$bug->execution = (int)$data->executions[$i];
|
||||
$bug->openedBuild = isset($data->openedBuilds) ? implode(',', $data->openedBuilds[$i]) : '';
|
||||
$bug->color = $data->color[$i];
|
||||
$bug->title = $title;
|
||||
$bug->deadline = $data->deadlines[$i];
|
||||
$bug->steps = nl2br($data->stepses[$i]);
|
||||
$bug->type = $data->types[$i];
|
||||
$bug->pri = $data->pris[$i];
|
||||
$bug->severity = $data->severities[$i];
|
||||
$bug->os = $data->oses[$i];
|
||||
$bug->browser = $data->browsers[$i];
|
||||
$bug->keywords = $data->keywords[$i];
|
||||
|
||||
if(isset($data->lanes[$i])) $bug->laneID = $data->lanes[$i];
|
||||
|
||||
/* Assign the bug to the person in charge of the module. */
|
||||
if(!empty($moduleOwners[$bug->module]))
|
||||
{
|
||||
$bug->assignedTo = $moduleOwners[$bug->module];
|
||||
$bug->assignedDate = $now;
|
||||
}
|
||||
|
||||
/* Get extend fields. */
|
||||
foreach($extendFields as $extendField)
|
||||
{
|
||||
$bug->{$extendField->field} = $this->post->{$extendField->field}[$i];
|
||||
if(is_array($bug->{$extendField->field})) $bug->{$extendField->field} = implode(',', $bug->{$extendField->field});
|
||||
|
||||
$bug->{$extendField->field} = htmlSpecialString($bug->{$extendField->field});
|
||||
}
|
||||
|
||||
/* Check required fields. */
|
||||
foreach(explode(',', $this->config->bug->create->requiredFields) as $field)
|
||||
{
|
||||
$field = trim($field);
|
||||
if($field and empty($bug->$field))
|
||||
{
|
||||
dao::$errors['message'][] = sprintf($this->lang->error->notempty, $this->lang->bug->$field);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
$bugs[$i] = $bug;
|
||||
}
|
||||
|
||||
foreach($bugs as $i => $bug)
|
||||
$actions = array();
|
||||
foreach($bugs as $index => $bug)
|
||||
{
|
||||
/* Get lane id, remove laneID from bug. */
|
||||
$laneID = isset($output['laneID']) ? $output['laneID'] : 0;
|
||||
$laneID = zget($output, 'laneID', 0);
|
||||
if(isset($bug->laneID))
|
||||
{
|
||||
$laneID = $bug->laneID;
|
||||
unset($bug->laneID);
|
||||
}
|
||||
|
||||
/* When the bug is created by uploading an image, add the image to the step of the bug. */
|
||||
if(!empty($data->uploadImage[$i]))
|
||||
{
|
||||
$fileName = $data->uploadImage[$i];
|
||||
$file = $this->session->bugImagesFile[$fileName];
|
||||
$uploadImage = !empty($uploadImages[$index]) ? $uploadImages[$index] : '';
|
||||
|
||||
$realPath = $file['realpath'];
|
||||
unset($file['realpath']);
|
||||
if(rename($realPath, $this->file->savePath . $this->file->getSaveName($file['pathname'])))
|
||||
{
|
||||
if(in_array($file['extension'], $this->config->file->imageExtensions))
|
||||
{
|
||||
$file['addedBy'] = $this->app->user->account;
|
||||
$file['addedDate'] = $now;
|
||||
$this->dao->insert(TABLE_FILE)->data($file)->exec();
|
||||
|
||||
$fileID = $this->dao->lastInsertID();
|
||||
$bug->steps .= '<img src="{' . $fileID . '.' . $file['extension'] . '}" alt="" />';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($file);
|
||||
}
|
||||
}
|
||||
|
||||
if($this->lang->navGroup->bug != 'qa') $bug->project = $this->session->project;
|
||||
$file = $this->processImageForBatchCreate($bug, $uploadImage, $bugImagesFiles);
|
||||
|
||||
/* Create a bug. */
|
||||
$this->dao->insert(TABLE_BUG)->data($bug)
|
||||
@@ -238,51 +110,18 @@ class bugModel extends model
|
||||
->exec();
|
||||
if(dao::isError()) return false;
|
||||
|
||||
$bugID = $this->dao->lastInsertID();
|
||||
$bug->id = $this->dao->lastInsertID();
|
||||
|
||||
$this->executeHooks($bugID);
|
||||
|
||||
/* If bug has the execution, update kanban data. */
|
||||
if($bug->execution)
|
||||
{
|
||||
$columnID = $this->kanban->getColumnIDByLaneID($laneID, 'unconfirmed');
|
||||
if(empty($columnID)) $columnID = isset($output['columnID']) ? $output['columnID'] : 0;
|
||||
|
||||
if(!empty($laneID) and !empty($columnID)) $this->kanban->addKanbanCell($bug->execution, $laneID, $columnID, 'bug', $bugID);
|
||||
if(empty($laneID) or empty($columnID)) $this->kanban->updateLane($bug->execution, 'bug');
|
||||
|
||||
}
|
||||
|
||||
$this->loadModel('score')->create('bug', 'create', $bugID);
|
||||
|
||||
/* When the bug is created by uploading the image, add the image to the file of the bug. */
|
||||
if(!empty($data->uploadImage[$i]) and !empty($file))
|
||||
{
|
||||
$file['objectType'] = 'bug';
|
||||
$file['objectID'] = $bugID;
|
||||
$file['addedBy'] = $this->app->user->account;
|
||||
$file['addedDate'] = $now;
|
||||
$this->dao->insert(TABLE_FILE)->data($file)->exec();
|
||||
unset($file);
|
||||
}
|
||||
/* Processing other operations after batch creation. */
|
||||
$actions[$bug->id] = $this->afterBatchCreate($bug, $laneID, $output, $uploadImage, $file);
|
||||
|
||||
if(dao::isError())
|
||||
{
|
||||
dao::$errors['message'][] = 'bug#' . ($i) . dao::getError(true);
|
||||
dao::$errors['message'][] = 'bug#' . ($index) . dao::getError(true);
|
||||
return false;
|
||||
}
|
||||
$actions[$bugID] = $this->action->create('bug', $bugID, 'Opened');
|
||||
}
|
||||
|
||||
/* Remove upload image file and session. */
|
||||
if(!empty($data->uploadImage) and $this->session->bugImagesFile)
|
||||
{
|
||||
$classFile = $this->app->loadClass('zfile');
|
||||
$file = current($_SESSION['bugImagesFile']);
|
||||
$realPath = dirname($file['realpath']);
|
||||
if(is_dir($realPath)) $classFile->removeDir($realPath);
|
||||
unset($_SESSION['bugImagesFile']);
|
||||
}
|
||||
if(!dao::isError()) $this->loadModel('score')->create('ajax', 'batchCreate');
|
||||
return $actions;
|
||||
}
|
||||
@@ -3140,4 +2979,133 @@ class bugModel extends model
|
||||
|
||||
return $index;
|
||||
}
|
||||
|
||||
/**
|
||||
* 检查批量创建的bug的数据。
|
||||
* Check the batch created bugs.
|
||||
*
|
||||
* @param array $bugs
|
||||
* @param int $productID
|
||||
* @access protected
|
||||
* @return array
|
||||
*/
|
||||
protected function checkBugsForBatchCreate(array $bugs, int $productID): array
|
||||
{
|
||||
$this->loadModel('common');
|
||||
|
||||
/* Remove the bug with the same name within the specified time. */
|
||||
foreach($bugs as $index => $bug)
|
||||
{
|
||||
$result = $this->common->removeDuplicate('bug', $bug, "product={$productID}");
|
||||
if(zget($result, 'stop', false) !== false)
|
||||
{
|
||||
unset($bugs[$index]);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* If the bug is not valid data, unset it.*/
|
||||
if($this->common->checkValidRow('bug', $bug, $index))
|
||||
{
|
||||
unset($bugs[$index]);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Title cannot be empty. */
|
||||
if(empty($bug->title)) dao::$errors['message'][] = sprintf($this->lang->error->notempty, $this->lang->bug->title);
|
||||
|
||||
/* Check required fields. */
|
||||
foreach(explode(',', $this->config->bug->create->requiredFields) as $field)
|
||||
{
|
||||
$field = trim($field);
|
||||
if($field and empty($bug->$field) and $field != 'title') dao::$errors['message'][] = sprintf($this->lang->error->notempty, $this->lang->bug->$field);
|
||||
}
|
||||
}
|
||||
|
||||
return $bugs;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量创建bug前处理上传图片。
|
||||
* Before batch creating bugs, process the uploaded images.
|
||||
*
|
||||
* @param object $bug
|
||||
* @param string $uploadImage
|
||||
* @param array|bool $bugImagesFiles
|
||||
* @access protected
|
||||
* @return array|false
|
||||
*/
|
||||
protected function processImageForBatchCreate(object $bug, string $uploadImage, array|bool $bugImagesFiles): array|false
|
||||
{
|
||||
/* When the bug is created by uploading an image, add the image to the step of the bug. */
|
||||
if(!empty($uploadImage))
|
||||
{
|
||||
$this->loadModel('file');
|
||||
|
||||
$file = $bugImagesFiles[$uploadImage];
|
||||
$realPath = $file['realpath'];
|
||||
|
||||
if(rename($realPath, $this->file->savePath . $this->file->getSaveName($file['pathname'])))
|
||||
{
|
||||
if(in_array($file['extension'], $this->config->file->imageExtensions))
|
||||
{
|
||||
$file['addedBy'] = $this->app->user->account;
|
||||
$file['addedDate'] = helper::now();
|
||||
$this->dao->insert(TABLE_FILE)->data($file, 'realpath')->exec();
|
||||
|
||||
$fileID = $this->dao->lastInsertID();
|
||||
$bug->steps .= '<img src="{' . $fileID . '.' . $file['extension'] . '}" alt="" />';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($file);
|
||||
}
|
||||
}
|
||||
|
||||
return !empty($file) ? $file : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量创建bug后的其他处理。
|
||||
* Processing after batch creation of bug.
|
||||
*
|
||||
* @param object $bug
|
||||
* @param int $laneID
|
||||
* @param array $output
|
||||
* @param string $uploadImage
|
||||
* @param array|bool $file
|
||||
* @access protected
|
||||
* @return int|bool
|
||||
*/
|
||||
protected function afterBatchCreate(object $bug, int $laneID, array $output, string $uploadImage, array|bool $file): int|bool
|
||||
{
|
||||
/* Record log. */
|
||||
$actionID = $this->loadModel('action')->create('bug', $bug->id, 'Opened');
|
||||
|
||||
$this->loadModel('score')->create('bug', 'create', $bug->id);
|
||||
|
||||
$this->executeHooks($bug->id);
|
||||
|
||||
/* If bug has the execution, update kanban data. */
|
||||
if($bug->execution)
|
||||
{
|
||||
$columnID = $this->loadModel('kanban')->getColumnIDByLaneID($laneID, 'unconfirmed');
|
||||
if(empty($columnID)) $columnID = zget($output, 'columnID', 0);
|
||||
|
||||
if(!empty($laneID) and !empty($columnID)) $this->kanban->addKanbanCell($bug->execution, $laneID, $columnID, 'bug', $bug->id);
|
||||
if(empty($laneID) or empty($columnID)) $this->kanban->updateLane($bug->execution, 'bug');
|
||||
}
|
||||
|
||||
/* When the bug is created by uploading the image, add the image to the file of the bug. */
|
||||
if(!empty($uploadImage) and !empty($file))
|
||||
{
|
||||
$file['objectType'] = 'bug';
|
||||
$file['objectID'] = $bug->id;
|
||||
$file['addedBy'] = $this->app->user->account;
|
||||
$file['addedDate'] = helper::now();
|
||||
$this->dao->insert(TABLE_FILE)->data($file, 'realpath')->exec();
|
||||
unset($file);
|
||||
}
|
||||
return $actionID;
|
||||
}
|
||||
}
|
||||
|
||||
+157
-29
@@ -46,20 +46,25 @@ class bugTest
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试批量创建bug。
|
||||
* Test batch create bugs.
|
||||
*
|
||||
* @param int $productID
|
||||
* @param array $param
|
||||
* @param int $productID
|
||||
* @param array $param
|
||||
* @param array $output
|
||||
* @param array|false $uploadImages
|
||||
* @param array|false $bugImagesFiles
|
||||
* @access public
|
||||
* @return object
|
||||
* @return array|object|string
|
||||
*/
|
||||
public function batchCreateObject($productID, $param = array())
|
||||
public function batchCreateObject(int $productID, array $param = array(), array $output = array(), array|bool $uploadImages = false, array|bool $bugImagesFiles = false): array|object|string
|
||||
{
|
||||
$_SERVER['HTTP_HOST'] = '';
|
||||
|
||||
$modules = array('0', '0', '0');
|
||||
$executions = array('101', '101', '0');
|
||||
$executions = array('11', '11', '11');
|
||||
$openedBuilds = array('', '', '');
|
||||
$title = array('', '', '');
|
||||
$deadlines = array('0000-00-00', '0000-00-00', '0000-00-00');
|
||||
$deadlines = array('2023-01-01', '2023-01-01', '2023-01-01');
|
||||
$stepses = array('', '', '');
|
||||
$types = array('', '', '');
|
||||
$severities = array(3, 3, 3);
|
||||
@@ -69,43 +74,55 @@ class bugTest
|
||||
$color = array('', '', '');
|
||||
$keywords = array('', '', '');
|
||||
|
||||
$createFields['modules'] = $modules;
|
||||
$createFields['executions'] = $executions;
|
||||
$createFields['openedBuilds'] = $openedBuilds;
|
||||
$createFields['title'] = $title;
|
||||
$createFields['deadlines'] = $deadlines;
|
||||
$createFields['stepses'] = $stepses;
|
||||
$createFields['types'] = $types;
|
||||
$createFields['severities'] = $severities;
|
||||
$createFields['oses'] = $oses;
|
||||
$createFields['browsers'] = $browsers;
|
||||
$createFields['pris'] = $pris;
|
||||
$createFields['color'] = $color;
|
||||
$createFields['keywords'] = $keywords;
|
||||
$bugs = array();
|
||||
foreach($param['title'] as $index => $title)
|
||||
{
|
||||
$bug = new stdclass();
|
||||
$bug->title = $title;
|
||||
$bug->product = $productID;
|
||||
$bug->module = isset($param['modules']) ? $param['modules'][$index] : $modules[$index];
|
||||
$bug->execution = isset($param['executions']) ? $param['executions'][$index] : $executions[$index];
|
||||
$bug->openedBuild = isset($param['openedBuilds']) ? $param['openedBuilds'][$index] : $openedBuilds[$index];
|
||||
$bug->deadline = isset($param['deadlines']) ? $param['deadlines'][$index] : $deadlines[$index];
|
||||
$bug->steps = isset($param['stepses']) ? $param['stepses'][$index] : $stepses[$index];
|
||||
$bug->type = isset($param['types']) ? $param['types'][$index] : $types[$index];
|
||||
$bug->severity = isset($param['severities']) ? $param['severities'][$index] : $severities[$index];
|
||||
$bug->os = isset($param['oses']) ? $param['oses'][$index] : $oses[$index];
|
||||
$bug->browser = isset($param['browsers']) ? $param['browsers'][$index] : $browsers[$index];
|
||||
$bug->pri = isset($param['pris']) ? $param['pris'][$index] : $pris[$index];
|
||||
$bug->color = isset($param['color']) ? $param['color'][$index] : $color[$index];
|
||||
$bug->keywords = isset($param['keywords']) ? $param['keywords'][$index] : $keywords[$index];
|
||||
if(isset($param['laneID'])) $bug->laneID = $param['laneID'][$index];
|
||||
if(is_array($bug->openedBuild)) $bug->openedBuild = implode(',', $bug->openedBuild);
|
||||
|
||||
foreach($createFields as $field => $defaultValue) $_POST[$field] = $defaultValue;
|
||||
$bugs[] = $bug;
|
||||
}
|
||||
|
||||
foreach($param as $key => $value) $_POST[$key] = $value;
|
||||
$object = $this->objectModel->batchCreate($bugs, $productID, $output, $uploadImages, $bugImagesFiles);
|
||||
|
||||
$object = $this->objectModel->batchCreate($productID);
|
||||
|
||||
$bug = array();
|
||||
$bugs = array();
|
||||
if(is_array($object))
|
||||
{
|
||||
foreach($object as $bugID => $actionID)
|
||||
{
|
||||
$bug[] = $this->objectModel->getByID($bugID);
|
||||
$bugs[] = $this->objectModel->getByID($bugID);
|
||||
}
|
||||
}
|
||||
|
||||
unset($_POST);
|
||||
if(dao::isError())
|
||||
{
|
||||
return dao::getError();
|
||||
$return = '';
|
||||
$errors = dao::getError();
|
||||
foreach($errors as $key => $value)
|
||||
{
|
||||
if(is_string($value)) $return .= "{$value}";
|
||||
if(is_array($value)) $return .= implode('', $value);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
else
|
||||
{
|
||||
return empty($bug) ? $object : $bug;
|
||||
return empty($bugs) ? $object : $bugs;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2282,4 +2299,115 @@ class bugTest
|
||||
global $tester;
|
||||
return $tester->config->bug->dtable->fieldList['actions']['actionsMap'];
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试检查批量创建的bug的数据。
|
||||
* Test check the batch created bugs.
|
||||
*
|
||||
* @param array $bugs
|
||||
* @param int $productID
|
||||
* @access public
|
||||
* @return array|string
|
||||
*/
|
||||
public function checkBugsForBatchCreateTest(array $bugs, int $productID): array|string
|
||||
{
|
||||
$bugs = $this->objectModel->checkBugsForBatchCreate($bugs, $productID);
|
||||
|
||||
$return = '';
|
||||
if(dao::isError())
|
||||
{
|
||||
$errors = dao::getError();
|
||||
foreach($errors as $key => $value)
|
||||
{
|
||||
if(is_string($value)) $return .= "{$value}";
|
||||
if(is_array($value)) $return .= implode('', $value);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
else
|
||||
{
|
||||
$return = array_keys($bugs);
|
||||
return implode(',', $return);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试检查批量创建的bug的数据。
|
||||
* Test check the batch created bugs.
|
||||
*
|
||||
* @param array $bugs
|
||||
* @param string $required
|
||||
* @access public
|
||||
* @return array|string
|
||||
*/
|
||||
public function afterBatchCreateTest(int $bugID, int $laneID, array $output, string $uploadImage, array|bool $file): array|string
|
||||
{
|
||||
$_SERVER['HTTP_HOST'] = '';
|
||||
|
||||
global $tester;
|
||||
$bug = $tester->dao->findByID($bugID)->from(TABLE_BUG)->fetch();
|
||||
|
||||
$actionID = $this->objectModel->afterBatchCreate($bug, $laneID, $output, $uploadImage, $file);
|
||||
|
||||
$return = '';
|
||||
if(dao::isError())
|
||||
{
|
||||
$errors = dao::getError();
|
||||
foreach($errors as $key => $value)
|
||||
{
|
||||
if(is_string($value)) $return .= "{$value}";
|
||||
if(is_array($value)) $return .= implode('', $value);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
else
|
||||
{
|
||||
$fileID = $tester->dao->select('id')->from(TABLE_FILE)->where('objectID')->eq($bugID)->andWhere('objectType')->eq('bug')->fetch('id');
|
||||
$cards = $tester->dao->select('cards')->from(TABLE_KANBANCELL)
|
||||
->where('kanban')->eq($bug->execution)
|
||||
->andWhere('lane')->eq($laneID)
|
||||
->andWhere('column')->eq(zget($output, 'columnID', 0))
|
||||
->andWhere('type')->eq('bug')
|
||||
->fetch('cards');
|
||||
|
||||
return "action:{$actionID},file:{$fileID},cards:{$cards}";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 测试批量创建bug前处理上传图片。
|
||||
* Test process the uploaded images before batch creating bugs.
|
||||
*
|
||||
* @param object $bug
|
||||
* @param string $uploadImage
|
||||
* @param array $bugImagesFile
|
||||
* @access public
|
||||
* @return array|string
|
||||
*/
|
||||
public function processImageForBatchCreateTest(object $bug, string $uploadImage, array $bugImagesFiles): array|string
|
||||
{
|
||||
$_SERVER['HTTP_HOST'] = '';
|
||||
|
||||
global $tester;
|
||||
$tester->loadModel('file');
|
||||
$tester->file->savePath = $tester->app->tmpRoot;
|
||||
|
||||
$file = $this->objectModel->processImageForBatchCreate($bug, $uploadImage, $bugImagesFiles);
|
||||
|
||||
if(dao::isError())
|
||||
{
|
||||
$return = '';
|
||||
$errors = dao::getError();
|
||||
foreach($errors as $key => $value)
|
||||
{
|
||||
if(is_string($value)) $return .= "{$value}";
|
||||
if(is_array($value)) $return .= implode('', $value);
|
||||
}
|
||||
return $return;
|
||||
}
|
||||
else
|
||||
{
|
||||
return $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Executable
+51
@@ -0,0 +1,51 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/bug.class.php';
|
||||
|
||||
zdTable('user')->gen(1);
|
||||
zdTable('action')->gen(1);
|
||||
zdTable('file')->gen(1);
|
||||
zdTable('product')->gen(10);
|
||||
|
||||
zdTable('bug')->config('bug_afterbatchcreate')->gen(20);
|
||||
zdTable('project')->config('project_afterbatchcreate')->gen(1);
|
||||
zdTable('kanbanregion')->config('kanbanregion_afterbatchcreate')->gen(1);
|
||||
zdTable('kanbanlane')->config('kanbanlane_afterbatchcreate')->gen(1);
|
||||
zdTable('kanbancolumn')->config('kanbancolumn_afterbatchcreate')->gen(9);
|
||||
zdTable('kanbancell')->config('kanbancell_afterbatchcreate')->gen(9);
|
||||
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=bugModel->afterBatchCreate();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
|
||||
$bugIdList = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16);
|
||||
$laneIdList = array(0, 1);
|
||||
$output = array(array(), array('columnID' => 1));
|
||||
$uploadImage = array('', '文件');
|
||||
$file = array(false, array('title' => '文件'));
|
||||
|
||||
$bug = new bugTest();
|
||||
|
||||
r($bug->afterBatchCreateTest($bugIdList[0], $laneIdList[0], $output[0], $uploadImage[0], $file[0])) && p() && e('action:3,file:,cards:'); // 测试进行批量创建bug 1 后的操作 无laneID 无columnID 无uploadImage 无file
|
||||
r($bug->afterBatchCreateTest($bugIdList[1], $laneIdList[1], $output[1], $uploadImage[0], $file[0])) && p() && e('action:4,file:,cards:,2,1,3,5,7,9,11,13,15,17,19,'); // 测试进行批量创建bug 2 后的操作 有laneID 无columnID 无uploadImage 无file
|
||||
r($bug->afterBatchCreateTest($bugIdList[2], $laneIdList[0], $output[0], $uploadImage[0], $file[0])) && p() && e('action:5,file:,cards:'); // 测试进行批量创建bug 3 后的操作 无laneID 有columnID 无uploadImage 无file
|
||||
r($bug->afterBatchCreateTest($bugIdList[3], $laneIdList[1], $output[1], $uploadImage[0], $file[0])) && p() && e('action:6,file:,cards:,4,2,1,3,5,7,9,11,13,15,17,19,'); // 测试进行批量创建bug 4 后的操作 有laneID 有columnID 无uploadImage 无file
|
||||
r($bug->afterBatchCreateTest($bugIdList[4], $laneIdList[1], $output[1], $uploadImage[1], $file[0])) && p() && e('action:7,file:,cards:,5,4,2,1,3,5,7,9,11,13,15,17,19,'); // 测试进行批量创建bug 5 后的操作 有laneID 有columnID 有uploadImage 无file
|
||||
r($bug->afterBatchCreateTest($bugIdList[5], $laneIdList[1], $output[1], $uploadImage[0], $file[1])) && p() && e('action:8,file:,cards:,6,5,4,2,1,3,5,7,9,11,13,15,17,19,'); // 测试进行批量创建bug 6 后的操作 有laneID 有columnID 无uploadImage 有file
|
||||
r($bug->afterBatchCreateTest($bugIdList[6], $laneIdList[1], $output[1], $uploadImage[1], $file[1])) && p() && e('action:9,file:2,cards:,7,6,5,4,2,1,3,5,7,9,11,13,15,17,19,'); // 测试进行批量创建bug 7 后的操作 有laneID 有columnID 有uploadImage 有file
|
||||
r($bug->afterBatchCreateTest($bugIdList[7], $laneIdList[1], $output[0], $uploadImage[1], $file[1])) && p() && e('action:10,file:3,cards:'); // 测试进行批量创建bug 8 后的操作 有laneID 无columnID 有uploadImage 有file
|
||||
r($bug->afterBatchCreateTest($bugIdList[8], $laneIdList[0], $output[1], $uploadImage[1], $file[1])) && p() && e('action:11,file:4,cards:'); // 测试进行批量创建bug 9 后的操作 无laneID 有columnID 有uploadImage 有file
|
||||
r($bug->afterBatchCreateTest($bugIdList[9], $laneIdList[1], $output[0], $uploadImage[1], $file[1])) && p() && e('action:12,file:5,cards:'); // 测试进行批量创建bug 10 后的操作 无laneID 无columnID 有uploadImage 有file
|
||||
r($bug->afterBatchCreateTest($bugIdList[10], $laneIdList[1], $output[0], $uploadImage[0], $file[1])) && p() && e('action:13,file:,cards:'); // 测试进行批量创建bug 11 后的操作 有laneID 无columnID 无uploadImage 有file
|
||||
r($bug->afterBatchCreateTest($bugIdList[11], $laneIdList[0], $output[1], $uploadImage[0], $file[1])) && p() && e('action:14,file:,cards:'); // 测试进行批量创建bug 12 后的操作 无laneID 有columnID 无uploadImage 有file
|
||||
r($bug->afterBatchCreateTest($bugIdList[12], $laneIdList[1], $output[0], $uploadImage[0], $file[1])) && p() && e('action:15,file:,cards:'); // 测试进行批量创建bug 13 后的操作 无laneID 无columnID 无uploadImage 有file
|
||||
r($bug->afterBatchCreateTest($bugIdList[13], $laneIdList[1], $output[0], $uploadImage[1], $file[0])) && p() && e('action:16,file:,cards:'); // 测试进行批量创建bug 14 后的操作 有laneID 无columnID 有uploadImage 无file
|
||||
r($bug->afterBatchCreateTest($bugIdList[14], $laneIdList[0], $output[1], $uploadImage[1], $file[0])) && p() && e('action:17,file:,cards:'); // 测试进行批量创建bug 15 后的操作 无laneID 有columnID 有uploadImage 无file
|
||||
r($bug->afterBatchCreateTest($bugIdList[15], $laneIdList[1], $output[0], $uploadImage[1], $file[0])) && p() && e('action:18,file:,cards:'); // 测试进行批量创建bug 16 后的操作 无laneID 无columnID 有uploadImage 无file
|
||||
@@ -2,8 +2,50 @@
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . "/test/lib/init.php";
|
||||
include dirname(__FILE__, 2) . '/bug.class.php';
|
||||
|
||||
zdTable('user')->gen(1);
|
||||
zdTable('product')->gen(10);
|
||||
zdTable('action')->gen(1);
|
||||
|
||||
zdTable('project')->config('project_batchcreate')->gen(1);
|
||||
zdTable('kanbanregion')->config('kanbanregion_batchcreate')->gen(1);
|
||||
zdTable('kanbanlane')->config('kanbanlane_batchcreate')->gen(1);
|
||||
zdTable('kanbancolumn')->config('kanbancolumn_batchcreate')->gen(9);
|
||||
zdTable('kanbancell')->config('kanbancell_batchcreate')->gen(9);
|
||||
|
||||
su('admin');
|
||||
|
||||
function initImage($imagesFiles)
|
||||
{
|
||||
foreach($imagesFiles as $bugImagesFile)
|
||||
{
|
||||
if(!empty($bugImagesFile['realpath']) and !is_file($bugImagesFile['realpath']))
|
||||
{
|
||||
$theFile = fopen($bugImagesFile['realpath'], 'w');
|
||||
fclose($theFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function dropImage($imagesFiles)
|
||||
{
|
||||
foreach($imagesFiles as $bugImagesFile)
|
||||
{
|
||||
if(!empty($bugImagesFile['realpath']) and is_file($bugImagesFile['realpath']))
|
||||
{
|
||||
$zfile->removeFile($bugImagesFile['realpath']);
|
||||
}
|
||||
if(!empty($bugImagesFile['pathname']) and is_file($bugImagesFile['pathname']))
|
||||
{
|
||||
$zfile->removeFile($bugImagesFile['pathname']);
|
||||
}
|
||||
if(!empty($bugImagesFile['title']) and is_file($bugImagesFile['title']))
|
||||
{
|
||||
$zfile->removeFile($bugImagesFile['title']);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
title=bugModel->batchCreate();
|
||||
@@ -21,25 +63,55 @@ pid=1
|
||||
$productID = 1;
|
||||
|
||||
$title = array('批量bug一','批量bug二','批量bug三');
|
||||
$openedBuild = array(array('trunk', '3'), array('trunk'), array('1'));
|
||||
$type = array('codeerror','ditto','config');
|
||||
$openedBuild = array(array('3'), array('trunk'), array('1'));
|
||||
$type = array('codeerror','notrepro','config');
|
||||
$severity = array('3','2','1');
|
||||
$normal_create1 = array('title' => $title, 'types' => $type, 'openedBuilds' => $openedBuild, 'severity' => $severity);
|
||||
|
||||
$title = array('批量bug四','批量bug五','批量bug六');
|
||||
$normal_create2 = array('title' => $title, 'types' => $type, 'openedBuilds' => $openedBuild, 'severity' => $severity);
|
||||
|
||||
$execution = array(0, 0, 0);
|
||||
$title = array('批量bug七','批量bug八','批量bug九');
|
||||
$normal_create3 = array('title' => $title, 'types' => $type, 'openedBuilds' => $openedBuild, 'severity' => $severity);
|
||||
$normal_create3 = array('title' => $title, 'types' => $type, 'openedBuilds' => $openedBuild, 'severity' => $severity, 'executions' => $execution);
|
||||
|
||||
$laneIdList = array(1, 2, 3);
|
||||
|
||||
$title = array('批量bug十','批量bug十一','批量bug十二');
|
||||
$normal_create4 = array('title' => $title, 'types' => $type, 'openedBuilds' => $openedBuild, 'severity' => $severity, 'laneID' => $laneIdList, 'executions' => $execution);
|
||||
|
||||
$title = array('批量bug十三','批量bug十四','批量bug十五');
|
||||
$normal_create5 = array('title' => $title, 'types' => $type, 'openedBuilds' => $openedBuild, 'severity' => $severity, 'laneID' => $laneIdList);
|
||||
|
||||
$title = array('异常一','异常二','异常三');
|
||||
$openedBuild = array(array('trunk'), array(''), array('1'));
|
||||
$exception_create = array('title' => $title, 'openedBuilds' => $openedBuild);
|
||||
$emptyBuild = array(array('trunk'), array(''), array('1'));
|
||||
$empty_build_create = array('title' => $title, 'openedBuilds' => $emptyBuild);
|
||||
|
||||
$emptyTitle = array('名称','','名称三');
|
||||
$empty_title_create = array('title' => $emptyTitle, 'openedBuilds' => $openedBuild);
|
||||
|
||||
$output = array(array(), array('laneID' => 1, 'columnID' => 1));
|
||||
|
||||
$jpgFile = array();
|
||||
$jpgFile['realpath'] = $tester->app->tmpRoot . '1.jpg';
|
||||
$jpgFile['pathname'] = '1.jpg';
|
||||
$jpgFile['title'] = '1';
|
||||
$jpgFile['extension'] = 'jpg';
|
||||
|
||||
$bugImagesFiles = array(false, array('jpg' => $jpgFile));
|
||||
$uploadImages = array(false, array('jpg'));
|
||||
|
||||
initImage($bugImagesFiles[1]);
|
||||
|
||||
$bug = new bugTest();
|
||||
r($bug->batchCreateObject($productID, $normal_create1)) && p('0:title,openedBuild,type,severity,pri,product,execution') && e('批量bug一,trunk,3,codeerror,3,3,1,101'); // 测试正常批量创建bug1
|
||||
r($bug->batchCreateObject($productID, $normal_create2)) && p('1:title,openedBuild,type,severity,pri,product,execution') && e('批量bug五,trunk,codeerror,3,3,1,101'); // 测试正常批量创建bug2
|
||||
r($bug->batchCreateObject($productID, $normal_create3)) && p('2:title,openedBuild,type,severity,pri,product,execution') && e('批量bug九,1,config,3,3,1,0'); // 测试正常批量创建bug3
|
||||
r($bug->batchCreateObject($productID, $normal_create1)) && p() && e('0'); // 测试短时间内重复批量创建bug
|
||||
r($bug->batchCreateObject($productID, $exception_create)) && p('message:0') && e("『影响版本』不能为空。"); // 测试异常创建bug
|
||||
r($bug->batchCreateObject($productID, $normal_create1, $output[0], $uploadImages[0], $bugImagesFiles[0])) && p('0:title,openedBuild,type,severity,pri,product,execution') && e('批量bug一,3,codeerror,3,3,1,11'); // 测试正常批量创建bug1
|
||||
r($bug->batchCreateObject($productID, $normal_create2, $output[1], $uploadImages[0], $bugImagesFiles[0])) && p('1:title,openedBuild,type,severity,pri,product,execution') && e('批量bug五,trunk,notrepro,3,3,1,11'); // 测试正常批量创建bug2 有output
|
||||
r($bug->batchCreateObject($productID, $normal_create3, $output[0], $uploadImages[1], $bugImagesFiles[1])) && p('2:title,openedBuild,type,severity,pri,product,execution') && e('批量bug九,1,config,3,3,1,0'); // 测试正常批量创建bug3 上传图片
|
||||
dropImage($bugImagesFiles[1]);
|
||||
initImage($bugImagesFiles[1]);
|
||||
r($bug->batchCreateObject($productID, $normal_create4, $output[0], $uploadImages[0], $bugImagesFiles[0])) && p('0:title,openedBuild,type,severity,pri,product,execution') && e('批量bug十,3,codeerror,3,3,1,0'); // 测试正常批量创建bug4 bug有laneID
|
||||
r($bug->batchCreateObject($productID, $normal_create5, $output[1], $uploadImages[1], $bugImagesFiles[1])) && p('1:title,openedBuild,type,severity,pri,product,execution') && e('批量bug十四,trunk,notrepro,3,3,1,11'); // 测试正常批量创建bug5 有output 上传图片 bug有laneID
|
||||
dropImage($bugImagesFiles[1]);
|
||||
|
||||
r($bug->batchCreateObject($productID, $empty_build_create)) && p('') && e("『影响版本』不能为空。"); // 测试创建没有版本的bug
|
||||
r($bug->batchCreateObject($productID, $empty_title_create)) && p('') && e("『Bug标题』不能为空。"); // 测试创建没有标题的bug
|
||||
|
||||
+101
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/bug.class.php';
|
||||
|
||||
/**
|
||||
|
||||
title=bugModel->resolve();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
|
||||
$emptyTitle = new stdclass();
|
||||
$emptyTitle->title = '';
|
||||
$emptyTitle->openedBuild = 1;
|
||||
|
||||
$emptyBuild = new stdclass();
|
||||
$emptyBuild->title = '111';
|
||||
$emptyBuild->openedBuild = 0;
|
||||
|
||||
$emptyItem = new stdclass();
|
||||
|
||||
$emptyAll = new stdclass();
|
||||
$emptyAll->title = '';
|
||||
$emptyAll->openedBuild = 0;
|
||||
$emptyAll->product = 0;
|
||||
$emptyAll->branch = 0;
|
||||
$emptyAll->module = 0;
|
||||
$emptyAll->project = 0;
|
||||
$emptyAll->execution = 0;
|
||||
$emptyAll->deadline = '';
|
||||
$emptyAll->steps = '';
|
||||
$emptyAll->type = '';
|
||||
$emptyAll->pri = 0;
|
||||
$emptyAll->severity = 0;
|
||||
$emptyAll->keywords = '';
|
||||
|
||||
$hasTitleBuild = new stdclass();
|
||||
$hasTitleBuild->title = '11';
|
||||
$hasTitleBuild->openedBuild = 1;
|
||||
$hasTitleBuild->product = 0;
|
||||
$hasTitleBuild->branch = 0;
|
||||
$hasTitleBuild->module = 0;
|
||||
$hasTitleBuild->project = 0;
|
||||
$hasTitleBuild->execution = 0;
|
||||
$hasTitleBuild->deadline = '';
|
||||
$hasTitleBuild->steps = '';
|
||||
$hasTitleBuild->type = '';
|
||||
$hasTitleBuild->pri = 0;
|
||||
$hasTitleBuild->severity = 0;
|
||||
$hasTitleBuild->keywords = '';
|
||||
|
||||
$normal1 = new stdclass();
|
||||
$normal1->title = '一个标题';
|
||||
$normal1->openedBuild = 1;
|
||||
$normal1->product = 1;
|
||||
$normal1->branch = 0;
|
||||
$normal1->module = 1;
|
||||
$normal1->project = 1;
|
||||
$normal1->execution = 11;
|
||||
$normal1->deadline = '2023-01-01';
|
||||
$normal1->steps = '一个步骤';
|
||||
$normal1->type = 'codeerror';
|
||||
$normal1->pri = 1;
|
||||
$normal1->severity = 1;
|
||||
$normal1->keywords = '关键词1';
|
||||
|
||||
|
||||
$normal2 = new stdclass();
|
||||
$normal2->title = '标题';
|
||||
$normal2->openedBuild = 1;
|
||||
$normal2->product = 1;
|
||||
$normal2->branch = 0;
|
||||
$normal2->module = 1;
|
||||
$normal2->project = 1;
|
||||
$normal2->execution = 11;
|
||||
$normal2->deadline = '2023-01-01';
|
||||
$normal2->steps = '步骤';
|
||||
$normal2->type = 'config';
|
||||
$normal2->pri = 1;
|
||||
$normal2->severity = 1;
|
||||
$normal2->keywords = '关键词';
|
||||
|
||||
$bugs1 = array('emptyTitle' => $emptyTitle);
|
||||
$bugs2 = array('emptyBuild' => $emptyBuild);
|
||||
$bugs3 = array('emptyTitle' => $emptyTitle, 'emptyBuild' => $emptyBuild);
|
||||
$bugs4 = array('emptyItem' => $emptyItem);
|
||||
$bugs5 = array('emptyAll' => $emptyAll);
|
||||
$bugs6 = array('emptyItem' => $emptyItem, 'emptyAll' => $emptyAll);
|
||||
$bugs7 = array('hasTitleBuild' => $hasTitleBuild, 'narmal1' => $normal1, 'narmal2' => $normal2);
|
||||
|
||||
$bug = new bugTest();
|
||||
|
||||
r($bug->checkBugsForBatchCreateTest($bugs1)) && p() && e('『Bug标题』不能为空。'); // 测试检查 不输入标题 的bugs
|
||||
r($bug->checkBugsForBatchCreateTest($bugs2)) && p() && e('『影响版本』不能为空。'); // 测试检查 不输入版本 的bugs
|
||||
r($bug->checkBugsForBatchCreateTest($bugs3)) && p() && e('『Bug标题』不能为空。『影响版本』不能为空。'); // 测试检查 不输入标题 不输入版本 的bugs
|
||||
r($bug->checkBugsForBatchCreateTest($bugs4)) && p() && e('『Bug标题』不能为空。『影响版本』不能为空。'); // 测试检查 空对象 的bugs
|
||||
r($bug->checkBugsForBatchCreateTest($bugs5)) && p() && e('『Bug标题』不能为空。『影响版本』不能为空。'); // 测试检查 不输入任务字段 的bugs
|
||||
r($bug->checkBugsForBatchCreateTest($bugs6)) && p() && e('『Bug标题』不能为空。『影响版本』不能为空。『Bug标题』不能为空。『影响版本』不能为空。'); // 测试检查 空对象 不输入任务字段 的bugs
|
||||
r($bug->checkBugsForBatchCreateTest($bugs7)) && p() && e('hasTitleBuild,narmal1,narmal2'); // 测试检查 有标题和版本 两个有所有字段 的bugs
|
||||
+107
@@ -0,0 +1,107 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
include dirname(__FILE__, 5) . '/test/lib/init.php';
|
||||
include dirname(__FILE__, 2) . '/bug.class.php';
|
||||
|
||||
zdTable('user')->gen(1);
|
||||
su('admin');
|
||||
|
||||
/**
|
||||
|
||||
title=bugModel->processImageForBatchCreate();
|
||||
cid=1
|
||||
pid=1
|
||||
|
||||
*/
|
||||
|
||||
$uploadImage = array();
|
||||
$uploadImage[] = '0';
|
||||
$uploadImage[] = '1';
|
||||
$uploadImage[] = '2';
|
||||
$uploadImage[] = '3';
|
||||
|
||||
$jpgFile = array();
|
||||
$jpgFile['realpath'] = $tester->app->tmpRoot . '1.jpg';
|
||||
$jpgFile['pathname'] = '1.jpg';
|
||||
$jpgFile['title'] = '1';
|
||||
$jpgFile['extension'] = 'jpg';
|
||||
|
||||
$jpegFile = array();
|
||||
$jpegFile['realpath'] = $tester->app->tmpRoot . '2.jpeg';
|
||||
$jpegFile['pathname'] = '2.jpeg';
|
||||
$jpegFile['title'] = '2';
|
||||
$jpegFile['extension'] = 'jpeg';
|
||||
|
||||
$pngFile = array();
|
||||
$pngFile['realpath'] = $tester->app->tmpRoot . '3.png';
|
||||
$pngFile['pathname'] = '3.png';
|
||||
$pngFile['title'] = '3';
|
||||
$pngFile['extension'] = 'png';
|
||||
|
||||
$gifFile = array();
|
||||
$gifFile['realpath'] = $tester->app->tmpRoot . '4.gif';
|
||||
$gifFile['pathname'] = '4.gif';
|
||||
$gifFile['title'] = '4';
|
||||
$gifFile['extension'] = 'gif';
|
||||
|
||||
$textFile = array();
|
||||
$textFile['realpath'] = $tester->app->tmpRoot . 'text.txt';
|
||||
$textFile['pathname'] = 'text.txt';
|
||||
$textFile['title'] = 'text';
|
||||
$textFile['extension'] = 'txt';
|
||||
|
||||
$bugImagesFiles = array('jpg' => $jpgFile, 'jpeg' => $jpegFile, 'png' => $pngFile, 'gif' => $gifFile, 'text' => $textFile);
|
||||
$uploadImageList = array('jpg', 'jpeg', 'png', 'gif', 'text');
|
||||
|
||||
foreach($bugImagesFiles as $bugImagesFile)
|
||||
{
|
||||
if(!empty($bugImagesFile['realpath']) and !is_file($bugImagesFile['realpath']))
|
||||
{
|
||||
$theFile = fopen($bugImagesFile['realpath'], 'w');
|
||||
fclose($theFile);
|
||||
}
|
||||
}
|
||||
|
||||
$bug1 = new stdclass();
|
||||
$bug1->steps = '';
|
||||
|
||||
$bug2 = new stdclass();
|
||||
$bug2->steps = '';
|
||||
|
||||
$bug3 = new stdclass();
|
||||
$bug3->steps = '';
|
||||
|
||||
$bug4 = new stdclass();
|
||||
$bug4->steps = '';
|
||||
|
||||
$bug5 = new stdclass();
|
||||
$bug5->steps = '';
|
||||
|
||||
$bug6 = new stdclass();
|
||||
$bug6->steps = '';
|
||||
|
||||
$bug = new bugTest();
|
||||
|
||||
r($bug->processImageForBatchCreateTest($bug1, $uploadImageList[0], $bugImagesFiles)) && p('pathname,title,extension,addedBy') && e('1.jpg,1,jpg,admin'); // 测试处理 jpg 类型的图片
|
||||
r($bug->processImageForBatchCreateTest($bug2, $uploadImageList[1], $bugImagesFiles)) && p('pathname,title,extension,addedBy') && e('2.jpeg,2,jpeg,admin'); // 测试处理 jpeg 类型的图片
|
||||
r($bug->processImageForBatchCreateTest($bug3, $uploadImageList[2], $bugImagesFiles)) && p('pathname,title,extension,addedBy') && e('3.png,3,png,admin'); // 测试处理 png 类型的图片
|
||||
r($bug->processImageForBatchCreateTest($bug4, $uploadImageList[3], $bugImagesFiles)) && p('pathname,title,extension,addedBy') && e('4.gif,4,gif,admin'); // 测试处理 gif 类型的图片
|
||||
r($bug->processImageForBatchCreateTest($bug6, $uploadImageList[4], $bugImagesFiles)) && p('pathname,title,extension,addedBy') && e('text.txt,text,txt,~~'); // 测试处理 文本类型
|
||||
|
||||
$zfile = $tester->app->loadClass('zfile');
|
||||
|
||||
foreach($bugImagesFiles as $bugImagesFile)
|
||||
{
|
||||
if(!empty($bugImagesFile['realpath']) and is_file($bugImagesFile['realpath']))
|
||||
{
|
||||
$zfile->removeFile($bugImagesFile['realpath']);
|
||||
}
|
||||
if(!empty($bugImagesFile['pathname']) and is_file($bugImagesFile['pathname']))
|
||||
{
|
||||
$zfile->removeFile($bugImagesFile['pathname']);
|
||||
}
|
||||
if(!empty($bugImagesFile['title']) and is_file($bugImagesFile['title']))
|
||||
{
|
||||
$zfile->removeFile($bugImagesFile['title']);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
---
|
||||
title: zt_bug
|
||||
author: Mengyi Liu
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: assignedTo
|
||||
range: user1
|
||||
- field: status
|
||||
range: active
|
||||
- field: execution
|
||||
range: 11
|
||||
...
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: zt_kanbancell
|
||||
author: Mengyi Liu
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: id
|
||||
range: 1-100
|
||||
- field: kanban
|
||||
range: 11
|
||||
- field: lane
|
||||
range: 1
|
||||
- field: column
|
||||
range: 1-9
|
||||
- field: type
|
||||
range: "bug"
|
||||
- field: cards
|
||||
range: "[]"
|
||||
...
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: zt_kanbancolumn
|
||||
author: Mengyi Liu
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: id
|
||||
range: 1-9
|
||||
- field: region
|
||||
range: 1
|
||||
- field: type
|
||||
range: unconfirmed,confirmed,resolving,fixing,fixed,test,testing,tested,closed
|
||||
- field: parent
|
||||
range: "0{2},`-1`,2{2},0,5{2},0"
|
||||
- field: name
|
||||
range: 待确认,已确认,解决中,进行中,完成,测试,测试中,测试完毕,已关闭
|
||||
- field: limit
|
||||
range: "`-1`"
|
||||
...
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: zt_kanbanlane
|
||||
author: Mengyi Liu
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: id
|
||||
range: 1-10
|
||||
- field: execution
|
||||
range: 11
|
||||
- field: type
|
||||
range: "bug"
|
||||
- field: region
|
||||
range: 1
|
||||
- field: lastEditedTime
|
||||
range: "20220101 000000"
|
||||
type: timestamp
|
||||
format: "YY/MM/DD hh:mm:ss"
|
||||
...
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: zt_kanbanregion
|
||||
author: Mengyi Liu
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: id
|
||||
range: 1-10
|
||||
- field: space
|
||||
range: 0
|
||||
- field: kanban
|
||||
range: 11
|
||||
- field: lastEditedDate
|
||||
range: "20220101 000000"
|
||||
type: timestamp
|
||||
format: "YY/MM/DD hh:mm:ss"
|
||||
...
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: zt_project
|
||||
author: Mengyi Liu
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: type
|
||||
range: scrum
|
||||
...
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: zt_kanbancell
|
||||
author: Mengyi Liu
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: id
|
||||
range: 1-100
|
||||
- field: kanban
|
||||
range: 11
|
||||
- field: lane
|
||||
range: 1
|
||||
- field: column
|
||||
range: 1-9
|
||||
- field: type
|
||||
range: "bug"
|
||||
- field: cards
|
||||
range: "[]"
|
||||
...
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: zt_kanbancolumn
|
||||
author: Mengyi Liu
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: id
|
||||
range: 1-9
|
||||
- field: region
|
||||
range: 1
|
||||
- field: type
|
||||
range: unconfirmed,confirmed,resolving,fixing,fixed,test,testing,tested,closed
|
||||
- field: parent
|
||||
range: "0{2},`-1`,2{2},0,5{2},0"
|
||||
- field: name
|
||||
range: 待确认,已确认,解决中,进行中,完成,测试,测试中,测试完毕,已关闭
|
||||
- field: limit
|
||||
range: "`-1`"
|
||||
...
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
---
|
||||
title: zt_kanbanlane
|
||||
author: Mengyi Liu
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: id
|
||||
range: 1-10
|
||||
- field: execution
|
||||
range: 11
|
||||
- field: type
|
||||
range: "bug"
|
||||
- field: region
|
||||
range: 1
|
||||
- field: lastEditedTime
|
||||
range: "20220101 000000"
|
||||
type: timestamp
|
||||
format: "YY/MM/DD hh:mm:ss"
|
||||
...
|
||||
|
||||
@@ -0,0 +1,17 @@
|
||||
---
|
||||
title: zt_kanbanregion
|
||||
author: Mengyi Liu
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: id
|
||||
range: 1-10
|
||||
- field: space
|
||||
range: 0
|
||||
- field: kanban
|
||||
range: 11
|
||||
- field: lastEditedDate
|
||||
range: "20220101 000000"
|
||||
type: timestamp
|
||||
format: "YY/MM/DD hh:mm:ss"
|
||||
...
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: zt_project
|
||||
author: Mengyi Liu
|
||||
version: "1.0"
|
||||
fields:
|
||||
- field: type
|
||||
range: scrum
|
||||
...
|
||||
|
||||
@@ -1780,31 +1780,6 @@ class bugZen extends bug
|
||||
$bug->{$extendField->field} = htmlSpecialString($bug->{$extendField->field});
|
||||
}
|
||||
|
||||
/* When the bug is created by uploading an image, add the image to the step of the bug. */
|
||||
if(!empty($data->uploadImage[$index]))
|
||||
{
|
||||
$this->loadModel('file');
|
||||
$fileName = $data->uploadImage[$index];
|
||||
$file = $bugImagesFile[$fileName];
|
||||
$realPath = $file['realpath'];
|
||||
|
||||
if(rename($realPath, $this->file->savePath . $this->file->getSaveName($file['pathname'])))
|
||||
{
|
||||
if(in_array($file['extension'], $this->config->file->imageExtensions))
|
||||
{
|
||||
$file['addedBy'] = $this->app->user->account;
|
||||
$file['addedDate'] = helper::now();
|
||||
$this->dao->insert(TABLE_FILE)->data($file, 'realpath')->exec();
|
||||
|
||||
$fileID = $this->dao->lastInsertID();
|
||||
$bug->steps .= '<img src="{' . $fileID . '.' . $file['extension'] . '}" alt="" />';
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
unset($file);
|
||||
}
|
||||
}
|
||||
return $bug;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user