Skip to content

Commit

Permalink
Added TestEmailTransport::replaceAllTransports()
Browse files Browse the repository at this point in the history
  • Loading branch information
jeremyharris committed Apr 25, 2018
1 parent a262807 commit f87f994
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 6 deletions.
8 changes: 2 additions & 6 deletions src/TestSuite/EmailTrait.php
Expand Up @@ -26,14 +26,10 @@
*
* **tests/bootstrap.php**
* ```
* use Cake\Mailer\Email;
* use Cake\TestSuite\TestEmailTransport;
*
* // replace with other transport configs if required
* $config = Email::getConfigTransport('default');
* $config['className'] = TestEmailTransport::class;
* Email::dropTransport('default');
* Email::setConfigTransport('default', $config);
* // replaces existing transports with the TestEmailTransport for email assertions
* TestEmailTransport::replaceAllTransports();
* ```
*/
trait EmailTrait
Expand Down
17 changes: 17 additions & 0 deletions src/TestSuite/TestEmailTransport.php
Expand Up @@ -41,6 +41,23 @@ public function send(Email $email)
return true;
}

/**
* Replaces all currently configured transports with this one
*
* @return void
*/
public static function replaceAllTransports()
{
$configuredTransports = Email::configuredTransport();

foreach ($configuredTransports as $configuredTransport) {
$config = Email::getConfigTransport($configuredTransport);
$config['className'] = self::class;
Email::dropTransport($configuredTransport);
Email::setConfigTransport($configuredTransport, $config);
}
}

/**
* Gets emails sent
*
Expand Down
103 changes: 103 additions & 0 deletions tests/TestCase/TestSuite/TestEmailTransportTest.php
@@ -0,0 +1,103 @@
<?php
/**
* CakePHP(tm) : Rapid Development Framework (https://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (https://cakefoundation.org)
* @link https://cakephp.org CakePHP(tm) Project
* @since 3.7.0
* @license https://opensource.org/licenses/mit-license.php MIT License
*/
namespace Cake\Test\TestCase\TestSuite;

use Cake\Mailer\Email;
use Cake\Network\Email\DebugTransport;
use Cake\TestSuite\TestEmailTransport;
use Cake\TestSuite\TestCase;

class TestEmailTransportTest extends TestCase
{
/**
* setUp
*
* @return void
*/
public function setUp()
{
parent::setUp();

Email::drop('default');
Email::drop('alternate');
Email::dropTransport('transport_default');
Email::dropTransport('transport_alternate');

Email::setConfigTransport('transport_default', [
'className' => DebugTransport::class
]);
Email::setConfigTransport('transport_alternate', [
'className' => DebugTransport::class
]);

Email::setConfig('default', [
'transport' => 'transport_default',
'from' => 'default@example.com',
]);
Email::setConfig('alternate', [
'transport' => 'transport_alternate',
'from' => 'alternate@example.com',
]);
}

/**
* tearDown
*
* @return void
*/
public function tearDown()
{
parent::tearDown();

Email::drop('default');
Email::drop('alternate');
Email::dropTransport('transport_default');
Email::dropTransport('transport_alternate');
}

/**
* tests replaceAllTransports
*
* @return void
*/
public function testReplaceAllTransports()
{
TestEmailTransport::replaceAllTransports();

$config = Email::getConfigTransport('transport_default');
$this->assertSame(TestEmailTransport::class, $config['className']);

$config = Email::getConfigTransport('transport_alternate');
$this->assertSame(TestEmailTransport::class, $config['className']);
}

/**
* tests sending an email through the transport, getting it, and clearing all emails
*
* @return void
*/
public function testSendGetAndClear()
{
TestEmailTransport::replaceAllTransports();

(new Email())
->setTo('test@example.com')
->send('test');
$this->assertCount(1, TestEmailTransport::getEmails());

TestEmailTransport::clearEmails();
$this->assertCount(0, TestEmailTransport::getEmails());
}
}

0 comments on commit f87f994

Please sign in to comment.