pictcode / lib / Cake / Test / Case / Controller / Component / EmailComponentTest.php @ 0b1b8047
履歴 | 表示 | アノテート | ダウンロード (31.316 KB)
1 | 635eef61 | spyder1211 | <?php
|
---|---|---|---|
2 | /**
|
||
3 | * EmailComponentTest file
|
||
4 | *
|
||
5 | * Series of tests for email component.
|
||
6 | *
|
||
7 | * CakePHP(tm) Tests <http://book.cakephp.org/2.0/en/development/testing.html>
|
||
8 | * Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
9 | *
|
||
10 | * Licensed under The MIT License
|
||
11 | * For full copyright and license information, please see the LICENSE.txt
|
||
12 | * Redistributions of files must retain the above copyright notice
|
||
13 | *
|
||
14 | * @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
|
||
15 | * @link http://book.cakephp.org/2.0/en/development/testing.html CakePHP(tm) Tests
|
||
16 | * @package Cake.Test.Case.Controller.Component
|
||
17 | * @since CakePHP(tm) v 1.2.0.5347
|
||
18 | * @license http://www.opensource.org/licenses/mit-license.php MIT License
|
||
19 | */
|
||
20 | |||
21 | App::uses('Controller', 'Controller'); |
||
22 | App::uses('EmailComponent', 'Controller/Component'); |
||
23 | App::uses('AbstractTransport', 'Network/Email'); |
||
24 | |||
25 | /**
|
||
26 | * EmailTestComponent class
|
||
27 | *
|
||
28 | * @package Cake.Test.Case.Controller.Component
|
||
29 | */
|
||
30 | class EmailTestComponent extends EmailComponent { |
||
31 | |||
32 | /**
|
||
33 | * Convenience method for testing.
|
||
34 | *
|
||
35 | * @return string
|
||
36 | */
|
||
37 | public function strip($content, $message = false) { |
||
38 | return parent::_strip($content, $message); |
||
39 | } |
||
40 | |||
41 | } |
||
42 | |||
43 | /**
|
||
44 | * DebugCompTransport class
|
||
45 | *
|
||
46 | * @package Cake.Test.Case.Controller.Component
|
||
47 | */
|
||
48 | class DebugCompTransport extends AbstractTransport { |
||
49 | |||
50 | /**
|
||
51 | * Last email
|
||
52 | *
|
||
53 | * @var string
|
||
54 | */
|
||
55 | public static $lastEmail = null; |
||
56 | |||
57 | /**
|
||
58 | * Send mail
|
||
59 | *
|
||
60 | * @params object $email CakeEmail
|
||
61 | * @return bool
|
||
62 | */
|
||
63 | public function send(CakeEmail $email) { |
||
64 | $email->addHeaders(array('Date' => EmailComponentTest::$sentDate)); |
||
65 | $headers = $email->getHeaders(array_fill_keys(array('from', 'replyTo', 'readReceipt', 'returnPath', 'to', 'cc', 'bcc', 'subject'), true)); |
||
66 | $to = $headers['To']; |
||
67 | $subject = $headers['Subject']; |
||
68 | unset($headers['To'], $headers['Subject']); |
||
69 | |||
70 | $message = implode("\n", $email->message()); |
||
71 | |||
72 | $last = '<pre>'; |
||
73 | $last .= sprintf("%s %s\n", 'To:', $to); |
||
74 | $last .= sprintf("%s %s\n", 'From:', $headers['From']); |
||
75 | $last .= sprintf("%s %s\n", 'Subject:', $subject); |
||
76 | $last .= sprintf("%s\n\n%s", 'Header:', $this->_headersToString($headers, "\n")); |
||
77 | $last .= sprintf("%s\n\n%s", 'Message:', $message); |
||
78 | $last .= '</pre>'; |
||
79 | |||
80 | static::$lastEmail = $last; |
||
81 | |||
82 | return true; |
||
83 | } |
||
84 | |||
85 | } |
||
86 | |||
87 | /**
|
||
88 | * EmailTestController class
|
||
89 | *
|
||
90 | * @package Cake.Test.Case.Controller.Component
|
||
91 | */
|
||
92 | class EmailTestController extends Controller { |
||
93 | |||
94 | /**
|
||
95 | * uses property
|
||
96 | *
|
||
97 | * @var mixed
|
||
98 | */
|
||
99 | public $uses = null; |
||
100 | |||
101 | /**
|
||
102 | * components property
|
||
103 | *
|
||
104 | * @var array
|
||
105 | */
|
||
106 | public $components = array('Session', 'EmailTest'); |
||
107 | |||
108 | } |
||
109 | |||
110 | /**
|
||
111 | * EmailTest class
|
||
112 | *
|
||
113 | * @package Cake.Test.Case.Controller.Component
|
||
114 | */
|
||
115 | class EmailComponentTest extends CakeTestCase { |
||
116 | |||
117 | /**
|
||
118 | * Controller property
|
||
119 | *
|
||
120 | * @var EmailTestController
|
||
121 | */
|
||
122 | public $Controller; |
||
123 | |||
124 | /**
|
||
125 | * name property
|
||
126 | *
|
||
127 | * @var string
|
||
128 | */
|
||
129 | public $name = 'Email'; |
||
130 | |||
131 | /**
|
||
132 | * sentDate
|
||
133 | *
|
||
134 | * @var string
|
||
135 | */
|
||
136 | public static $sentDate = null; |
||
137 | |||
138 | /**
|
||
139 | * setUp method
|
||
140 | *
|
||
141 | * @return void
|
||
142 | */
|
||
143 | public function setUp() { |
||
144 | parent::setUp();
|
||
145 | |||
146 | Configure::write('App.encoding', 'UTF-8'); |
||
147 | |||
148 | $this->Controller = new EmailTestController(); |
||
149 | $this->Controller->Components->init($this->Controller); |
||
150 | $this->Controller->EmailTest->initialize($this->Controller, array()); |
||
151 | |||
152 | static::$sentDate = date(DATE_RFC2822); |
||
153 | |||
154 | App::build(array( |
||
155 | 'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS) |
||
156 | )); |
||
157 | } |
||
158 | |||
159 | /**
|
||
160 | * testSendFormats method
|
||
161 | *
|
||
162 | * @return void
|
||
163 | */
|
||
164 | public function testSendFormats() { |
||
165 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
166 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
167 | $this->Controller->EmailTest->subject = 'Cake SMTP test'; |
||
168 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
169 | $this->Controller->EmailTest->template = null; |
||
170 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
171 | $this->Controller->EmailTest->messageId = false; |
||
172 | |||
173 | $date = static::$sentDate; |
||
174 | $message = <<<MSGBLOC |
||
175 | <pre>To: postmaster@example.com
|
||
176 | From: noreply@example.com
|
||
177 | Subject: Cake SMTP test
|
||
178 | Header:
|
||
179 |
|
||
180 | From: noreply@example.com
|
||
181 | Reply-To: noreply@example.com
|
||
182 | X-Mailer: CakePHP Email Component
|
||
183 | Date: $date
|
||
184 | MIME-Version: 1.0
|
||
185 | Content-Type: {CONTENTTYPE}
|
||
186 | Content-Transfer-Encoding: 8bitMessage:
|
||
187 |
|
||
188 | This is the body of the message
|
||
189 |
|
||
190 | </pre>
|
||
191 | MSGBLOC;
|
||
192 | |||
193 | $this->Controller->EmailTest->sendAs = 'text'; |
||
194 | $expected = str_replace('{CONTENTTYPE}', 'text/plain; charset=UTF-8', $message); |
||
195 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
196 | $this->assertTextEquals($expected, DebugCompTransport::$lastEmail); |
||
197 | |||
198 | $this->Controller->EmailTest->sendAs = 'html'; |
||
199 | $expected = str_replace('{CONTENTTYPE}', 'text/html; charset=UTF-8', $message); |
||
200 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
201 | $this->assertTextEquals($expected, DebugCompTransport::$lastEmail); |
||
202 | } |
||
203 | |||
204 | /**
|
||
205 | * testTemplates method
|
||
206 | *
|
||
207 | * @return void
|
||
208 | */
|
||
209 | public function testTemplates() { |
||
210 | ClassRegistry::flush(); |
||
211 | |||
212 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
213 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
214 | $this->Controller->EmailTest->subject = 'Cake SMTP test'; |
||
215 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
216 | |||
217 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
218 | $this->Controller->EmailTest->messageId = false; |
||
219 | |||
220 | $date = static::$sentDate; |
||
221 | $header = <<<HEADBLOC |
||
222 | To: postmaster@example.com
|
||
223 | From: noreply@example.com
|
||
224 | Subject: Cake SMTP test
|
||
225 | Header:
|
||
226 |
|
||
227 | From: noreply@example.com
|
||
228 | Reply-To: noreply@example.com
|
||
229 | X-Mailer: CakePHP Email Component
|
||
230 | Date: $date
|
||
231 | MIME-Version: 1.0
|
||
232 | Content-Type: {CONTENTTYPE}
|
||
233 | Content-Transfer-Encoding: 8bitMessage:
|
||
234 |
|
||
235 |
|
||
236 | HEADBLOC;
|
||
237 | |||
238 | $this->Controller->EmailTest->layout = 'default'; |
||
239 | $this->Controller->EmailTest->template = 'default'; |
||
240 | $this->Controller->set('title_for_layout', 'Email Test'); |
||
241 | |||
242 | $text = <<<TEXTBLOC |
||
243 |
|
||
244 | This is the body of the message
|
||
245 |
|
||
246 | This email was sent using the CakePHP Framework, http://cakephp.org.
|
||
247 | TEXTBLOC;
|
||
248 | |||
249 | $html = <<<HTMLBLOC |
||
250 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||
251 |
|
||
252 | <html>
|
||
253 | <head>
|
||
254 | <title>Email Test</title>
|
||
255 | </head>
|
||
256 |
|
||
257 | <body>
|
||
258 | <p> This is the body of the message</p><p> </p>
|
||
259 | <p>This email was sent using the <a href="http://cakephp.org">CakePHP Framework</a></p>
|
||
260 | </body>
|
||
261 | </html>
|
||
262 | HTMLBLOC;
|
||
263 | |||
264 | $this->Controller->EmailTest->sendAs = 'text'; |
||
265 | $expected = '<pre>' . str_replace('{CONTENTTYPE}', 'text/plain; charset=UTF-8', $header) . $text . "\n" . '</pre>'; |
||
266 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
267 | $this->assertTextEquals($expected, DebugCompTransport::$lastEmail); |
||
268 | |||
269 | $this->Controller->EmailTest->sendAs = 'html'; |
||
270 | $expected = '<pre>' . str_replace('{CONTENTTYPE}', 'text/html; charset=UTF-8', $header) . $html . "\n" . '</pre>'; |
||
271 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
272 | $this->assertTextEquals($expected, DebugCompTransport::$lastEmail); |
||
273 | |||
274 | $this->Controller->EmailTest->sendAs = 'both'; |
||
275 | $expected = str_replace('{CONTENTTYPE}', 'multipart/alternative; boundary="{boundary}"', $header); |
||
276 | $expected .= "--{boundary}\n" . |
||
277 | 'Content-Type: text/plain; charset=UTF-8' . "\n" . |
||
278 | 'Content-Transfer-Encoding: 8bit' . "\n\n" . |
||
279 | $text .
|
||
280 | "\n\n" .
|
||
281 | '--{boundary}' . "\n" . |
||
282 | 'Content-Type: text/html; charset=UTF-8' . "\n" . |
||
283 | 'Content-Transfer-Encoding: 8bit' . "\n\n" . |
||
284 | $html .
|
||
285 | "\n\n\n" .
|
||
286 | '--{boundary}--' . "\n"; |
||
287 | |||
288 | $expected = '<pre>' . $expected . '</pre>'; |
||
289 | |||
290 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
291 | $this->assertTextEquals(
|
||
292 | $expected,
|
||
293 | preg_replace('/[a-z0-9]{32}/i', '{boundary}', DebugCompTransport::$lastEmail) |
||
294 | ); |
||
295 | |||
296 | $html = <<<HTMLBLOC |
||
297 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||
298 |
|
||
299 | <html>
|
||
300 | <head>
|
||
301 | <title>Email Test</title>
|
||
302 | </head>
|
||
303 |
|
||
304 | <body>
|
||
305 | <p> This is the body of the message</p><p> </p>
|
||
306 | <p>This email was sent using the CakePHP Framework</p>
|
||
307 | </body>
|
||
308 | </html>
|
||
309 |
|
||
310 | HTMLBLOC;
|
||
311 | |||
312 | $this->Controller->EmailTest->sendAs = 'html'; |
||
313 | $expected = '<pre>' . str_replace('{CONTENTTYPE}', 'text/html; charset=UTF-8', $header) . $html . '</pre>'; |
||
314 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message', 'default', 'thin')); |
||
315 | $this->assertTextEquals($expected, DebugCompTransport::$lastEmail); |
||
316 | } |
||
317 | |||
318 | /**
|
||
319 | * test that elements used in email templates get helpers.
|
||
320 | *
|
||
321 | * @return void
|
||
322 | */
|
||
323 | public function testTemplateNestedElements() { |
||
324 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
325 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
326 | $this->Controller->EmailTest->subject = 'Cake SMTP test'; |
||
327 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
328 | |||
329 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
330 | $this->Controller->EmailTest->messageId = false; |
||
331 | $this->Controller->EmailTest->layout = 'default'; |
||
332 | $this->Controller->EmailTest->template = 'nested_element'; |
||
333 | $this->Controller->EmailTest->sendAs = 'html'; |
||
334 | $this->Controller->helpers = array('Html'); |
||
335 | |||
336 | $this->Controller->EmailTest->send(); |
||
337 | $result = DebugCompTransport::$lastEmail; |
||
338 | $this->assertRegExp('/Test/', $result); |
||
339 | $this->assertRegExp('/http\:\/\/example\.com/', $result); |
||
340 | } |
||
341 | |||
342 | /**
|
||
343 | * test send with null properties
|
||
344 | *
|
||
345 | * @return void
|
||
346 | */
|
||
347 | public function testSendNullProperties() { |
||
348 | $this->Controller->EmailTest->to = 'test@example.com'; |
||
349 | $this->Controller->EmailTest->from = 'test@example.com'; |
||
350 | $this->Controller->EmailTest->subject = null; |
||
351 | $this->Controller->EmailTest->replyTo = null; |
||
352 | $this->Controller->EmailTest->messageId = null; |
||
353 | $this->Controller->EmailTest->template = null; |
||
354 | |||
355 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
356 | $this->assertTrue($this->Controller->EmailTest->send(null)); |
||
357 | $result = DebugCompTransport::$lastEmail; |
||
358 | |||
359 | $this->assertRegExp('/To: test@example.com\n/', $result); |
||
360 | $this->assertRegExp('/Subject: \n/', $result); |
||
361 | $this->assertRegExp('/From: test@example.com\n/', $result); |
||
362 | $this->assertRegExp('/Date: ' . preg_quote(static::$sentDate) . '\n/', $result); |
||
363 | $this->assertRegExp('/X-Mailer: CakePHP Email Component\n/', $result); |
||
364 | $this->assertRegExp('/Content-Type: text\/plain; charset=UTF-8\n/', $result); |
||
365 | $this->assertRegExp('/Content-Transfer-Encoding: 8bitMessage:\n/', $result); |
||
366 | } |
||
367 | |||
368 | /**
|
||
369 | * testSendDebug method
|
||
370 | *
|
||
371 | * @return void
|
||
372 | */
|
||
373 | public function testSendDebug() { |
||
374 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
375 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
376 | $this->Controller->EmailTest->cc = 'cc@example.com'; |
||
377 | $this->Controller->EmailTest->bcc = 'bcc@example.com'; |
||
378 | $this->Controller->EmailTest->subject = 'Cake Debug Test'; |
||
379 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
380 | $this->Controller->EmailTest->template = null; |
||
381 | |||
382 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
383 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
384 | $result = DebugCompTransport::$lastEmail; |
||
385 | |||
386 | $this->assertRegExp('/To: postmaster@example.com\n/', $result); |
||
387 | $this->assertRegExp('/Subject: Cake Debug Test\n/', $result); |
||
388 | $this->assertRegExp('/Reply-To: noreply@example.com\n/', $result); |
||
389 | $this->assertRegExp('/From: noreply@example.com\n/', $result); |
||
390 | $this->assertRegExp('/Cc: cc@example.com\n/', $result); |
||
391 | $this->assertRegExp('/Bcc: bcc@example.com\n/', $result); |
||
392 | $this->assertRegExp('/Date: ' . preg_quote(static::$sentDate) . '\n/', $result); |
||
393 | $this->assertRegExp('/X-Mailer: CakePHP Email Component\n/', $result); |
||
394 | $this->assertRegExp('/Content-Type: text\/plain; charset=UTF-8\n/', $result); |
||
395 | $this->assertRegExp('/Content-Transfer-Encoding: 8bitMessage:\n/', $result); |
||
396 | $this->assertRegExp('/This is the body of the message/', $result); |
||
397 | } |
||
398 | |||
399 | /**
|
||
400 | * test send with delivery = debug and not using sessions.
|
||
401 | *
|
||
402 | * @return void
|
||
403 | */
|
||
404 | public function testSendDebugWithNoSessions() { |
||
405 | $session = $this->Controller->Session; |
||
406 | unset($this->Controller->Session); |
||
407 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
408 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
409 | $this->Controller->EmailTest->subject = 'Cake Debug Test'; |
||
410 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
411 | $this->Controller->EmailTest->template = null; |
||
412 | |||
413 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
414 | $this->Controller->EmailTest->send('This is the body of the message'); |
||
415 | $result = DebugCompTransport::$lastEmail; |
||
416 | |||
417 | $this->assertRegExp('/To: postmaster@example.com\n/', $result); |
||
418 | $this->assertRegExp('/Subject: Cake Debug Test\n/', $result); |
||
419 | $this->assertRegExp('/Reply-To: noreply@example.com\n/', $result); |
||
420 | $this->assertRegExp('/From: noreply@example.com\n/', $result); |
||
421 | $this->assertRegExp('/Date: ' . preg_quote(static::$sentDate) . '\n/', $result); |
||
422 | $this->assertRegExp('/X-Mailer: CakePHP Email Component\n/', $result); |
||
423 | $this->assertRegExp('/Content-Type: text\/plain; charset=UTF-8\n/', $result); |
||
424 | $this->assertRegExp('/Content-Transfer-Encoding: 8bitMessage:\n/', $result); |
||
425 | $this->assertRegExp('/This is the body of the message/', $result); |
||
426 | $this->Controller->Session = $session; |
||
427 | } |
||
428 | |||
429 | /**
|
||
430 | * testMessageRetrievalWithoutTemplate method
|
||
431 | *
|
||
432 | * @return void
|
||
433 | */
|
||
434 | public function testMessageRetrievalWithoutTemplate() { |
||
435 | App::build(array( |
||
436 | 'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS) |
||
437 | )); |
||
438 | |||
439 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
440 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
441 | $this->Controller->EmailTest->subject = 'Cake Debug Test'; |
||
442 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
443 | $this->Controller->EmailTest->layout = 'default'; |
||
444 | $this->Controller->EmailTest->template = null; |
||
445 | |||
446 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
447 | |||
448 | $text = $html = "This is the body of the message\n"; |
||
449 | |||
450 | $this->Controller->EmailTest->sendAs = 'both'; |
||
451 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
452 | $this->assertTextEquals($this->Controller->EmailTest->textMessage, $text); |
||
453 | $this->assertTextEquals($this->Controller->EmailTest->htmlMessage, $html); |
||
454 | |||
455 | $this->Controller->EmailTest->sendAs = 'text'; |
||
456 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
457 | $this->assertTextEquals($this->Controller->EmailTest->textMessage, $text); |
||
458 | $this->assertNull($this->Controller->EmailTest->htmlMessage); |
||
459 | |||
460 | $this->Controller->EmailTest->sendAs = 'html'; |
||
461 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
462 | $this->assertNull($this->Controller->EmailTest->textMessage); |
||
463 | $this->assertTextEquals($this->Controller->EmailTest->htmlMessage, $html); |
||
464 | } |
||
465 | |||
466 | /**
|
||
467 | * testMessageRetrievalWithTemplate method
|
||
468 | *
|
||
469 | * @return void
|
||
470 | */
|
||
471 | public function testMessageRetrievalWithTemplate() { |
||
472 | App::build(array( |
||
473 | 'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS) |
||
474 | )); |
||
475 | |||
476 | $this->Controller->set('value', 22091985); |
||
477 | $this->Controller->set('title_for_layout', 'EmailTest'); |
||
478 | |||
479 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
480 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
481 | $this->Controller->EmailTest->subject = 'Cake Debug Test'; |
||
482 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
483 | $this->Controller->EmailTest->layout = 'default'; |
||
484 | $this->Controller->EmailTest->template = 'custom'; |
||
485 | |||
486 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
487 | |||
488 | $text = <<<TEXTBLOC |
||
489 |
|
||
490 | Here is your value: 22091985
|
||
491 | This email was sent using the CakePHP Framework, http://cakephp.org.
|
||
492 | TEXTBLOC;
|
||
493 | |||
494 | $html = <<<HTMLBLOC |
||
495 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
|
||
496 |
|
||
497 | <html>
|
||
498 | <head>
|
||
499 | <title>EmailTest</title>
|
||
500 | </head>
|
||
501 |
|
||
502 | <body>
|
||
503 | <p>Here is your value: <b>22091985</b></p>
|
||
504 |
|
||
505 | <p>This email was sent using the <a href="http://cakephp.org">CakePHP Framework</a></p>
|
||
506 | </body>
|
||
507 | </html>
|
||
508 | HTMLBLOC;
|
||
509 | |||
510 | $this->Controller->EmailTest->sendAs = 'both'; |
||
511 | $this->assertTrue($this->Controller->EmailTest->send()); |
||
512 | $this->assertTextEquals($this->Controller->EmailTest->textMessage, $text); |
||
513 | $this->assertTextEquals($this->Controller->EmailTest->htmlMessage, $html); |
||
514 | |||
515 | $this->Controller->EmailTest->sendAs = 'text'; |
||
516 | $this->assertTrue($this->Controller->EmailTest->send()); |
||
517 | $this->assertTextEquals($this->Controller->EmailTest->textMessage, $text); |
||
518 | $this->assertNull($this->Controller->EmailTest->htmlMessage); |
||
519 | |||
520 | $this->Controller->EmailTest->sendAs = 'html'; |
||
521 | $this->assertTrue($this->Controller->EmailTest->send()); |
||
522 | $this->assertNull($this->Controller->EmailTest->textMessage); |
||
523 | $this->assertTextEquals($this->Controller->EmailTest->htmlMessage, $html); |
||
524 | } |
||
525 | |||
526 | /**
|
||
527 | * testMessageRetrievalWithHelper method
|
||
528 | *
|
||
529 | * @return void
|
||
530 | */
|
||
531 | public function testMessageRetrievalWithHelper() { |
||
532 | App::build(array( |
||
533 | 'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS) |
||
534 | )); |
||
535 | |||
536 | $timestamp = time(); |
||
537 | $this->Controller->set('time', $timestamp); |
||
538 | $this->Controller->set('title_for_layout', 'EmailTest'); |
||
539 | $this->Controller->helpers = array('Time'); |
||
540 | |||
541 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
542 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
543 | $this->Controller->EmailTest->subject = 'Cake Debug Test'; |
||
544 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
545 | $this->Controller->EmailTest->layout = 'default'; |
||
546 | $this->Controller->EmailTest->template = 'custom_helper'; |
||
547 | $this->Controller->EmailTest->sendAs = 'text'; |
||
548 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
549 | |||
550 | $this->assertTrue($this->Controller->EmailTest->send()); |
||
551 | $this->assertTrue((bool)strpos($this->Controller->EmailTest->textMessage, 'Right now: ' . date('Y-m-d\TH:i:s\Z', $timestamp))); |
||
552 | } |
||
553 | |||
554 | /**
|
||
555 | * testContentArray method
|
||
556 | *
|
||
557 | * @return void
|
||
558 | */
|
||
559 | public function testSendContentArray() { |
||
560 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
561 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
562 | $this->Controller->EmailTest->subject = 'Cake Debug Test'; |
||
563 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
564 | $this->Controller->EmailTest->template = null; |
||
565 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
566 | |||
567 | $content = array('First line', 'Second line', 'Third line'); |
||
568 | $this->assertTrue($this->Controller->EmailTest->send($content)); |
||
569 | $result = DebugCompTransport::$lastEmail; |
||
570 | |||
571 | $this->assertRegExp('/To: postmaster@example.com\n/', $result); |
||
572 | $this->assertRegExp('/Subject: Cake Debug Test\n/', $result); |
||
573 | $this->assertRegExp('/Reply-To: noreply@example.com\n/', $result); |
||
574 | $this->assertRegExp('/From: noreply@example.com\n/', $result); |
||
575 | $this->assertRegExp('/X-Mailer: CakePHP Email Component\n/', $result); |
||
576 | $this->assertRegExp('/Content-Type: text\/plain; charset=UTF-8\n/', $result); |
||
577 | $this->assertRegExp('/Content-Transfer-Encoding: 8bitMessage:\n/', $result); |
||
578 | $this->assertRegExp('/First line\n/', $result); |
||
579 | $this->assertRegExp('/Second line\n/', $result); |
||
580 | $this->assertRegExp('/Third line\n/', $result); |
||
581 | } |
||
582 | |||
583 | /**
|
||
584 | * test setting a custom date.
|
||
585 | *
|
||
586 | * @return void
|
||
587 | */
|
||
588 | public function testDateProperty() { |
||
589 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
590 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
591 | $this->Controller->EmailTest->subject = 'Cake Debug Test'; |
||
592 | $this->Controller->EmailTest->date = static::$sentDate = 'Today!'; |
||
593 | $this->Controller->EmailTest->template = null; |
||
594 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
595 | |||
596 | $this->assertTrue($this->Controller->EmailTest->send('test message')); |
||
597 | $result = DebugCompTransport::$lastEmail; |
||
598 | $this->assertRegExp('/Date: Today!\n/', $result); |
||
599 | } |
||
600 | |||
601 | /**
|
||
602 | * testContentStripping method
|
||
603 | *
|
||
604 | * @return void
|
||
605 | */
|
||
606 | public function testContentStripping() { |
||
607 | $content = "Previous content\n--alt-\nContent-TypeContent-Type:: text/html; charsetcharset==utf-8\nContent-Transfer-Encoding: 8bit"; |
||
608 | $content .= "\n\n<p>My own html content</p>"; |
||
609 | |||
610 | $result = $this->Controller->EmailTest->strip($content, true); |
||
611 | $expected = "Previous content\n--alt-\n text/html; utf-8\n 8bit\n\n<p>My own html content</p>"; |
||
612 | $this->assertEquals($expected, $result); |
||
613 | |||
614 | $content = '<p>Some HTML content with an <a href="mailto:test@example.com">email link</a>'; |
||
615 | $result = $this->Controller->EmailTest->strip($content, true); |
||
616 | $expected = $content; |
||
617 | $this->assertEquals($expected, $result); |
||
618 | |||
619 | $content = '<p>Some HTML content with an '; |
||
620 | $content .= '<a href="mailto:test@example.com,test2@example.com">email link</a>'; |
||
621 | $result = $this->Controller->EmailTest->strip($content, true); |
||
622 | $expected = $content; |
||
623 | $this->assertEquals($expected, $result); |
||
624 | } |
||
625 | |||
626 | /**
|
||
627 | * test that the _encode() will set mb_internal_encoding.
|
||
628 | *
|
||
629 | * @return void
|
||
630 | */
|
||
631 | public function testEncodeSettingInternalCharset() { |
||
632 | $this->skipIf(!function_exists('mb_internal_encoding'), 'Missing mb_* functions, cannot run test.'); |
||
633 | |||
634 | $restore = mb_internal_encoding();
|
||
635 | mb_internal_encoding('ISO-8859-1');
|
||
636 | |||
637 | $this->Controller->charset = 'UTF-8'; |
||
638 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
639 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
640 | $this->Controller->EmailTest->subject = 'هذه رسالة بعنوان طويل مرسل للمستلم'; |
||
641 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
642 | $this->Controller->EmailTest->template = null; |
||
643 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
644 | |||
645 | $this->Controller->EmailTest->sendAs = 'text'; |
||
646 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
647 | |||
648 | $subject = '=?UTF-8?B?2YfYsNmHINix2LPYp9mE2Kkg2KjYudmG2YjYp9mGINi32YjZitmEINmF2LE=?=' . "\r\n" . ' =?UTF-8?B?2LPZhCDZhNmE2YXYs9iq2YTZhQ==?='; |
||
649 | |||
650 | preg_match('/Subject: (.*)Header:/s', DebugCompTransport::$lastEmail, $matches); |
||
651 | $this->assertEquals(trim($matches[1]), $subject); |
||
652 | |||
653 | $result = mb_internal_encoding();
|
||
654 | $this->assertEquals('ISO-8859-1', $result); |
||
655 | |||
656 | mb_internal_encoding($restore);
|
||
657 | } |
||
658 | |||
659 | /**
|
||
660 | * testMultibyte method
|
||
661 | *
|
||
662 | * @return void
|
||
663 | */
|
||
664 | public function testMultibyte() { |
||
665 | $this->Controller->charset = 'UTF-8'; |
||
666 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
667 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
668 | $this->Controller->EmailTest->subject = 'هذه رسالة بعنوان طويل مرسل للمستلم'; |
||
669 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
670 | $this->Controller->EmailTest->template = null; |
||
671 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
672 | |||
673 | $subject = '=?UTF-8?B?2YfYsNmHINix2LPYp9mE2Kkg2KjYudmG2YjYp9mGINi32YjZitmEINmF2LE=?=' . "\r\n" . ' =?UTF-8?B?2LPZhCDZhNmE2YXYs9iq2YTZhQ==?='; |
||
674 | |||
675 | $this->Controller->EmailTest->sendAs = 'text'; |
||
676 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
677 | preg_match('/Subject: (.*)Header:/s', DebugCompTransport::$lastEmail, $matches); |
||
678 | $this->assertEquals(trim($matches[1]), $subject); |
||
679 | |||
680 | $this->Controller->EmailTest->sendAs = 'html'; |
||
681 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
682 | preg_match('/Subject: (.*)Header:/s', DebugCompTransport::$lastEmail, $matches); |
||
683 | $this->assertEquals(trim($matches[1]), $subject); |
||
684 | |||
685 | $this->Controller->EmailTest->sendAs = 'both'; |
||
686 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
687 | preg_match('/Subject: (.*)Header:/s', DebugCompTransport::$lastEmail, $matches); |
||
688 | $this->assertEquals(trim($matches[1]), $subject); |
||
689 | } |
||
690 | |||
691 | /**
|
||
692 | * undocumented function
|
||
693 | *
|
||
694 | * @return void
|
||
695 | */
|
||
696 | public function testSendWithAttachments() { |
||
697 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
698 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
699 | $this->Controller->EmailTest->subject = 'Attachment Test'; |
||
700 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
701 | $this->Controller->EmailTest->template = null; |
||
702 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
703 | $this->Controller->EmailTest->attachments = array( |
||
704 | __FILE__,
|
||
705 | 'some-name.php' => __FILE__ |
||
706 | ); |
||
707 | $body = '<p>This is the body of the message</p>'; |
||
708 | |||
709 | $this->Controller->EmailTest->sendAs = 'text'; |
||
710 | $this->assertTrue($this->Controller->EmailTest->send($body)); |
||
711 | $msg = DebugCompTransport::$lastEmail; |
||
712 | $this->assertRegExp('/' . preg_quote('Content-Disposition: attachment; filename="EmailComponentTest.php"') . '/', $msg); |
||
713 | $this->assertRegExp('/' . preg_quote('Content-Disposition: attachment; filename="some-name.php"') . '/', $msg); |
||
714 | } |
||
715 | |||
716 | /**
|
||
717 | * testSendAsIsNotIgnoredIfAttachmentsPresent method
|
||
718 | *
|
||
719 | * @return void
|
||
720 | */
|
||
721 | public function testSendAsIsNotIgnoredIfAttachmentsPresent() { |
||
722 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
723 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
724 | $this->Controller->EmailTest->subject = 'Attachment Test'; |
||
725 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
726 | $this->Controller->EmailTest->template = null; |
||
727 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
728 | $this->Controller->EmailTest->attachments = array(__FILE__); |
||
729 | $body = '<p>This is the body of the message</p>'; |
||
730 | |||
731 | $this->Controller->EmailTest->sendAs = 'html'; |
||
732 | $this->assertTrue($this->Controller->EmailTest->send($body)); |
||
733 | $msg = DebugCompTransport::$lastEmail; |
||
734 | $this->assertNotRegExp('/text\/plain/', $msg); |
||
735 | $this->assertRegExp('/text\/html/', $msg); |
||
736 | |||
737 | $this->Controller->EmailTest->sendAs = 'text'; |
||
738 | $this->assertTrue($this->Controller->EmailTest->send($body)); |
||
739 | $msg = DebugCompTransport::$lastEmail; |
||
740 | $this->assertRegExp('/text\/plain/', $msg); |
||
741 | $this->assertNotRegExp('/text\/html/', $msg); |
||
742 | |||
743 | $this->Controller->EmailTest->sendAs = 'both'; |
||
744 | $this->assertTrue($this->Controller->EmailTest->send($body)); |
||
745 | $msg = DebugCompTransport::$lastEmail; |
||
746 | |||
747 | $this->assertRegExp('/text\/plain/', $msg); |
||
748 | $this->assertRegExp('/text\/html/', $msg); |
||
749 | $this->assertRegExp('/multipart\/alternative/', $msg); |
||
750 | } |
||
751 | |||
752 | /**
|
||
753 | * testNoDoubleNewlinesInHeaders function
|
||
754 | *
|
||
755 | * @return void
|
||
756 | */
|
||
757 | public function testNoDoubleNewlinesInHeaders() { |
||
758 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
759 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
760 | $this->Controller->EmailTest->subject = 'Attachment Test'; |
||
761 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
762 | $this->Controller->EmailTest->template = null; |
||
763 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
764 | $body = '<p>This is the body of the message</p>'; |
||
765 | |||
766 | $this->Controller->EmailTest->sendAs = 'both'; |
||
767 | $this->assertTrue($this->Controller->EmailTest->send($body)); |
||
768 | $msg = DebugCompTransport::$lastEmail; |
||
769 | |||
770 | $this->assertNotRegExp('/\n\nContent-Transfer-Encoding/', $msg); |
||
771 | $this->assertRegExp('/\nContent-Transfer-Encoding/', $msg); |
||
772 | } |
||
773 | |||
774 | /**
|
||
775 | * testReset method
|
||
776 | *
|
||
777 | * @return void
|
||
778 | */
|
||
779 | public function testReset() { |
||
780 | $this->Controller->EmailTest->template = 'default'; |
||
781 | $this->Controller->EmailTest->to = 'test.recipient@example.com'; |
||
782 | $this->Controller->EmailTest->from = 'test.sender@example.com'; |
||
783 | $this->Controller->EmailTest->replyTo = 'test.replyto@example.com'; |
||
784 | $this->Controller->EmailTest->return = 'test.return@example.com'; |
||
785 | $this->Controller->EmailTest->cc = array('cc1@example.com', 'cc2@example.com'); |
||
786 | $this->Controller->EmailTest->bcc = array('bcc1@example.com', 'bcc2@example.com'); |
||
787 | $this->Controller->EmailTest->date = 'Today!'; |
||
788 | $this->Controller->EmailTest->subject = 'Test subject'; |
||
789 | $this->Controller->EmailTest->additionalParams = 'X-additional-header'; |
||
790 | $this->Controller->EmailTest->delivery = 'smtp'; |
||
791 | $this->Controller->EmailTest->smtpOptions['host'] = 'blah'; |
||
792 | $this->Controller->EmailTest->smtpOptions['timeout'] = 0.2; |
||
793 | $this->Controller->EmailTest->attachments = array('attachment1', 'attachment2'); |
||
794 | $this->Controller->EmailTest->textMessage = 'This is the body of the message'; |
||
795 | $this->Controller->EmailTest->htmlMessage = 'This is the body of the message'; |
||
796 | $this->Controller->EmailTest->messageId = false; |
||
797 | |||
798 | try {
|
||
799 | $this->Controller->EmailTest->send('Should not work'); |
||
800 | $this->fail('No exception'); |
||
801 | } catch (SocketException $e) { |
||
802 | $this->assertTrue(true, 'SocketException raised'); |
||
803 | } |
||
804 | |||
805 | $this->Controller->EmailTest->reset(); |
||
806 | |||
807 | $this->assertNull($this->Controller->EmailTest->template); |
||
808 | $this->assertSame($this->Controller->EmailTest->to, array()); |
||
809 | $this->assertNull($this->Controller->EmailTest->from); |
||
810 | $this->assertNull($this->Controller->EmailTest->replyTo); |
||
811 | $this->assertNull($this->Controller->EmailTest->return); |
||
812 | $this->assertSame($this->Controller->EmailTest->cc, array()); |
||
813 | $this->assertSame($this->Controller->EmailTest->bcc, array()); |
||
814 | $this->assertNull($this->Controller->EmailTest->date); |
||
815 | $this->assertNull($this->Controller->EmailTest->subject); |
||
816 | $this->assertNull($this->Controller->EmailTest->additionalParams); |
||
817 | $this->assertNull($this->Controller->EmailTest->smtpError); |
||
818 | $this->assertSame($this->Controller->EmailTest->attachments, array()); |
||
819 | $this->assertNull($this->Controller->EmailTest->textMessage); |
||
820 | $this->assertTrue($this->Controller->EmailTest->messageId); |
||
821 | $this->assertEquals('mail', $this->Controller->EmailTest->delivery); |
||
822 | } |
||
823 | |||
824 | public function testPluginCustomViewClass() { |
||
825 | App::build(array( |
||
826 | 'Plugin' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'Plugin' . DS), |
||
827 | 'View' => array(CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS) |
||
828 | )); |
||
829 | |||
830 | $this->Controller->view = 'TestPlugin.Email'; |
||
831 | |||
832 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
833 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
834 | $this->Controller->EmailTest->subject = 'CustomViewClass test'; |
||
835 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
836 | $body = 'Body of message'; |
||
837 | |||
838 | $this->assertTrue($this->Controller->EmailTest->send($body)); |
||
839 | $result = DebugCompTransport::$lastEmail; |
||
840 | |||
841 | $this->assertRegExp('/Body of message/', $result); |
||
842 | } |
||
843 | |||
844 | /**
|
||
845 | * testStartup method
|
||
846 | *
|
||
847 | * @return void
|
||
848 | */
|
||
849 | public function testStartup() { |
||
850 | $this->assertNull($this->Controller->EmailTest->startup($this->Controller)); |
||
851 | } |
||
852 | |||
853 | /**
|
||
854 | * testMessageId method
|
||
855 | *
|
||
856 | * @return void
|
||
857 | */
|
||
858 | public function testMessageId() { |
||
859 | $this->Controller->EmailTest->to = 'postmaster@example.com'; |
||
860 | $this->Controller->EmailTest->from = 'noreply@example.com'; |
||
861 | $this->Controller->EmailTest->subject = 'Cake Debug Test'; |
||
862 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
863 | $this->Controller->EmailTest->template = null; |
||
864 | |||
865 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
866 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
867 | $result = DebugCompTransport::$lastEmail; |
||
868 | |||
869 | $host = env('HTTP_HOST') ? env('HTTP_HOST') : php_uname('n'); |
||
870 | $this->assertRegExp('/Message-ID: \<[a-f0-9]{8}[a-f0-9]{4}[a-f0-9]{4}[a-f0-9]{4}[a-f0-9]{12}@' . $host . '\>\n/', $result); |
||
871 | |||
872 | $this->Controller->EmailTest->messageId = '<22091985.998877@example.com>'; |
||
873 | |||
874 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
875 | $result = DebugCompTransport::$lastEmail; |
||
876 | |||
877 | $this->assertRegExp('/Message-ID: <22091985.998877@example.com>\n/', $result); |
||
878 | |||
879 | $this->Controller->EmailTest->messageId = false; |
||
880 | |||
881 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
882 | $result = DebugCompTransport::$lastEmail; |
||
883 | |||
884 | $this->assertNotRegExp('/Message-ID:/', $result); |
||
885 | } |
||
886 | |||
887 | /**
|
||
888 | * Make sure from/to are not double encoded when UTF-8 is present
|
||
889 | *
|
||
890 | * @return void
|
||
891 | */
|
||
892 | public function testEncodingFrom() { |
||
893 | $this->Controller->EmailTest->to = 'Teßt <test@example.com>'; |
||
894 | $this->Controller->EmailTest->from = 'Teßt <test@example.com>'; |
||
895 | $this->Controller->EmailTest->subject = 'Cake Debug Test'; |
||
896 | $this->Controller->EmailTest->replyTo = 'noreply@example.com'; |
||
897 | $this->Controller->EmailTest->template = null; |
||
898 | |||
899 | $this->Controller->EmailTest->delivery = 'DebugComp'; |
||
900 | $this->assertTrue($this->Controller->EmailTest->send('This is the body of the message')); |
||
901 | $result = DebugCompTransport::$lastEmail; |
||
902 | |||
903 | $this->assertContains('From: =?UTF-8?B?VGXDn3Qg?= <test@example.com>', $result); |
||
904 | $this->assertContains('To: =?UTF-8?B?VGXDn3Qg?= <test@example.com>', $result); |
||
905 | } |
||
906 | |||
907 | } |