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.
		
		
		
		
		
			
		
			
				
					
					
						
							191 lines
						
					
					
						
							4.3 KiB
						
					
					
				
			
		
		
	
	
							191 lines
						
					
					
						
							4.3 KiB
						
					
					
				| <?php | |
|  | |
| namespace yiiunit\framework\mail; | |
|  | |
| use Yii; | |
| use yii\base\View; | |
| use yii\mail\BaseMailer; | |
| use yii\mail\BaseMessage; | |
| use yii\mail\ViewResolver; | |
| use yii\helpers\FileHelper; | |
| use yiiunit\TestCase; | |
|  | |
| /** | |
|  * @group email | |
|  */ | |
| class BaseMailerTest extends TestCase | |
| { | |
| 	public function setUp() | |
| 	{ | |
| 		$this->mockApplication(); | |
| 		Yii::$app->setComponent('email', $this->createTestEmailComponent()); | |
| 		$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(); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @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!'); | |
|  | |
| 		$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!'); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @depends testSetupView | |
| 	 */ | |
| 	public function testGetDefaultView() | |
| 	{ | |
| 		$mailer = new Mailer(); | |
| 		$view = $mailer->getView(); | |
| 		$this->assertTrue(is_object($view), 'Unable to get default view!'); | |
| 	} | |
|  | |
| 	public function testSetupViewResolver() | |
| 	{ | |
| 		$mailer = new Mailer(); | |
|  | |
| 		$viewResolver = new ViewResolver(); | |
| 		$mailer->setViewResolver($viewResolver); | |
| 		$this->assertEquals($viewResolver, $mailer->getViewResolver(), 'Unable to setup view resolver!'); | |
|  | |
| 		$viewResolverConfig = [ | |
| 			'viewPath' => '/test/view/path', | |
| 		]; | |
| 		$mailer->setViewResolver($viewResolverConfig); | |
| 		$viewResolver = $mailer->getViewResolver(); | |
| 		$this->assertTrue(is_object($viewResolver), 'Unable to setup view resolver via config!'); | |
| 		$this->assertEquals($viewResolverConfig['viewPath'], $viewResolver->viewPath, 'Unable to configure view resolver via config array!'); | |
| 	} | |
|  | |
| 	/** | |
| 	 * @depends testSetupViewResolver | |
| 	 */ | |
| 	public function testGetDefaultViewResolver() | |
| 	{ | |
| 		$mailer = new Mailer(); | |
| 		$viewResolver = $mailer->getViewResolver(); | |
| 		$this->assertTrue(is_object($viewResolver), 'Unable to get default view resolver!'); | |
| 	} | |
|  | |
| 	public function testDefaultMessageConfig() | |
| 	{ | |
| 		$defaultMessageConfig = array( | |
| 			'id' => 'test-id', | |
| 			'encoding' => 'test-encoding', | |
| 		); | |
| 		Yii::$app->getComponent('email')->setDefaultMessageConfig($defaultMessageConfig); | |
|  | |
| 		$message = new Message(); | |
|  | |
| 		foreach ($defaultMessageConfig as $name => $value) { | |
| 			$this->assertEquals($value, $message->$name); | |
| 		} | |
| 	} | |
|  | |
| 	/** | |
| 	 * @depends testGetDefaultView | |
| 	 * @depends testGetDefaultViewResolver | |
| 	 */ | |
| 	public function testRender() | |
| 	{ | |
| 		$mailer = new Mailer(); | |
|  | |
| 		$filePath = $this->getTestFilePath(); | |
| 		$mailer->getViewResolver()->viewPath = $filePath; | |
|  | |
| 		$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); | |
| 	} | |
| } | |
|  | |
| /** | |
|  * Test Mailer class | |
|  */ | |
| class Mailer extends BaseMailer | |
| { | |
| 	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) {} | |
|  | |
| 	public function setCc($cc) {} | |
|  | |
| 	public function setBcc($bcc) {} | |
|  | |
| 	public function setSubject($subject) {} | |
|  | |
| 	public function setText($text) {} | |
|  | |
| 	public function setHtml($html) {} | |
|  | |
| 	public function addText($text) {} | |
|  | |
| 	public function addHtml($html) {} | |
|  | |
| 	public function createAttachment($content, $fileName, $contentType = 'application/octet-stream') {} | |
| } |