You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

151 lines
3.4 KiB

<?php
namespace yiiunit\framework\mail;
use Yii;
use yii\mail\BaseMailer;
use yii\mail\BaseMessage;
use yiiunit\TestCase;
/**
* @group mail
*/
class BaseMessageTest extends TestCase
{
public function setUp()
{
$this->mockApplication([
'components' => [
'mail' => $this->createTestEmailComponent()
]
]);
}
/**
* @return Mailer test email component instance.
*/
protected function createTestEmailComponent()
{
$component = new TestMailer();
return $component;
}
/**
* @return TestMailer mailer instance.
*/
protected function getMailer()
{
return Yii::$app->getComponent('mail');
}
// Tests :
public function testRender()
{
$mailer = $this->getMailer();
$message = $mailer->message();
$viewName = 'test/text/view';
$message->renderText($viewName);
$expectedText = 'view=' . $viewName . ' layout=' . $mailer->textLayout;
$this->assertEquals($expectedText, $message->text, 'Unable to render text!');
$viewName = 'test/html/view';
$message->renderHtml($viewName);
$expectedHtml = 'view=' . $viewName . ' layout=' . $mailer->htmlLayout;
$this->assertEquals($expectedHtml, $message->html, 'Unable to render html!');
}
/**
* @depends testRender
*/
public function testComposeBody()
{
$mailer = $this->getMailer();
$message = $mailer->message();
$viewName = 'test/html/view';
$message->renderBody($viewName);
$expectedHtml = 'view=' . $viewName . ' layout=' . $mailer->htmlLayout;
$this->assertEquals($expectedHtml, $message->html, 'Unable to compose html!');
$expectedText = strip_tags($expectedHtml);
$this->assertEquals($expectedText, $message->text, 'Unable to compose text from html!');
$textViewName = 'test/text/view';
$htmlViewName = 'test/html/view';
$message->renderBody(['text' => $textViewName, 'html' => $htmlViewName]);
$expectedHtml = 'view=' . $htmlViewName . ' layout=' . $mailer->htmlLayout;
$this->assertEquals($expectedHtml, $message->html, 'Unable to compose html from separated view!');
$expectedText = 'view=' . $textViewName . ' layout=' . $mailer->textLayout;
$this->assertEquals($expectedText, $message->text, 'Unable to compose text from separated view!');
}
public function testSend()
{
$mailer = $this->getMailer();
$message = $mailer->message();
$message->send();
$this->assertEquals($message, $mailer->sentMessages[0], 'Unable to send message!');
}
}
/**
* Test Mailer class
*/
class TestMailer extends BaseMailer
{
public $messageClass = 'yiiunit\framework\mail\TestMessage';
public $sentMessages = array();
public function render($view, $params = [], $layout = false)
{
return 'view=' . $view . ' layout=' . $layout;
}
public function send($message)
{
$this->sentMessages[] = $message;
}
}
/**
* Test Message class
*/
class TestMessage extends BaseMessage
{
public $text;
public $html;
public function charset($charset) {}
public function from($from) {}
public function to($to) {}
public function cc($cc) {}
public function bcc($bcc) {}
public function subject($subject) {}
public function text($text) {
$this->text = $text;
}
public function html($html) {
$this->html = $html;
}
public function attachContent($content, array $options = []) {}
public function attach($fileName, array $options = []) {}
public function embed($fileName, array $options = []) {}
public function embedContent($content, array $options = []) {}
public function toString()
{
return get_class($this);
}
}