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);
+ }
+
+ 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. |
|---|