mirror of
https://github.com/silverstripe/silverstripe-behat-extension
synced 2024-06-23 04:59:26 +02:00
Using TestSessionEnvironment for saving emails
Easier debugging through JSON file inspection, which can be logged in its entirety more easily than a database table. It also keeps data in one place.
This commit is contained in:
parent
a0517d7680
commit
a40896db8b
|
@ -4,20 +4,25 @@ namespace SilverStripe\BehatExtension\Utility;
|
|||
|
||||
/**
|
||||
* Same principle as core TestMailer class,
|
||||
* but saves emails in the database instead in order
|
||||
* but saves emails in {@link TestSessionEnvironment}
|
||||
* to share the state between PHP calls (CLI vs. browser).
|
||||
*/
|
||||
class TestMailer extends \Mailer {
|
||||
|
||||
protected $table = '_Behat_TestMailer';
|
||||
/**
|
||||
* @var TestSessionEnvironment
|
||||
*/
|
||||
protected $testSessionEnvironment;
|
||||
|
||||
public function __construct() {
|
||||
$this->testSessionEnvironment = \Injector::inst()->get('TestSessionEnvironment');
|
||||
}
|
||||
|
||||
/**
|
||||
* Send a plain-text email.
|
||||
* TestMailer will merely record that the email was asked to be sent, without sending anything.
|
||||
*/
|
||||
public function sendPlain($to, $from, $subject, $plainContent, $attachedFiles = false, $customHeaders = false) {
|
||||
$this->initTable();
|
||||
|
||||
$this->saveEmail(array(
|
||||
'Type' => 'plain',
|
||||
'To' => $to,
|
||||
|
@ -39,8 +44,6 @@ class TestMailer extends \Mailer {
|
|||
public function sendHTML($to, $from, $subject, $htmlContent, $attachedFiles = false, $customHeaders = false,
|
||||
$plainContent = false, $inlineImages = false) {
|
||||
|
||||
$this->initTable();
|
||||
|
||||
$this->saveEmail(array(
|
||||
'Type' => 'html',
|
||||
'To' => $to,
|
||||
|
@ -59,10 +62,9 @@ class TestMailer extends \Mailer {
|
|||
* Clear the log of emails sent
|
||||
*/
|
||||
public function clearEmails() {
|
||||
$this->initTable();
|
||||
|
||||
$db = $this->getDb();
|
||||
$db->query(sprintf('TRUNCATE TABLE "%s"', $this->table));
|
||||
$state = $this->testSessionEnvironment->getState();
|
||||
if(isset($state->emails)) unset($state->emails);
|
||||
$this->testSessionEnvironment->persistState();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -94,11 +96,9 @@ class TestMailer extends \Mailer {
|
|||
*/
|
||||
public function findEmails($to = null, $from = null, $subject = null, $content = null) {
|
||||
$matches = array();
|
||||
|
||||
$this->initTable();
|
||||
$args = func_get_args();
|
||||
$db = $this->getDb();
|
||||
$emails = $db->query(sprintf('SELECT * FROM "%s"', $this->table));
|
||||
$state = $this->testSessionEnvironment->getState();
|
||||
$emails = isset($state->emails) ? $state->emails : array();
|
||||
foreach($emails as $email) {
|
||||
$matched = true;
|
||||
|
||||
|
@ -116,41 +116,11 @@ class TestMailer extends \Mailer {
|
|||
return $matches;
|
||||
}
|
||||
|
||||
protected function initTable() {
|
||||
$db = $this->getDb();
|
||||
if(!$db->hasTable($this->table)) {
|
||||
$db->beginSchemaUpdate();
|
||||
$db->requireTable($this->table, array(
|
||||
'Type' => 'Enum("plain,html")',
|
||||
'From' => 'Text',
|
||||
'To' => 'Text',
|
||||
'Subject' => 'Text',
|
||||
'Content' => 'Text',
|
||||
'PlainContent' => 'Text',
|
||||
'AttachedFiles' => 'Text',
|
||||
'CustomHeaders' => 'Text',
|
||||
));
|
||||
$db->endSchemaUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
protected function saveEmail($data) {
|
||||
$db = $this->getDb();
|
||||
$data = array_filter($data);
|
||||
$manipulation = array(
|
||||
$this->table => array(
|
||||
'command' => 'insert',
|
||||
'fields' => array()
|
||||
)
|
||||
);
|
||||
foreach($data as $k => $v) {
|
||||
$manipulation[$this->table]['fields'][$k] = $db->prepStringForDB($v);
|
||||
}
|
||||
$db->manipulate($manipulation);
|
||||
}
|
||||
|
||||
protected function getDb() {
|
||||
return \DB::getConn();
|
||||
$state = $this->testSessionEnvironment->getState();
|
||||
if(!isset($state->emails)) $state->emails = array();
|
||||
$state->emails[] = array_filter($data);
|
||||
$this->testSessionEnvironment->persistState();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user