diff --git a/api/BusinessLogic/Emails/Addressees.php b/api/BusinessLogic/Emails/Addressees.php new file mode 100644 index 00000000..4e71c8bf --- /dev/null +++ b/api/BusinessLogic/Emails/Addressees.php @@ -0,0 +1,21 @@ +mailgunEmailSender = $mailgunEmailSender; } - function sendEmailForTicket($templateId, $languageCode, $ticket, $heskSettings, $modsForHeskSettings) { + /** + * @param $templateId int the EmailTemplateRetriever::TEMPLATE_NAME + * @param $languageCode string the language code that matches the language folder + * @param $addressees Addressees the addressees. **cc and bcc addresses from custom fields will be added here!** + * @param $ticket Ticket + * @param $heskSettings array + * @param $modsForHeskSettings array + */ + function sendEmailForTicket($templateId, $languageCode, $addressees, $ticket, $heskSettings, $modsForHeskSettings) { $parsedTemplate = $this->emailTemplateParser->getFormattedEmailForLanguage($templateId, $languageCode, $ticket, $heskSettings, $modsForHeskSettings); - //-- if no mailgun, use basic sender + $emailBuilder = new EmailBuilder(); + $emailBuilder->subject = $parsedTemplate->subject; + $emailBuilder->message = $parsedTemplate->message; + $emailBuilder->htmlMessage = $parsedTemplate->htmlMessage; + $emailBuilder->to = $addressees->to; + $emailBuilder->cc = $addressees->cc; + $emailBuilder->bcc = $addressees->bcc; + + if ($modsForHeskSettings['attachments']) { + $emailBuilder->attachments = $ticket->attachments; + } + + if ($modsForHeskSettings['use_mailgun']) { + $this->mailgunEmailSender->sendEmail($emailBuilder, $heskSettings, $modsForHeskSettings, $modsForHeskSettings['html_emails']); + } else { + $this->basicEmailSender->sendEmail($emailBuilder, $heskSettings, $modsForHeskSettings, $modsForHeskSettings['html_emails']); + } - //-- otherwise use mailgun sender } } \ No newline at end of file diff --git a/api/Tests/BusinessLogic/Emails/EmailSenderHelperTest.php b/api/Tests/BusinessLogic/Emails/EmailSenderHelperTest.php index 304868b4..2f3a4d98 100644 --- a/api/Tests/BusinessLogic/Emails/EmailSenderHelperTest.php +++ b/api/Tests/BusinessLogic/Emails/EmailSenderHelperTest.php @@ -42,6 +42,11 @@ class EmailSenderHelperTest extends TestCase { $this->basicEmailSender = $this->createMock(BasicEmailSender::class); $this->mailgunEmailSender = $this->createMock(MailgunEmailSender::class); $this->heskSettings = array(); + $this->modsForHeskSettings = array( + 'attachments' => 0, + 'use_mailgun' => 0, + 'html_emails' => 0 + ); $this->emailSenderHelper = new EmailSenderHelper($this->emailTemplateParser, $this->basicEmailSender, $this->mailgunEmailSender); @@ -52,6 +57,7 @@ class EmailSenderHelperTest extends TestCase { $templateId = EmailTemplateRetriever::NEW_NOTE; $languageCode = 'en'; $ticket = new Ticket(); + $this->emailTemplateParser->method('getFormattedEmailForLanguage')->willReturn(new ParsedEmailProperties('Subject', 'Message', 'HTML Message')); //-- Assert $this->emailTemplateParser->expects($this->once()) @@ -59,6 +65,62 @@ class EmailSenderHelperTest extends TestCase { ->with($templateId, $languageCode, $ticket, $this->heskSettings, $this->modsForHeskSettings); //-- Act - $this->emailSenderHelper->sendEmailForTicket($templateId, $languageCode, $ticket, $this->heskSettings, $this->modsForHeskSettings); + $this->emailSenderHelper->sendEmailForTicket($templateId, $languageCode, new Addressees(), $ticket, $this->heskSettings, $this->modsForHeskSettings); + } + + function testItSendsTheEmailThroughTheMailgunEmailSender() { + //-- Arrange + $addressees = new Addressees(); + $addressees->to = ['to@email']; + $addressees->cc = ['cc1', 'cc2']; + $addressees->bcc = ['bcc1', 'bcc2']; + $this->modsForHeskSettings['use_mailgun'] = 1; + $this->modsForHeskSettings['html_emails'] = true; + + $expectedEmailBuilder = new EmailBuilder(); + $expectedEmailBuilder->to = $addressees->to; + $expectedEmailBuilder->cc = $addressees->cc; + $expectedEmailBuilder->bcc = $addressees->bcc; + $expectedEmailBuilder->subject = 'Subject'; + $expectedEmailBuilder->message = 'Message'; + $expectedEmailBuilder->htmlMessage = 'HTML Message'; + + $this->emailTemplateParser->method('getFormattedEmailForLanguage')->willReturn(new ParsedEmailProperties('Subject', 'Message', 'HTML Message')); + + //-- Assert + $this->mailgunEmailSender->expects($this->once()) + ->method('sendEmail') + ->with($expectedEmailBuilder, $this->heskSettings, $this->modsForHeskSettings, true); + + //-- Act + $this->emailSenderHelper->sendEmailForTicket(EmailTemplateRetriever::NEW_NOTE, 'en', $addressees, new Ticket(), $this->heskSettings, $this->modsForHeskSettings); + } + + function testItSendsTheEmailThroughTheBasicEmailSender() { + //-- Arrange + $addressees = new Addressees(); + $addressees->to = ['to@email']; + $addressees->cc = ['cc1', 'cc2']; + $addressees->bcc = ['bcc1', 'bcc2']; + $this->modsForHeskSettings['use_mailgun'] = 0; + $this->modsForHeskSettings['html_emails'] = true; + + $expectedEmailBuilder = new EmailBuilder(); + $expectedEmailBuilder->to = $addressees->to; + $expectedEmailBuilder->cc = $addressees->cc; + $expectedEmailBuilder->bcc = $addressees->bcc; + $expectedEmailBuilder->subject = 'Subject'; + $expectedEmailBuilder->message = 'Message'; + $expectedEmailBuilder->htmlMessage = 'HTML Message'; + + $this->emailTemplateParser->method('getFormattedEmailForLanguage')->willReturn(new ParsedEmailProperties('Subject', 'Message', 'HTML Message')); + + //-- Assert + $this->basicEmailSender->expects($this->once()) + ->method('sendEmail') + ->with($expectedEmailBuilder, $this->heskSettings, $this->modsForHeskSettings, true); + + //-- Act + $this->emailSenderHelper->sendEmailForTicket(EmailTemplateRetriever::NEW_NOTE, 'en', $addressees, new Ticket(), $this->heskSettings, $this->modsForHeskSettings); } }