diff --git a/framework/model.class.php b/framework/model.class.php index 3a6fb5affc..b01705329a 100644 --- a/framework/model.class.php +++ b/framework/model.class.php @@ -86,7 +86,9 @@ class model extends baseModel { if(empty($objectID)) return false; if(empty($moduleName)) $moduleName = $this->getModuleName(); - $table = $this->config->objectTables[$moduleName]; + + $table = zget($this->config->objectTables, $moduleName, ''); + if(empty($table)) return false; return $this->dao->findById($objectID)->from($table)->fetch(); } diff --git a/module/doc/model.php b/module/doc/model.php index f6f259d21d..f0fd31c71f 100644 --- a/module/doc/model.php +++ b/module/doc/model.php @@ -1918,20 +1918,18 @@ class docModel extends model /* Set toList and ccList. */ $toList = ''; $ccList = str_replace(' ', '', trim($doc->mailto, ',')); - if(empty($toList)) + + if(empty($ccList)) return false; + if(strpos($ccList, ',') === false) { - if(empty($ccList)) return false; - if(strpos($ccList, ',') === false) - { - $toList = $ccList; - $ccList = ''; - } - else - { - $commaPos = strpos($ccList, ','); - $toList = substr($ccList, 0, $commaPos); - $ccList = substr($ccList, $commaPos + 1); - } + $toList = $ccList; + $ccList = ''; + } + else + { + $commaPos = strpos($ccList, ','); + $toList = substr($ccList, 0, $commaPos); + $ccList = substr($ccList, $commaPos + 1); } return array($toList, $ccList); } diff --git a/module/mail/control.php b/module/mail/control.php index 67f41af349..1630c9a363 100755 --- a/module/mail/control.php +++ b/module/mail/control.php @@ -1,4 +1,5 @@ mailZen->getActionForMail($actionID); + $action = $this->mailTao->getActionForMail($actionID); $objectType = $action->objectType; - $object = $this->mailZen->getObjectForMail($objectType, $objectID); - $title = $this->mailZen->getObjectTitle($object, $objectType); + $object = $this->mailTao->getObjectForMail($objectType, $objectID); + $title = $this->mailTao->getObjectTitle($object, $objectType); $domain = zget($this->config->mail, 'domain', common::getSysURL()); if(empty($title)) $action->appendLink = ''; if($title and $action->appendLink) $action->appendLink = html::a($domain . helper::createLink($action->objectType, 'view', "id={$action->appendLink}"), "#{$action->appendLink} {$title}"); - if($objectType == 'review' and empty($object->auditedBy)) return; + if($objectType == 'review' and empty($object->auditedBy)) return false; /* Send it. */ - $this->mailZen->sendBasedOnType($objectType, $object, $action); + return $this->mailTao->sendBasedOnType($objectType, $object, $action); } /** diff --git a/module/mail/tao.php b/module/mail/tao.php index 2467338fab..ec9e721552 100644 --- a/module/mail/tao.php +++ b/module/mail/tao.php @@ -80,5 +80,208 @@ class mailTao extends mailModel return $body; } -} + /** + * Get action for mail. + * + * @param int $actionID + * @access protected + * @return object|false + */ + protected function getActionForMail(int $actionID): object|false + { + $this->loadModel('action'); + $action = $this->action->getById($actionID); + $history = $this->action->getHistory($actionID); + if(!$action) return false; + + $action->history = zget($history, $actionID, array()); + $action->appendLink = ''; + if(strpos($action->extra, ':') !== false) + { + list($extra, $id) = explode(':', $action->extra); + $action->extra = $extra; + $action->appendLink = $id; + } + + return $action; + } + + /** + * Get object for mail by objectType. + * + * @param string $objectType kanbancard|testtask|doc|bug|story|task|release + * @param int $objectID + * @access protected + * @return object + */ + protected function getObjectForMail(string$objectType, int $objectID): object|false + { + if(empty($objectType) || empty($objectID)) return false; + + $objectModel = $objectType == 'kanbancard' ? $this->loadModel('kanban') : $this->loadModel($objectType); + if(!$objectModel) return false; + + $getObjectMethod = $objectType == 'kanbancard' ? 'getCardByID' : 'getByID'; + if(method_exists($objectModel, $getObjectMethod)) + { + $object = call_user_func(array($objectModel, $getObjectMethod), $objectID); + } + else + { + $object = $this->fetchByID($objectID, $objectType); + } + if(!$object) return false; + + if($objectType == 'doc' && $object->contentType == 'markdown') + { + $object->content = commonModel::processMarkdown($object->content); + $object->content = str_replace("", "
", $object->content); + $object->content = str_replace("
", "", $object->content); + $object->content = str_replace("", "", $object->content); + } + + return $object; + } + + /** + * Get addressees by objectType. + * + * @param string $objectType + * @param object $action + * @param object $object + * @access protected + * @return array|bool + */ + protected function getAddressees(string $objectType, object $object, object $action): array|bool + { + if(empty($objectType) || empty($object) || empty($action)) return false; + if($objectType == 'review') return array($object->auditedBy, ''); + + $objectModel = $this->loadModel($objectType); + if(!$objectModel) return false; + + if($objectType == 'story' or $objectType == 'meeting') return $objectModel->getToAndCcList($object, $action->action); + if($objectType == 'ticket') return $objectModel->getToAndCcList($object, $action); + return $objectModel->getToAndCcList($object); + } + + /** + * Get mail content by objectType. + * + * @param string $objectType + * @param object $action + * @param object $object + * @access protected + * @return string + */ + protected function getMailContent(string $objectType, object $object, object $action): string + { + if(empty($objectType) || empty($object) || empty($action)) return ''; + if($objectType == 'mr') return ''; + + $domain = zget($this->config->mail, 'domain', common::getSysURL()); + $mailTitle = strtoupper($objectType) . ' #' . $object->id; + $modulePath = $this->app->getModulePath('', $objectType); + if(!file_exists($modulePath)) return ''; + + $oldcwd = getcwd(); + $viewFile = $modulePath . 'view/sendmail.html.php'; + + $viewExtPath = $this->app->getModuleExtPath($objectType, 'view'); + $extHookFiles = array(); + if(!empty($viewExtPath)) + { + $commonExtViewFile = $viewExtPath['common'] . "sendmail.html.php"; + if(file_exists($commonExtViewFile)) $viewFile = $commonExtViewFile; + + $extHookFiles = glob($viewExtPath['common'] . "sendmail.*.html.hook.php"); + } + if(!file_exists($viewFile)) return ''; + + chdir(dirname($viewFile, 2)); + ob_start(); + include $viewFile; + foreach($extHookFiles as $hookFile) include $hookFile; + $mailContent = ob_get_contents(); + ob_end_clean(); + chdir($oldcwd); + + return $mailContent; + } + + /** + * Get object title for mail. + * + * @param object $object + * @param string $objectType + * @access protected + * @return string + */ + protected function getObjectTitle(object $object, string $objectType): string + { + $nameFields = zget($this->config->action->objectNameFields, $objectType, array()); + return zget($object, $nameFields, ''); + } + + /** + * Send mail based n objectType. + * + * @param string $objectType + * @param object $object + * @param object $action + * @access protected + * @return string|false + */ + protected function sendBasedOnType(string $objectType, object $object, object $action): string|false + { + $domain = zget($this->config->mail, 'domain', common::getSysURL()); + $title = $this->getObjectTitle($object, $objectType); + $subject = $this->getSubject($objectType, $object, $title, $action->action); + + if($objectType == 'kanbancard') $objectType = 'kanban'; + $addressees = $this->getAddressees($objectType, $object, $action); + if(!$addressees) return false; + + list($toList, $ccList) = $addressees; + if($objectType == 'mr') + { + $this->loadModel('mr'); + + $MRLink = $domain . helper::createLink('mr', 'view', "id={$object->id}"); + if($action->action == 'compilepass') + { + $mailContent = sprintf($this->lang->mr->toCreatedMessage, $MRLink, $title); + $this->send($toList, $subject, $mailContent); + + $mailContent = sprintf($this->lang->mr->toReviewerMessage, $MRLink, $title); + $this->send($ccList, $subject, $mailContent); + + /* Create a todo item for this MR. */ + $this->mr->apiCreateMRTodo($object->hostID, $object->targetProject, $object->mriid); + } + elseif($action->action == 'compilefail') + { + $mailContent = sprintf($this->lang->mr->failMessage, $MRLink, $title); + $this->send($toList, $subject, $mailContent, $ccList); + } + } + else + { + $mailContent = $this->getMailContent($objectType, $object, $action); + if($objectType == 'ticket') + { + $emails = $this->loadModel('ticket')->getContactEmails($object->id, $toList, $ccList, $action->action == 'closed'); + $this->send($toList, $subject, $mailContent, $ccList, false, $emails); + } + else + { + if($objectType == 'review') $this->app->loadLang('baseline'); + $this->send($toList, $subject, $mailContent, $ccList); + } + } + + if($this->isError()) return implode("\n", $this->getError()); + return ''; + } +} diff --git a/module/mail/test/mail.class.php b/module/mail/test/mail.class.php index 0446e7f9b6..4b22084cd9 100644 --- a/module/mail/test/mail.class.php +++ b/module/mail/test/mail.class.php @@ -291,4 +291,77 @@ class mailTest return $object; } + + /** + * Test getAddressees method. + * + * @param string $objectType + * @param int $objectID + * @param int $actionID + * @access public + * @return array|false + */ + public function getAddresseesTest($objectType, $objectID, $actionID) + { + $object = $this->objectModel->getObjectForMail($objectType, $objectID); + if(!$object) return false; + $action = $this->objectModel->getActionForMail($actionID); + if(!$action) return false; + + return $this->objectModel->getAddressees($objectType, $object, $action); + } + + /** + * Test getMailContent method. + * + * @param string $objectType + * @param int $objectID + * @param int $actionID + * @access public + * @return array|false + */ + public function getMailContentTest($objectType, $objectID, $actionID) + { + $object = $this->objectModel->getObjectForMail($objectType, $objectID); + if(!$object) return false; + $action = $this->objectModel->getActionForMail($actionID); + if(!$action) return false; + + return $this->objectModel->getMailContent($objectType, $object, $action); + } + + /** + * Test getObjectTitle method. + * + * @param string $objectType + * @param int $objectID + * @access public + * @return string|false + */ + public function getObjectTitleTest($objectType, $objectID) + { + $object = $this->objectModel->getObjectForMail($objectType, $objectID); + if(!$object) return false; + + return $this->objectModel->getObjectTitle($object, $objectType); + } + + /** + * Test sendBasedOnType method. + * + * @param string $objectType + * @param int $objectID + * @param int $actionID + * @access public + * @return array|false + */ + public function sendBasedOnTypeTest($objectType, $objectID, $actionID) + { + $object = $this->objectModel->getObjectForMail($objectType, $objectID); + if(!$object) return false; + $action = $this->objectModel->getActionForMail($actionID); + if(!$action) return false; + + return $this->objectModel->sendBasedOnType($objectType, $object, $action); + } } diff --git a/module/mail/test/model/sendmail.php b/module/mail/test/model/sendmail.php index a6421a5b50..f91407596a 100755 --- a/module/mail/test/model/sendmail.php +++ b/module/mail/test/model/sendmail.php @@ -1,8 +1,5 @@ #!/usr/bin/env php > 0 */ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/mail.class.php'; +su('admin'); + +$action = zdTable('action'); +$action->execution->range('101'); +$action->gen(2); +zdTable('story')->gen(2); +zdTable('product')->gen(2); $mail = new mailTest(); -r($mail->sendmailTest(48,48)) && p() && e('0'); //测试为dev4用户发送邮件通知 \ No newline at end of file +r($mail->objectModel->sendmail(0, 0)) && p() && e('0'); //不传入任何参数 +r($mail->objectModel->sendmail(0, 2)) && p() && e('0'); //只传入actionID +r($mail->objectModel->sendmail(2, 0)) && p() && e('0'); //只传入objectID + +r($mail->objectModel->sendmail(2, 2)) && p() && e('0'); //测试为需求2发送邮件通知 diff --git a/module/mail/test/tao/getactionformail.php b/module/mail/test/tao/getactionformail.php new file mode 100644 index 0000000000..2d78e9690e --- /dev/null +++ b/module/mail/test/tao/getactionformail.php @@ -0,0 +1,47 @@ +#!/usr/bin/env php +getActionForMail(); +cid=0 + +- 传入空参数 @0 +- 检查 id=1 的数据的id,extra,appendLink字段 + - 属性id @1 + - 属性extra @`` + - 属性appendLink @`` +- 检查 id=1 的数据所属history的id,action字段 + - 属性id @1 + - 属性action @1 +- 检查 id=2 的数据的id,extra,appendLink字段 + - 属性id @2 + - 属性extra @Fix + - 属性appendLink @1 +- 检查 id=2 的数据所属history的id,action字段 + - 属性id @2 + - 属性action @2 +- 检查不存在的ID @0 + +*/ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +su('admin'); + +$action = zdTable('action'); +$action->execution->range(1); +$action->extra->range('``,`Fix:1`'); +$action->gen(2); +zdTable('history')->gen(5); + +global $tester; +$mailModel = $tester->loadModel('mail'); + +$action1 = $mailModel->getActionForMail(1); +$action2 = $mailModel->getActionForMail(2); + +r($mailModel->getActionForMail(0)) && p() && e('0'); //传入空参数 +r($action1) && p('id,extra,appendLink') && e('1,``,``'); //检查 id=1 的数据的id,extra,appendLink字段 +r($action1->history[0]) && p('id,action') && e('1,1'); //检查 id=1 的数据所属history的id,action字段 +r($action2) && p('id,extra,appendLink') && e('2,Fix,1'); //检查 id=2 的数据的id,extra,appendLink字段 +r($action2->history[0]) && p('id,action') && e('2,2'); //检查 id=2 的数据所属history的id,action字段 +r($mailModel->getActionForMail(10)) && p() && e('0'); //检查不存在的ID diff --git a/module/mail/test/tao/getaddressees.php b/module/mail/test/tao/getaddressees.php new file mode 100644 index 0000000000..196fdd3b84 --- /dev/null +++ b/module/mail/test/tao/getaddressees.php @@ -0,0 +1,108 @@ +#!/usr/bin/env php +getAddressees(); +cid=0 + +- 不传入任何参数 @0 +- 只传入object @0 +- 只传入action @0 +- 只传入objectType参数 @0 +- 不传入object @0 +- 不传入action @0 +- 不传入objectType参数 @0 +- 传入的objectType不合法 @0 +- 传入的object不存在 @0 +- 传入的action不存在 @0 +- 获取测试单的收信人 @user3,, + +- 获取测试单的抄送人 @`` +- 获取文档的收信人 @admin +- 获取文档的抄送人 @user1 +- 获取需求的收信人 @admin +- 获取需求的抄送人 @`` +- 获取Bug的收信人 @admin +- 获取Bug的抄送人 @admin +- 获取任务的收信人 @user2 +- 获取任务的抄送人 @user4 +- 获取发布的收信人 @admin +- 获取发布的抄送人 @po1 +- 获取review的收信人 @admin +- 获取review的抄送人 @`` + +*/ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/mail.class.php'; +su('admin'); + +$action = zdTable('action'); +$action->execution->range(1); +$action->extra->range('``,`Fix:1`'); +$action->gen(2); +zdTable('history')->gen(2); +$testtask = zdTable('testtask'); +$testtask->createdBy->range('admin'); +$testtask->createdDate->range('`' . date('Y-m-d H:i:s') . '`'); +$testtask->gen(2); +$doc = zdTable('doc'); +$doc->version->range('1'); +$doc->mailto->range('`admin,user1`'); +$doc->gen(2); +zdTable('doccontent')->gen(5); +$task = zdTable('task'); +$task->assignedTo->range('user1,user2'); +$task->mailto->range('user3,user4'); +$task->gen(2); +$story = zdTable('story'); +$story->version->range('1'); +$story->gen(2); +zdTable('storyspec')->gen(2); +zdTable('bug')->gen(2); +zdTable('kanbancard')->gen(2); +zdTable('release')->gen(2); +zdTable('product')->gen(2); +$project = zdTable('project'); +$project->id->range('101-105'); +$project->name->range('1-5')->prefix('迭代'); +$project->gen(2); + +$mail = new mailTest(); + +r($mail->getAddresseesTest('', 0, 0)) && p() && e('0'); //不传入任何参数 +r($mail->getAddresseesTest('', 1, 0)) && p() && e('0'); //只传入object +r($mail->getAddresseesTest('', 0, 1)) && p() && e('0'); //只传入action +r($mail->getAddresseesTest('testtask', 0, 0)) && p() && e('0'); //只传入objectType参数 +r($mail->getAddresseesTest('testtask', 0, 1)) && p() && e('0'); //不传入object +r($mail->getAddresseesTest('testtask', 1, 0)) && p() && e('0'); //不传入action +r($mail->getAddresseesTest('', 1, 1)) && p() && e('0'); //不传入objectType参数 +r($mail->getAddresseesTest('test', 1, 1)) && p() && e('0'); //传入的objectType不合法 +r($mail->getAddresseesTest('testtask', 10, 1)) && p() && e('0'); //传入的object不存在 +r($mail->getAddresseesTest('testtask', 1, 20)) && p() && e('0'); //传入的action不存在 + +$review = new stdclass(); +$review->auditedBy = 'admin'; + +$testtaskAddressees = $mail->getAddresseesTest('testtask', 1, 1); +$docAddressees = $mail->getAddresseesTest('doc', 1, 1); +$storyAddressees = $mail->getAddresseesTest('story', 1, 1); +$bugAddressees = $mail->getAddresseesTest('bug', 1, 1); +$taskAddressees = $mail->getAddresseesTest('task', 2, 1); +$releaseAddressees = $mail->getAddresseesTest('release', 1, 1); +$reviewAddressees = $mail->objectModel->getAddressees('review', $review, new stdclass()); + +r($testtaskAddressees[0]) && p() && e('user3,,'); //获取测试单的收信人 +r($testtaskAddressees[1]) && p() && e('``'); //获取测试单的抄送人 +r($docAddressees[0]) && p() && e('admin'); //获取文档的收信人 +r($docAddressees[1]) && p() && e('user1'); //获取文档的抄送人 +r($storyAddressees[0]) && p() && e('admin'); //获取需求的收信人 +r($storyAddressees[1]) && p() && e('``'); //获取需求的抄送人 +r($bugAddressees[0]) && p() && e('admin'); //获取Bug的收信人 +r($bugAddressees[1]) && p() && e('admin'); //获取Bug的抄送人 +r($taskAddressees[0]) && p() && e('user2'); //获取任务的收信人 +r($taskAddressees[1]) && p() && e('user4'); //获取任务的抄送人 +r($releaseAddressees[0]) && p() && e('admin'); //获取发布的收信人 +r($releaseAddressees[1]) && p() && e('po1'); //获取发布的抄送人 +r($reviewAddressees[0]) && p() && e('admin'); //获取review的收信人 +r($reviewAddressees[1]) && p() && e('``'); //获取review的抄送人 diff --git a/module/mail/test/tao/getmailcontent.php b/module/mail/test/tao/getmailcontent.php new file mode 100644 index 0000000000..77ed8478f6 --- /dev/null +++ b/module/mail/test/tao/getmailcontent.php @@ -0,0 +1,59 @@ +#!/usr/bin/env php +getMailContent(); +cid=0 + +- 不传入任何参数 @0 +- 只传入object @0 +- 只传入action @0 +- 只传入objectType参数 @0 +- 不传入object @0 +- 不传入action @0 +- 不传入objectType参数 @0 +- 传入的objectType不合法 @0 +- 传入的object不存在 @0 +- 传入的action不存在 @0 +- 传入的objectType=mr @0 +- 检查邮件内容包含需求名称 @1 +- 检查邮件内容包含需求描述 @1 +- 检查邮件内容包含备注 @1 + +*/ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/mail.class.php'; +su('admin'); + +$action = zdTable('action'); +$action->execution->range(1); +$action->extra->range('``,`Fix:1`'); +$action->gen(2); +zdTable('history')->gen(2); +$story = zdTable('story'); +$story->version->range('1'); +$story->gen(2); +zdTable('storyspec')->gen(2); +zdTable('product')->gen(2); + +$mail = new mailTest(); +$mail->objectModel->config->webRoot = '/'; + +r($mail->getMailContentTest('', 0, 0)) && p() && e('0'); //不传入任何参数 +r($mail->getMailContentTest('', 1, 0)) && p() && e('0'); //只传入object +r($mail->getMailContentTest('', 0, 1)) && p() && e('0'); //只传入action +r($mail->getMailContentTest('story', 0, 0)) && p() && e('0'); //只传入objectType参数 +r($mail->getMailContentTest('story', 0, 1)) && p() && e('0'); //不传入object +r($mail->getMailContentTest('story', 1, 0)) && p() && e('0'); //不传入action +r($mail->getMailContentTest('', 1, 1)) && p() && e('0'); //不传入objectType参数 +r($mail->getMailContentTest('test', 1, 1)) && p() && e('0'); //传入的objectType不合法 +r($mail->getMailContentTest('story', 10, 1)) && p() && e('0'); //传入的object不存在 +r($mail->getMailContentTest('story', 1, 20)) && p() && e('0'); //传入的action不存在 + +r($mail->objectModel->getMailContent('mr', new stdclass(), new stdclass())) && p() && e('0'); //传入的objectType=mr + +$storyContent = $mail->getMailContentTest('story', 1, 1); +r(strpos($storyContent, "STORY #1 用户需求版本一1") !== false) && p() && e('1'); //检查邮件内容包含需求名称 +r(strpos($storyContent, "
这是一个软件需求描述1
") !== false) && p() && e('1'); //检查邮件内容包含需求描述 +r(strpos($storyContent, '
这是一个系统日志测试备注1
') !== false) && p() && e('1'); //检查邮件内容包含备注 diff --git a/module/mail/test/tao/getobjectformail.php b/module/mail/test/tao/getobjectformail.php new file mode 100755 index 0000000000..363596202a --- /dev/null +++ b/module/mail/test/tao/getobjectformail.php @@ -0,0 +1,99 @@ +#!/usr/bin/env php +getObjectForMail(); +cid=0 + +- 不传入任何参数 @0 +- 只传入objectType参数 @0 +- 只传入objectID参数 @0 +- 传入不存在的objectID @0 +- 传入不存在的objectType @0 +- 获取测试单ID=1的数据 + - 属性id @1 + - 属性product @1 + - 属性build @11 + - 属性name @测试单1 +- 获取文档ID=2的数据 + - 属性id @2 + - 属性lib @2 + - 属性type @markdown + - 属性title @文档标题2 + - 属性content @

文档正文2

+- 获取需求ID=1的数据 + - 属性id @1 + - 属性product @1 + - 属性type @requirement + - 属性title @用户需求版本一1 + - 属性spec @这是一个软件需求描述1 + - 属性verify @这是一个需求验收1 +- 获取任务ID=1的数据 + - 属性id @1 + - 属性project @11 + - 属性execution @101 + - 属性name @开发任务11 + - 属性desc @这里是任务描述1 + - 属性type @design + - 属性status @wait +- 获取Bug ID=1的数据 + - 属性id @1 + - 属性product @1 + - 属性title @BUG1 + - 属性steps @

【步骤】


【结果】


【期望】


+ - 属性status @active +- 获取看板卡片ID=1的数据 + - 属性id @1 + - 属性kanban @1 + - 属性name @卡片1 + - 属性status @doing + - 属性assignedTo @admin +- 获取发布ID=1的数据 + - 属性id @1 + - 属性product @1 + - 属性build @1 + - 属性name @产品正常的正常的发布1 + - 属性status @normal + +*/ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +su('admin'); + +$testtask = zdTable('testtask'); +$testtask->createdBy->range('admin'); +$testtask->createdDate->range('`' . date('Y-m-d H:i:s') . '`'); +$testtask->gen(2); +$doc = zdTable('doc'); +$doc->version->range('1'); +$doc->gen(2); +zdTable('doccontent')->gen(5); +zdTable('task')->gen(2); +$story = zdTable('story'); +$story->version->range('1'); +$story->gen(2); +zdTable('storyspec')->gen(2); +zdTable('bug')->gen(2); +zdTable('kanbancard')->gen(2); +zdTable('release')->gen(2); +zdTable('product')->gen(2); +$project = zdTable('project'); +$project->id->range('101-105'); +$project->name->range('1-5')->prefix('迭代'); +$project->gen(2); + +global $tester; +$mailModel = $tester->loadModel('mail'); + +r($mailModel->getObjectForMail('', 0)) && p() && e('0'); //不传入任何参数 +r($mailModel->getObjectForMail('testtask', 0)) && p() && e('0'); //只传入objectType参数 +r($mailModel->getObjectForMail('', 1)) && p() && e('0'); //只传入objectID参数 +r($mailModel->getObjectForMail('testtask', 10)) && p() && e('0'); //传入不存在的objectID +r($mailModel->getObjectForMail('test', 1)) && p() && e('0'); //传入不存在的objectType +r((array)$mailModel->getObjectForMail('testtask', 1)) && p('id,product,build,name') && e('1,1,11,测试单1'); //获取测试单ID=1的数据 +r((array)$mailModel->getObjectForMail('doc', 2)) && p('id,lib,type,title,content') && e('2,2,markdown,文档标题2,

文档正文2

'); //获取文档ID=2的数据 +r((array)$mailModel->getObjectForMail('story', 1)) && p('id,product,type,title,spec,verify') && e('1,1,requirement,用户需求版本一1,这是一个软件需求描述1,这是一个需求验收1'); //获取需求ID=1的数据 +r((array)$mailModel->getObjectForMail('task', 1)) && p('id,project,execution,name,desc,type,status') && e('1,11,101,开发任务11,这里是任务描述1,design,wait'); //获取任务ID=1的数据 +r((array)$mailModel->getObjectForMail('bug', 1)) && p('id,product,title,steps,status') && e('1,1,BUG1,

【步骤】


【结果】


【期望】


,active'); //获取Bug ID=1的数据 +r((array)$mailModel->getObjectForMail('kanbancard', 1)) && p('id,kanban,name,status,assignedTo') && e('1,1,卡片1,doing,admin'); //获取看板卡片ID=1的数据 +r((array)$mailModel->getObjectForMail('release', 1)) && p('id,product,build,name,status') && e('1,1,1,产品正常的正常的发布1,normal'); //获取发布ID=1的数据 diff --git a/module/mail/test/tao/getobjecttitle.php b/module/mail/test/tao/getobjecttitle.php new file mode 100644 index 0000000000..dd3f70aa36 --- /dev/null +++ b/module/mail/test/tao/getobjecttitle.php @@ -0,0 +1,65 @@ +#!/usr/bin/env php +getObjectTitle(); +cid=0 + +- 不传入任何参数 @0 +- 只传入object @0 +- 只传入objectType参数 @0 +- 传入的objectType不合法 @0 +- 获取测试单的邮件标题 @测试单1 +- 获取文档的邮件标题 @文档标题1 +- 获取需求的邮件标题 @用户需求版本一1 +- 获取Bug的邮件标题 @BUG1 +- 获取任务的邮件标题 @开发任务12 +- 获取发布的邮件标题 @产品正常的正常的发布1 +- 获取卡片的邮件标题 @卡片1 + +*/ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/mail.class.php'; +su('admin'); + +$testtask = zdTable('testtask'); +$testtask->createdBy->range('admin'); +$testtask->createdDate->range('`' . date('Y-m-d H:i:s') . '`'); +$testtask->gen(2); +$doc = zdTable('doc'); +$doc->version->range('1'); +$doc->mailto->range('`admin,user1`'); +$doc->gen(2); +zdTable('doccontent')->gen(5); +$task = zdTable('task'); +$task->assignedTo->range('user1,user2'); +$task->mailto->range('user3,user4'); +$task->gen(2); +$story = zdTable('story'); +$story->version->range('1'); +$story->gen(2); +zdTable('storyspec')->gen(2); +zdTable('bug')->gen(2); +zdTable('kanbancard')->gen(2); +zdTable('release')->gen(2); +zdTable('product')->gen(2); +$project = zdTable('project'); +$project->id->range('101-105'); +$project->name->range('1-5')->prefix('迭代'); +$project->gen(2); + +$mail = new mailTest(); + +r($mail->getObjectTitleTest('', 0)) && p() && e('0'); //不传入任何参数 +r($mail->getObjectTitleTest('', 1)) && p() && e('0'); //只传入object +r($mail->getObjectTitleTest('testtask', 0)) && p() && e('0'); //只传入objectType参数 +r($mail->getObjectTitleTest('test', 1)) && p() && e('0'); //传入的objectType不合法 + +r($mail->getObjectTitleTest('testtask', 1)) && p() && e('测试单1'); //获取测试单的邮件标题 +r($mail->getObjectTitleTest('doc', 1)) && p() && e('文档标题1'); //获取文档的邮件标题 +r($mail->getObjectTitleTest('story', 1)) && p() && e('用户需求版本一1'); //获取需求的邮件标题 +r($mail->getObjectTitleTest('bug', 1)) && p() && e('BUG1'); //获取Bug的邮件标题 +r($mail->getObjectTitleTest('task', 2)) && p() && e('开发任务12'); //获取任务的邮件标题 +r($mail->getObjectTitleTest('release', 1)) && p() && e('产品正常的正常的发布1'); //获取发布的邮件标题 +r($mail->getObjectTitleTest('kanbancard', 1)) && p() && e('卡片1'); //获取卡片的邮件标题 diff --git a/module/mail/test/tao/sendbasedontype.php b/module/mail/test/tao/sendbasedontype.php new file mode 100644 index 0000000000..0b4ae97c0c --- /dev/null +++ b/module/mail/test/tao/sendbasedontype.php @@ -0,0 +1,59 @@ +#!/usr/bin/env php +sendBasedOnType(); +cid=0 + +- 不传入任何参数 @0 +- 只传入object @0 +- 只传入action @0 +- 只传入objectType参数 @0 +- 不传入object @0 +- 不传入action @0 +- 不传入objectType参数 @0 +- 传入的objectType不合法 @0 +- 传入的object不存在 @0 +- 传入的action不存在 @0 +- 对需求2发信 @0 +- 对成功的MR1发信 @0 +- 对失败的MR2发信 @0 + +*/ +include dirname(__FILE__, 5) . '/test/lib/init.php'; +include dirname(__FILE__, 2) . '/mail.class.php'; +su('admin'); + +$action = zdTable('action'); +$action->execution->range(1); +$action->objectID->range('1,2'); +$action->objectType->range('product,story,mr,mr,review'); +$action->action->range('opened,opened,compilepass,compilefail,opened'); +$action->extra->range('``,`Fix:1`'); +$action->gen(5); +zdTable('history')->gen(2); +$story = zdTable('story'); +$story->version->range('1'); +$story->gen(2); +zdTable('storyspec')->gen(2); +zdTable('mr')->gen(1); +zdTable('product')->gen(2); + +$mail = new mailTest(); +$mail->objectModel->config->webRoot = '/'; + +r($mail->sendBasedOnTypeTest('', 0, 0)) && p() && e('0'); //不传入任何参数 +r($mail->sendBasedOnTypeTest('', 1, 0)) && p() && e('0'); //只传入object +r($mail->sendBasedOnTypeTest('', 0, 1)) && p() && e('0'); //只传入action +r($mail->sendBasedOnTypeTest('story', 0, 0)) && p() && e('0'); //只传入objectType参数 +r($mail->sendBasedOnTypeTest('story', 0, 1)) && p() && e('0'); //不传入object +r($mail->sendBasedOnTypeTest('story', 1, 0)) && p() && e('0'); //不传入action +r($mail->sendBasedOnTypeTest('', 1, 1)) && p() && e('0'); //不传入objectType参数 +r($mail->sendBasedOnTypeTest('test', 1, 1)) && p() && e('0'); //传入的objectType不合法 +r($mail->sendBasedOnTypeTest('story', 10, 1)) && p() && e('0'); //传入的object不存在 +r($mail->sendBasedOnTypeTest('story', 1, 20)) && p() && e('0'); //传入的action不存在 + +r($mail->sendBasedOnTypeTest('story', 2, 2)) && p() && e('0'); //对需求2发信 +r($mail->sendBasedOnTypeTest('mr', 1, 3)) && p() && e('0'); //对成功的MR1发信 +r($mail->sendBasedOnTypeTest('mr', 2, 4)) && p() && e('0'); //对失败的MR2发信 diff --git a/module/mr/model.php b/module/mr/model.php index d7005327f4..d477f07f8e 100644 --- a/module/mr/model.php +++ b/module/mr/model.php @@ -11,7 +11,6 @@ declare(strict_types=1); */ class mrModel extends model { - /** * 获取合并请求列表. * Get MR list of gitlab project.