EmbeddedFileAcceptanceTest.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. use Egulias\EmailValidator\EmailValidator;
  3. class Swift_Mime_EmbeddedFileAcceptanceTest extends \PHPUnit\Framework\TestCase
  4. {
  5. private $contentEncoder;
  6. private $cache;
  7. private $headers;
  8. private $emailValidator;
  9. protected function setUp()
  10. {
  11. $this->cache = new Swift_KeyCache_ArrayKeyCache(
  12. new Swift_KeyCache_SimpleKeyCacheInputStream()
  13. );
  14. $factory = new Swift_CharacterReaderFactory_SimpleCharacterReaderFactory();
  15. $this->contentEncoder = new Swift_Mime_ContentEncoder_Base64ContentEncoder();
  16. $headerEncoder = new Swift_Mime_HeaderEncoder_QpHeaderEncoder(
  17. new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8')
  18. );
  19. $paramEncoder = new Swift_Encoder_Rfc2231Encoder(
  20. new Swift_CharacterStream_ArrayCharacterStream($factory, 'utf-8')
  21. );
  22. $this->emailValidator = new EmailValidator();
  23. $this->idGenerator = new Swift_Mime_IdGenerator('example.com');
  24. $this->headers = new Swift_Mime_SimpleHeaderSet(
  25. new Swift_Mime_SimpleHeaderFactory($headerEncoder, $paramEncoder, $this->emailValidator)
  26. );
  27. }
  28. public function testContentIdIsSetInHeader()
  29. {
  30. $file = $this->createEmbeddedFile();
  31. $file->setContentType('application/pdf');
  32. $file->setId('foo@bar');
  33. $this->assertEquals(
  34. 'Content-Type: application/pdf'."\r\n".
  35. 'Content-Transfer-Encoding: base64'."\r\n".
  36. 'Content-ID: <foo@bar>'."\r\n".
  37. 'Content-Disposition: inline'."\r\n",
  38. $file->toString()
  39. );
  40. }
  41. public function testDispositionIsSetInHeader()
  42. {
  43. $file = $this->createEmbeddedFile();
  44. $id = $file->getId();
  45. $file->setContentType('application/pdf');
  46. $file->setDisposition('attachment');
  47. $this->assertEquals(
  48. 'Content-Type: application/pdf'."\r\n".
  49. 'Content-Transfer-Encoding: base64'."\r\n".
  50. 'Content-ID: <'.$id.'>'."\r\n".
  51. 'Content-Disposition: attachment'."\r\n",
  52. $file->toString()
  53. );
  54. }
  55. public function testFilenameIsSetInHeader()
  56. {
  57. $file = $this->createEmbeddedFile();
  58. $id = $file->getId();
  59. $file->setContentType('application/pdf');
  60. $file->setFilename('foo.pdf');
  61. $this->assertEquals(
  62. 'Content-Type: application/pdf; name=foo.pdf'."\r\n".
  63. 'Content-Transfer-Encoding: base64'."\r\n".
  64. 'Content-ID: <'.$id.'>'."\r\n".
  65. 'Content-Disposition: inline; filename=foo.pdf'."\r\n",
  66. $file->toString()
  67. );
  68. }
  69. public function testSizeIsSetInHeader()
  70. {
  71. $file = $this->createEmbeddedFile();
  72. $id = $file->getId();
  73. $file->setContentType('application/pdf');
  74. $file->setSize(12340);
  75. $this->assertEquals(
  76. 'Content-Type: application/pdf'."\r\n".
  77. 'Content-Transfer-Encoding: base64'."\r\n".
  78. 'Content-ID: <'.$id.'>'."\r\n".
  79. 'Content-Disposition: inline; size=12340'."\r\n",
  80. $file->toString()
  81. );
  82. }
  83. public function testMultipleParametersInHeader()
  84. {
  85. $file = $this->createEmbeddedFile();
  86. $id = $file->getId();
  87. $file->setContentType('application/pdf');
  88. $file->setFilename('foo.pdf');
  89. $file->setSize(12340);
  90. $this->assertEquals(
  91. 'Content-Type: application/pdf; name=foo.pdf'."\r\n".
  92. 'Content-Transfer-Encoding: base64'."\r\n".
  93. 'Content-ID: <'.$id.'>'."\r\n".
  94. 'Content-Disposition: inline; filename=foo.pdf; size=12340'."\r\n",
  95. $file->toString()
  96. );
  97. }
  98. public function testEndToEnd()
  99. {
  100. $file = $this->createEmbeddedFile();
  101. $id = $file->getId();
  102. $file->setContentType('application/pdf');
  103. $file->setFilename('foo.pdf');
  104. $file->setSize(12340);
  105. $file->setBody('abcd');
  106. $this->assertEquals(
  107. 'Content-Type: application/pdf; name=foo.pdf'."\r\n".
  108. 'Content-Transfer-Encoding: base64'."\r\n".
  109. 'Content-ID: <'.$id.'>'."\r\n".
  110. 'Content-Disposition: inline; filename=foo.pdf; size=12340'."\r\n".
  111. "\r\n".
  112. base64_encode('abcd'),
  113. $file->toString()
  114. );
  115. }
  116. protected function createEmbeddedFile()
  117. {
  118. $entity = new Swift_Mime_EmbeddedFile(
  119. $this->headers,
  120. $this->contentEncoder,
  121. $this->cache,
  122. $this->idGenerator
  123. );
  124. return $entity;
  125. }
  126. }