/tests/ZendTest/Mail/Transport/SendmailTest.php

https://github.com/zucchi/zf2 · PHP · 135 lines · 106 code · 15 blank · 14 comment · 6 complexity · 05051b4f18d3f259184020f929c88d90 MD5 · raw file

  1. <?php
  2. /**
  3. * Zend Framework (http://framework.zend.com/)
  4. *
  5. * @link http://github.com/zendframework/zf2 for the canonical source repository
  6. * @copyright Copyright (c) 2005-2012 Zend Technologies USA Inc. (http://www.zend.com)
  7. * @license http://framework.zend.com/license/new-bsd New BSD License
  8. * @package Zend_Mail
  9. */
  10. namespace ZendTest\Mail\Transport;
  11. use Zend\Mail\Message;
  12. use Zend\Mail\Transport\Sendmail;
  13. /**
  14. * @category Zend
  15. * @package Zend_Mail
  16. * @subpackage UnitTests
  17. * @group Zend_Mail
  18. */
  19. class SendmailTest extends \PHPUnit_Framework_TestCase
  20. {
  21. public $transport;
  22. public $to;
  23. public $subject;
  24. public $message;
  25. public $additional_headers;
  26. public $additional_parameters;
  27. public function setUp()
  28. {
  29. $this->transport = new Sendmail();
  30. $self = $this;
  31. $this->transport->setCallable(function($to, $subject, $message, $additional_headers, $additional_parameters = null) use ($self) {
  32. $self->to = $to;
  33. $self->subject = $subject;
  34. $self->message = $message;
  35. $self->additional_headers = $additional_headers;
  36. $self->additional_parameters = $additional_parameters;
  37. });
  38. $this->operating_system = strtoupper(substr(PHP_OS, 0, 3));
  39. }
  40. public function tearDown()
  41. {
  42. $this->to = null;
  43. $this->subject = null;
  44. $this->message = null;
  45. $this->additional_headers = null;
  46. $this->additional_parameters = null;
  47. }
  48. public function getMessage()
  49. {
  50. $message = new Message();
  51. $message->addTo('zf-devteam@zend.com', 'ZF DevTeam')
  52. ->addCc('matthew@zend.com')
  53. ->addBcc('zf-crteam@lists.zend.com', 'CR-Team, ZF Project')
  54. ->addFrom(array(
  55. 'zf-devteam@zend.com',
  56. 'matthew@zend.com' => 'Matthew',
  57. ))
  58. ->setSender('ralph.schindler@zend.com', 'Ralph Schindler')
  59. ->setSubject('Testing Zend\Mail\Transport\Sendmail')
  60. ->setBody('This is only a test.');
  61. $message->getHeaders()->addHeaders(array(
  62. 'X-Foo-Bar' => 'Matthew',
  63. ));
  64. return $message;
  65. }
  66. public function testReceivesMailArtifactsOnUnixSystems()
  67. {
  68. if ($this->operating_system == 'WIN') {
  69. $this->markTestSkipped('This test is *nix-specific');
  70. }
  71. $message = $this->getMessage();
  72. $this->transport->setParameters('-R hdrs');
  73. $this->transport->send($message);
  74. $this->assertEquals('ZF DevTeam <zf-devteam@zend.com>', $this->to);
  75. $this->assertEquals('Testing Zend\Mail\Transport\Sendmail', $this->subject);
  76. $this->assertEquals('This is only a test.', trim($this->message));
  77. $this->assertNotContains("To: ZF DevTeam <zf-devteam@zend.com>\r\n", $this->additional_headers);
  78. $this->assertContains("Cc: matthew@zend.com\r\n", $this->additional_headers);
  79. $this->assertContains("Bcc: \"CR-Team, ZF Project\" <zf-crteam@lists.zend.com>\r\n", $this->additional_headers);
  80. $this->assertContains("From: zf-devteam@zend.com,\r\n Matthew <matthew@zend.com>\r\n", $this->additional_headers);
  81. $this->assertContains("X-Foo-Bar: Matthew\r\n", $this->additional_headers);
  82. $this->assertContains("Sender: Ralph Schindler <ralph.schindler@zend.com>\r\n", $this->additional_headers);
  83. $this->assertEquals('-R hdrs -r ralph.schindler@zend.com', $this->additional_parameters);
  84. }
  85. public function testReceivesMailArtifactsOnWindowsSystems()
  86. {
  87. if ($this->operating_system != 'WIN') {
  88. $this->markTestSkipped('This test is Windows-specific');
  89. }
  90. $message = $this->getMessage();
  91. $this->transport->send($message);
  92. $this->assertEquals('zf-devteam@zend.com', $this->to);
  93. $this->assertEquals('Testing Zend\Mail\Transport\Sendmail', $this->subject);
  94. $this->assertEquals('This is only a test.', trim($this->message));
  95. $this->assertContains("To: ZF DevTeam <zf-devteam@zend.com>\r\n", $this->additional_headers);
  96. $this->assertContains("Cc: matthew@zend.com\r\n", $this->additional_headers);
  97. $this->assertContains("Bcc: \"CR-Team, ZF Project\" <zf-crteam@lists.zend.com>\r\n", $this->additional_headers);
  98. $this->assertContains("From: zf-devteam@zend.com,\r\n Matthew <matthew@zend.com>\r\n", $this->additional_headers);
  99. $this->assertContains("X-Foo-Bar: Matthew\r\n", $this->additional_headers);
  100. $this->assertContains("Sender: Ralph Schindler <ralph.schindler@zend.com>\r\n", $this->additional_headers);
  101. $this->assertNull($this->additional_parameters);
  102. }
  103. public function testLinesStartingWithFullStopsArePreparedProperlyForWindows()
  104. {
  105. if ($this->operating_system != 'WIN') {
  106. $this->markTestSkipped('This test is Windows-specific');
  107. }
  108. $message = $this->getMessage();
  109. $message->setBody("This is the first line.\n. This is the second");
  110. $this->transport->send($message);
  111. $this->assertContains("line.\n.. This", trim($this->message));
  112. }
  113. public function testAssertSubjectEncoded()
  114. {
  115. $message = $this->getMessage();
  116. $message->setEncoding('UTF-8');
  117. $this->transport->send($message);
  118. $this->assertEquals('=?UTF-8?Q?Testing=20Zend\Mail\Transport\Sendmail?=', $this->subject);
  119. }
  120. }