BaseMailerTest.php 4.01 KB
Newer Older
1 2
<?php

Paul Klimov committed
3
namespace yiiunit\framework\mail;
4 5 6

use Yii;
use yii\base\View;
Paul Klimov committed
7 8 9
use yii\mail\BaseMailer;
use yii\mail\BaseMessage;
use yii\mail\ViewResolver;
10
use yii\helpers\FileHelper;
11 12 13
use yiiunit\TestCase;

/**
14
 * @group mail
15 16 17 18 19
 */
class BaseMailerTest extends TestCase
{
	public function setUp()
	{
20 21 22 23 24
		$this->mockApplication([
			'components' => [
				'mail' => $this->createTestEmailComponent()
			]
		]);
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
		$filePath = $this->getTestFilePath();
		if (!file_exists($filePath)) {
			FileHelper::createDirectory($filePath);
		}
	}

	public function tearDown()
	{
		$filePath = $this->getTestFilePath();
		if (file_exists($filePath)) {
			FileHelper::removeDirectory($filePath);
		}
	}

	/**
	 * @return string test file path.
	 */
	protected function getTestFilePath()
	{
		return Yii::getAlias('@yiiunit/runtime') . DIRECTORY_SEPARATOR . basename(get_class($this)) . '_' . getmypid();
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
	}

	/**
	 * @return Mailer test email component instance.
	 */
	protected function createTestEmailComponent()
	{
		$component = new Mailer();
		return $component;
	}

	// Tests :

	public function testSetupView()
	{
		$mailer = new Mailer();

		$view = new View();
		$mailer->setView($view);
		$this->assertEquals($view, $mailer->getView(), 'Unable to setup view!');
65 66 67 68 69 70 71 72 73 74 75

		$viewConfig = [
			'params' => [
				'param1' => 'value1',
				'param2' => 'value2',
			]
		];
		$mailer->setView($viewConfig);
		$view = $mailer->getView();
		$this->assertTrue(is_object($view), 'Unable to setup view via config!');
		$this->assertEquals($viewConfig['params'], $view->params, 'Unable to configure view via config array!');
76 77
	}

78 79 80
	/**
	 * @depends testSetupView
	 */
81 82 83 84 85 86 87
	public function testGetDefaultView()
	{
		$mailer = new Mailer();
		$view = $mailer->getView();
		$this->assertTrue(is_object($view), 'Unable to get default view!');
	}

88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
	public function testCreateMessage()
	{
		$mailer = new Mailer();
		$message = $mailer->createMessage();
		$this->assertTrue(is_object($message), 'Unable to create message instance!');
		$this->assertEquals($mailer->messageClass, get_class($message), 'Invalid message class!');

		$messageConfig = array(
			'id' => 'test-id',
			'encoding' => 'test-encoding',
		);
		$message = $mailer->createMessage($messageConfig);

		foreach ($messageConfig as $name => $value) {
			$this->assertEquals($value, $message->$name, 'Unable to apply message config!');
		}
	}

	/**
	 * @depends testCreateMessage
	 */
109 110
	public function testDefaultMessageConfig()
	{
111 112
		$mailer = new Mailer();

113
		$messageConfig = array(
114 115 116
			'id' => 'test-id',
			'encoding' => 'test-encoding',
		);
117
		$mailer->messageConfig = $messageConfig;
118

119
		$message = $mailer->createMessage();
120

121
		foreach ($messageConfig as $name => $value) {
122 123 124
			$this->assertEquals($value, $message->$name);
		}
	}
125 126 127 128 129 130 131 132 133

	/**
	 * @depends testGetDefaultView
	 */
	public function testRender()
	{
		$mailer = new Mailer();

		$filePath = $this->getTestFilePath();
134
		$mailer->viewPath = $filePath;
135 136 137 138 139 140 141 142 143 144 145 146

		$viewName = 'test_view';
		$fileName = $filePath . DIRECTORY_SEPARATOR . $viewName . '.php';
		$fileContent = '<?php echo $testParam; ?>';
		file_put_contents($fileName, $fileContent);

		$params = [
			'testParam' => 'test output'
		];
		$renderResult = $mailer->render($viewName, $params);
		$this->assertEquals($params['testParam'], $renderResult);
	}
147 148 149 150 151 152 153
}

/**
 * Test Mailer class
 */
class Mailer extends BaseMailer
{
154
	public $messageClass = 'yiiunit\framework\mail\Message';
155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174
	public $sentMessages = array();

	public function send($message)
	{
		$this->sentMessages[] = $message;
	}
}

/**
 * Test Message class
 */
class Message extends BaseMessage
{
	public $id;
	public $encoding;

	public function setFrom($from) {}

	public function setTo($to) {}

175 176 177 178
	public function setCc($cc) {}

	public function setBcc($bcc) {}

179 180 181 182 183 184
	public function setSubject($subject) {}

	public function setText($text) {}

	public function setHtml($html) {}

185 186 187 188
	public function addText($text) {}

	public function addHtml($html) {}

189
	public function attachContentAsFile($content, $fileName, $contentType = 'application/octet-stream') {}
190 191 192 193 194

	public function __toString()
	{
		return get_class($this);
	}
195
}