MailerTest.php 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. <?php
  2. namespace Tools\Test\TestCase\Mailer;
  3. use Cake\Core\Configure;
  4. use Cake\Core\Plugin;
  5. use Cake\I18n\I18n;
  6. use Cake\Log\Log;
  7. use Cake\Mailer\TransportFactory;
  8. use Shim\TestSuite\TestCase;
  9. use TestApp\Mailer\TestMailer;
  10. use Tools\Mailer\Mailer;
  11. /**
  12. * EmailTest class
  13. */
  14. class MailerTest extends TestCase {
  15. /**
  16. * @var \TestApp\Mailer\TestMailer
  17. */
  18. protected $mailer;
  19. /**
  20. * setUp
  21. *
  22. * @return void
  23. */
  24. public function setUp(): void {
  25. parent::setUp();
  26. I18n::setLocale(I18n::getDefaultLocale());
  27. Configure::write('Config.defaultLocale', 'deu');
  28. //Mailer::setConfig('test');
  29. TransportFactory::setConfig('debug', [
  30. 'className' => 'Debug',
  31. ]);
  32. $this->mailer = new TestMailer();
  33. }
  34. /**
  35. * tearDown method
  36. *
  37. * @return void
  38. */
  39. public function tearDown(): void {
  40. parent::tearDown();
  41. Log::drop('email');
  42. Mailer::drop('test');
  43. TransportFactory::drop('debug');
  44. TransportFactory::drop('test_smtp');
  45. I18n::setLocale(I18n::getDefaultLocale());
  46. }
  47. /**
  48. * @return void
  49. */
  50. public function testSend(): void {
  51. $mailer = $this->mailer;
  52. $result = $mailer->send();
  53. $this->assertNotEmpty($result);
  54. }
  55. /**
  56. * @return void
  57. */
  58. public function testDeliver(): void {
  59. $mailer = $this->mailer;
  60. $result = $mailer->deliver('Foo Bar');
  61. $this->assertTextContains('Foo Bar', $result['message']);
  62. }
  63. /**
  64. * @return void
  65. */
  66. public function testDeliverLocaleDefault(): void {
  67. $mailer = $this->mailer;
  68. $mailer->setEmailFormat('both');
  69. $mailer->setSubject('Test me');
  70. $mailer->setViewVars(['value' => 123.45]);
  71. $mailer->viewBuilder()
  72. ->setTemplate('welcome')
  73. ->setLayout('fancy');
  74. $result = $mailer->deliver();
  75. $this->assertNotEmpty($result);
  76. $this->assertTextContains('**My price**: 123,45', $result['message']);
  77. $this->assertTextContains('<b>My price</b>: 123,45', $result['message']);
  78. }
  79. /**
  80. * @return void
  81. */
  82. public function testDeliverLocaleCustom(): void {
  83. I18n::setLocale('eng');
  84. $mailer = new TestMailer();
  85. $mailer->setLocale('deu');
  86. $mailer->setEmailFormat('both');
  87. $mailer->setSubject('Test me');
  88. $mailer->setViewVars(['value' => 123.45]);
  89. $mailer->viewBuilder()
  90. ->setTemplate('welcome')
  91. ->setLayout('fancy');
  92. $result = $mailer->deliver();
  93. $this->assertNotEmpty($result);
  94. $this->assertTextContains('**My price**: 123.45', $result['message']);
  95. $this->assertTextContains('<b>My price</b>: 123.45', $result['message']);
  96. }
  97. /**
  98. * Html email
  99. *
  100. * @return void
  101. */
  102. public function testAddEmbeddedAttachmentSend() {
  103. $file = Plugin::path('Tools') . 'tests' . DS . 'test_files' . DS . 'img' . DS . 'hotel.png';
  104. Configure::write('debug', 0);
  105. $this->mailer->setEmailFormat('both');
  106. $this->mailer->setTo(Configure::read('Config.adminEmail'));
  107. $cid = $this->mailer->addEmbeddedAttachment($file);
  108. $cid2 = $this->mailer->addEmbeddedAttachment($file);
  109. $this->assertStringContainsString('@' . env('HTTP_HOST'), $cid);
  110. $html = '<head>
  111. <meta http-equiv="content-type" content="text/html; charset=utf-8" />
  112. <meta name="author" content="ohyeah" />
  113. <title>Untitled 6</title>
  114. </head>
  115. <body>
  116. test_embedded_default äöü <img src="cid:' . $cid . '" /> end
  117. another image <img src="cid:' . $cid2 . '" /> end
  118. html-part
  119. </body>
  120. </html>';
  121. $text = trim(strip_tags($html));
  122. $this->mailer->setViewVars(compact('text', 'html'));
  123. $res = $this->mailer->send();
  124. Configure::write('debug', 2);
  125. //$this->assertEquals('', $this->mailer->getError());
  126. $this->assertTrue((bool)$res);
  127. }
  128. /**
  129. * @return void
  130. */
  131. public function testValidates() {
  132. $res = $this->mailer->validates();
  133. $this->assertFalse($res);
  134. $this->mailer->setSubject('foo');
  135. $res = $this->mailer->validates();
  136. $this->assertFalse($res);
  137. $this->mailer->setTo('some@web.de');
  138. $res = $this->mailer->validates();
  139. $this->assertTrue($res);
  140. }
  141. }