Skip to content

Commit 9d1cbba

Browse files
SamMousaDavertMik
authored andcommitted
TestMailer now stores messages in the connector. (#5185)
* TestMailer now stores messages in the connector. * NitPick CI
1 parent e4c0968 commit 9d1cbba

File tree

2 files changed

+16
-26
lines changed

2 files changed

+16
-26
lines changed

src/Codeception/Lib/Connector/Yii2.php

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
use Yii;
1414
use yii\base\ExitException;
1515
use yii\base\Security;
16+
use yii\mail\MessageInterface;
1617
use yii\web\Application;
1718
use yii\web\ErrorHandler;
1819
use yii\web\HttpException;
@@ -79,6 +80,8 @@ class Yii2 extends Client
7980
*/
8081
public $recreateApplication = false;
8182

83+
84+
private $emails = [];
8285
/**
8386
* @return \yii\web\Application
8487
*/
@@ -179,16 +182,7 @@ public function getInternalDomains()
179182
*/
180183
public function getEmails()
181184
{
182-
$app = $this->getApplication();
183-
if ($app->has('mailer', true)) {
184-
$mailer = $app->get('mailer');
185-
if ($mailer instanceof TestMailer) {
186-
return $app->get('mailer')->getSentMessages();
187-
} else {
188-
throw new ConfigurationException("Mailer module is not mocked, can't test emails");
189-
}
190-
}
191-
return [];
185+
return $this->emails;
192186
}
193187

194188
public function getComponent($name)
@@ -257,7 +251,6 @@ public function startApp()
257251
$config = $this->mockMailer($config);
258252
/** @var \yii\web\Application $app */
259253
Yii::$app = Yii::createObject($config);
260-
261254
Yii::setLogger(new Logger());
262255
}
263256

@@ -417,7 +410,10 @@ protected function mockMailer(array $config)
417410
];
418411

419412
$mailerConfig = [
420-
'class' => 'Codeception\Lib\Connector\Yii2\TestMailer',
413+
'class' => TestMailer::class,
414+
'callback' => function (MessageInterface $message) {
415+
$this->emails[] = $message;
416+
}
421417
];
422418

423419
if (isset($config['components']['mailer']) && is_array($config['components']['mailer'])) {

src/Codeception/Lib/Connector/Yii2/TestMailer.php

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,28 +5,22 @@
55

66
class TestMailer extends BaseMailer
77
{
8-
public $messageClass = 'yii\swiftmailer\Message';
8+
public $messageClass = \yii\swiftmailer\Message::class;
99

10-
private $sentMessages = [];
10+
/**
11+
* @var \Closure
12+
*/
13+
public $callback;
1114

1215
protected function sendMessage($message)
1316
{
14-
$this->sentMessages[] = $message;
17+
call_user_func($this->callback, $message);
1518
return true;
1619
}
1720

1821
protected function saveMessage($message)
1922
{
20-
return $this->sendMessage($message);
21-
}
22-
23-
public function getSentMessages()
24-
{
25-
return $this->sentMessages;
26-
}
27-
28-
public function reset()
29-
{
30-
$this->sentMessages = [];
23+
call_user_func($this->callback, $message);
24+
return true;
3125
}
3226
}

0 commit comments

Comments
 (0)