Swift to \Swift_Mailer as abstraction

* \Swift_Mailer handles starting the transport etc properly
* Fixed tests

Signed-off-by: Roeland Jago Douma <roeland@famdouma.nl>
This commit is contained in:
Roeland Jago Douma 2018-06-08 10:26:56 +02:00
parent e6e6b5648a
commit be7db1573d
No known key found for this signature in database
GPG Key ID: F941078878347C0C
2 changed files with 21 additions and 33 deletions

View File

@ -57,7 +57,7 @@ use OCP\Mail\IMessage;
* @package OC\Mail
*/
class Mailer implements IMailer {
/** @var \Swift_SmtpTransport|\Swift_SendmailTransport Cached transport */
/** @var \Swift_Mailer Cached mailer */
private $instance = null;
/** @var IConfig */
private $config;
@ -220,27 +220,24 @@ class Mailer implements IMailer {
return $name.'@'.$domain;
}
/**
* Returns whatever transport is configured within the config
*
* @return \Swift_SmtpTransport|\Swift_SendmailTransport
*/
protected function getInstance() {
protected function getInstance(): \Swift_Mailer {
if (!is_null($this->instance)) {
return $this->instance;
}
$transport = null;
switch ($this->config->getSystemValue('mail_smtpmode', 'smtp')) {
case 'sendmail':
$this->instance = $this->getSendMailInstance();
$transport = $this->getSendMailInstance();
break;
case 'smtp':
default:
$this->instance = $this->getSmtpInstance();
$transport = $this->getSmtpInstance();
break;
}
return $this->instance;
return new \Swift_Mailer($transport);
}
/**
@ -262,7 +259,7 @@ class Mailer implements IMailer {
if (!empty($smtpSecurity)) {
$transport->setEncryption($smtpSecurity);
}
$transport->start();
return $transport;
}
@ -272,7 +269,7 @@ class Mailer implements IMailer {
* @return \Swift_SendmailTransport
*/
protected function getSendMailInstance(): \Swift_SendmailTransport {
switch ($this->config->getSystemValue('mail_smtpmode', 'smpt')) {
switch ($this->config->getSystemValue('mail_smtpmode', 'smtp')) {
case 'qmail':
$binaryPath = '/var/qmail/bin/sendmail';
break;

View File

@ -48,50 +48,41 @@ class MailerTest extends TestCase {
);
}
public function testGetMailInstance() {
$this->assertEquals(\Swift_MailTransport::newInstance(), self::invokePrivate($this->mailer, 'getMailinstance'));
}
public function testGetSendMailInstanceSendMail() {
$this->config
->expects($this->once())
->method('getSystemValue')
->with('mail_smtpmode', 'php')
->with('mail_smtpmode', 'smtp')
->will($this->returnValue('sendmail'));
$this->assertEquals(\Swift_SendmailTransport::newInstance('/usr/sbin/sendmail -bs'), self::invokePrivate($this->mailer, 'getSendMailInstance'));
$this->assertEquals(new \Swift_SendmailTransport('/usr/sbin/sendmail -bs'), self::invokePrivate($this->mailer, 'getSendMailInstance'));
}
public function testGetSendMailInstanceSendMailQmail() {
$this->config
->expects($this->once())
->method('getSystemValue')
->with('mail_smtpmode', 'php')
->with('mail_smtpmode', 'smtp')
->will($this->returnValue('qmail'));
$this->assertEquals(\Swift_SendmailTransport::newInstance('/var/qmail/bin/sendmail -bs'), self::invokePrivate($this->mailer, 'getSendMailInstance'));
$this->assertEquals(new \Swift_SendmailTransport('/var/qmail/bin/sendmail -bs'), self::invokePrivate($this->mailer, 'getSendMailInstance'));
}
public function testGetInstanceDefault() {
$this->assertInstanceOf('\Swift_MailTransport', self::invokePrivate($this->mailer, 'getInstance'));
}
public function testGetInstancePhp() {
$this->config
->expects($this->any())
->method('getSystemValue')
->will($this->returnValue('php'));
$this->assertInstanceOf('\Swift_MailTransport', self::invokePrivate($this->mailer, 'getInstance'));
$mailer = self::invokePrivate($this->mailer, 'getInstance');
$this->assertInstanceOf(\Swift_Mailer::class, $mailer);
$this->assertInstanceOf(\Swift_SmtpTransport::class, $mailer->getTransport());
}
public function testGetInstanceSendmail() {
$this->config
->expects($this->any())
->method('getSystemValue')
->will($this->returnValue('sendmail'));
->with('mail_smtpmode', 'smtp')
->willReturn('sendmail');
$this->assertInstanceOf('\Swift_Mailer', self::invokePrivate($this->mailer, 'getInstance'));
$mailer = self::invokePrivate($this->mailer, 'getInstance');
$this->assertInstanceOf(\Swift_Mailer::class, $mailer);
$this->assertInstanceOf(\Swift_SendmailTransport::class, $mailer->getTransport());
}
public function testCreateMessage() {