MailerTest.php 3.8 KB

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