Pretty much done with the EmailSenderHelper

remotes/upstream/api-rewrite
Mike Koch 7 years ago
parent e7eeac9f34
commit 2a6766c10e

@ -0,0 +1,21 @@
<?php
namespace BusinessLogic\Emails;
class Addressees {
/**
* @var $to string[]
*/
public $to;
/**
* @var $cc string[]|null
*/
public $cc;
/**
* @var $bcc string[]|null
*/
public $bcc;
}

@ -3,6 +3,8 @@
namespace BusinessLogic\Emails;
use BusinessLogic\Tickets\Ticket;
class EmailSenderHelper {
/**
* @var $emailTemplateParser EmailTemplateParser
@ -25,12 +27,35 @@ class EmailSenderHelper {
$this->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
}
}

@ -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);
}
}

Loading…
Cancel
Save