Explorar el Código

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>
tags/v14.0.0beta1
Roeland Jago Douma hace 6 años
padre
commit
be7db1573d
No account linked to committer's email address
Se han modificado 2 ficheros con 21 adiciones y 33 borrados
  1. 9
    12
      lib/private/Mail/Mailer.php
  2. 12
    21
      tests/lib/Mail/MailerTest.php

+ 9
- 12
lib/private/Mail/Mailer.php Ver fichero

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

+ 12
- 21
tests/lib/Mail/MailerTest.php Ver fichero

@@ -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() {

Cargando…
Cancelar
Guardar