/vendor/swiftmailer/swiftmailer/tests/unit/Swift/Transport/MailTransportTest.php

https://gitlab.com/ealexis.t/trends · PHP · 452 lines · 374 code · 77 blank · 1 comment · 4 complexity · a4a6f02889f585734168d0a7c05ecd4e MD5 · raw file

  1. <?php
  2. class Swift_Transport_MailTransportTest extends \SwiftMailerTestCase
  3. {
  4. public function testTransportInvokesMailOncePerMessage()
  5. {
  6. $invoker = $this->_createInvoker();
  7. $dispatcher = $this->_createEventDispatcher();
  8. $transport = $this->_createTransport($invoker, $dispatcher);
  9. $headers = $this->_createHeaders();
  10. $message = $this->_createMessage($headers);
  11. $invoker->shouldReceive('mail')
  12. ->once();
  13. $transport->send($message);
  14. }
  15. public function testTransportUsesToFieldBodyInSending()
  16. {
  17. $invoker = $this->_createInvoker();
  18. $dispatcher = $this->_createEventDispatcher();
  19. $transport = $this->_createTransport($invoker, $dispatcher);
  20. $to = $this->_createHeader();
  21. $headers = $this->_createHeaders(array(
  22. 'To' => $to,
  23. ));
  24. $message = $this->_createMessage($headers);
  25. $to->shouldReceive('getFieldBody')
  26. ->zeroOrMoreTimes()
  27. ->andReturn('Foo <foo@bar>');
  28. $invoker->shouldReceive('mail')
  29. ->once()
  30. ->with('Foo <foo@bar>', \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any());
  31. $transport->send($message);
  32. }
  33. public function testTransportUsesSubjectFieldBodyInSending()
  34. {
  35. $invoker = $this->_createInvoker();
  36. $dispatcher = $this->_createEventDispatcher();
  37. $transport = $this->_createTransport($invoker, $dispatcher);
  38. $subj = $this->_createHeader();
  39. $headers = $this->_createHeaders(array(
  40. 'Subject' => $subj,
  41. ));
  42. $message = $this->_createMessage($headers);
  43. $subj->shouldReceive('getFieldBody')
  44. ->zeroOrMoreTimes()
  45. ->andReturn('Thing');
  46. $invoker->shouldReceive('mail')
  47. ->once()
  48. ->with(\Mockery::any(), 'Thing', \Mockery::any(), \Mockery::any(), \Mockery::any());
  49. $transport->send($message);
  50. }
  51. public function testTransportUsesBodyOfMessage()
  52. {
  53. $invoker = $this->_createInvoker();
  54. $dispatcher = $this->_createEventDispatcher();
  55. $transport = $this->_createTransport($invoker, $dispatcher);
  56. $headers = $this->_createHeaders();
  57. $message = $this->_createMessage($headers);
  58. $message->shouldReceive('toString')
  59. ->zeroOrMoreTimes()
  60. ->andReturn(
  61. "To: Foo <foo@bar>\r\n".
  62. "\r\n".
  63. 'This body'
  64. );
  65. $invoker->shouldReceive('mail')
  66. ->once()
  67. ->with(\Mockery::any(), \Mockery::any(), 'This body', \Mockery::any(), \Mockery::any());
  68. $transport->send($message);
  69. }
  70. public function testTransportSettingUsingReturnPathForExtraParams()
  71. {
  72. $invoker = $this->_createInvoker();
  73. $dispatcher = $this->_createEventDispatcher();
  74. $transport = $this->_createTransport($invoker, $dispatcher);
  75. $headers = $this->_createHeaders();
  76. $message = $this->_createMessage($headers);
  77. $message->shouldReceive('getReturnPath')
  78. ->zeroOrMoreTimes()
  79. ->andReturn(
  80. 'foo@bar'
  81. );
  82. $invoker->shouldReceive('mail')
  83. ->once()
  84. ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), '-f\'foo@bar\'');
  85. $transport->send($message);
  86. }
  87. public function testTransportSettingEmptyExtraParams()
  88. {
  89. $invoker = $this->_createInvoker();
  90. $dispatcher = $this->_createEventDispatcher();
  91. $transport = $this->_createTransport($invoker, $dispatcher);
  92. $headers = $this->_createHeaders();
  93. $message = $this->_createMessage($headers);
  94. $message->shouldReceive('getReturnPath')
  95. ->zeroOrMoreTimes()
  96. ->andReturn(null);
  97. $message->shouldReceive('getSender')
  98. ->zeroOrMoreTimes()
  99. ->andReturn(null);
  100. $message->shouldReceive('getFrom')
  101. ->zeroOrMoreTimes()
  102. ->andReturn(null);
  103. $invoker->shouldReceive('mail')
  104. ->once()
  105. ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), null);
  106. $transport->send($message);
  107. }
  108. public function testTransportSettingSettingExtraParamsWithF()
  109. {
  110. $invoker = $this->_createInvoker();
  111. $dispatcher = $this->_createEventDispatcher();
  112. $transport = $this->_createTransport($invoker, $dispatcher);
  113. $transport->setExtraParams('-x\'foo\' -f%s');
  114. $headers = $this->_createHeaders();
  115. $message = $this->_createMessage($headers);
  116. $message->shouldReceive('getReturnPath')
  117. ->zeroOrMoreTimes()
  118. ->andReturn(
  119. 'foo@bar'
  120. );
  121. $message->shouldReceive('getSender')
  122. ->zeroOrMoreTimes()
  123. ->andReturn(null);
  124. $message->shouldReceive('getFrom')
  125. ->zeroOrMoreTimes()
  126. ->andReturn(null);
  127. $invoker->shouldReceive('mail')
  128. ->once()
  129. ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), '-x\'foo\' -f\'foo@bar\'');
  130. $transport->send($message);
  131. }
  132. public function testTransportSettingSettingExtraParamsWithoutF()
  133. {
  134. $invoker = $this->_createInvoker();
  135. $dispatcher = $this->_createEventDispatcher();
  136. $transport = $this->_createTransport($invoker, $dispatcher);
  137. $transport->setExtraParams('-x\'foo\'');
  138. $headers = $this->_createHeaders();
  139. $message = $this->_createMessage($headers);
  140. $message->shouldReceive('getReturnPath')
  141. ->zeroOrMoreTimes()
  142. ->andReturn(
  143. 'foo@bar'
  144. );
  145. $message->shouldReceive('getSender')
  146. ->zeroOrMoreTimes()
  147. ->andReturn(null);
  148. $message->shouldReceive('getFrom')
  149. ->zeroOrMoreTimes()
  150. ->andReturn(null);
  151. $invoker->shouldReceive('mail')
  152. ->once()
  153. ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), '-x\'foo\'');
  154. $transport->send($message);
  155. }
  156. public function testTransportUsesHeadersFromMessage()
  157. {
  158. $invoker = $this->_createInvoker();
  159. $dispatcher = $this->_createEventDispatcher();
  160. $transport = $this->_createTransport($invoker, $dispatcher);
  161. $headers = $this->_createHeaders();
  162. $message = $this->_createMessage($headers);
  163. $message->shouldReceive('toString')
  164. ->zeroOrMoreTimes()
  165. ->andReturn(
  166. "Subject: Stuff\r\n".
  167. "\r\n".
  168. 'This body'
  169. );
  170. $invoker->shouldReceive('mail')
  171. ->once()
  172. ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), 'Subject: Stuff'.PHP_EOL, \Mockery::any());
  173. $transport->send($message);
  174. }
  175. public function testTransportReturnsCountOfAllRecipientsIfInvokerReturnsTrue()
  176. {
  177. $invoker = $this->_createInvoker();
  178. $dispatcher = $this->_createEventDispatcher();
  179. $transport = $this->_createTransport($invoker, $dispatcher);
  180. $headers = $this->_createHeaders();
  181. $message = $this->_createMessage($headers);
  182. $message->shouldReceive('getTo')
  183. ->zeroOrMoreTimes()
  184. ->andReturn(array('foo@bar' => null, 'zip@button' => null));
  185. $message->shouldReceive('getCc')
  186. ->zeroOrMoreTimes()
  187. ->andReturn(array('test@test' => null));
  188. $invoker->shouldReceive('mail')
  189. ->once()
  190. ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any())
  191. ->andReturn(true);
  192. $this->assertEquals(3, $transport->send($message));
  193. }
  194. public function testTransportReturnsZeroIfInvokerReturnsFalse()
  195. {
  196. $invoker = $this->_createInvoker();
  197. $dispatcher = $this->_createEventDispatcher();
  198. $transport = $this->_createTransport($invoker, $dispatcher);
  199. $headers = $this->_createHeaders();
  200. $message = $this->_createMessage($headers);
  201. $message->shouldReceive('getTo')
  202. ->zeroOrMoreTimes()
  203. ->andReturn(array('foo@bar' => null, 'zip@button' => null));
  204. $message->shouldReceive('getCc')
  205. ->zeroOrMoreTimes()
  206. ->andReturn(array('test@test' => null));
  207. $invoker->shouldReceive('mail')
  208. ->once()
  209. ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any())
  210. ->andReturn(false);
  211. $this->assertEquals(0, $transport->send($message));
  212. }
  213. public function testToHeaderIsRemovedFromHeaderSetDuringSending()
  214. {
  215. $invoker = $this->_createInvoker();
  216. $dispatcher = $this->_createEventDispatcher();
  217. $transport = $this->_createTransport($invoker, $dispatcher);
  218. $to = $this->_createHeader();
  219. $headers = $this->_createHeaders(array(
  220. 'To' => $to,
  221. ));
  222. $message = $this->_createMessage($headers);
  223. $headers->shouldReceive('remove')
  224. ->once()
  225. ->with('To');
  226. $headers->shouldReceive('remove')
  227. ->zeroOrMoreTimes();
  228. $invoker->shouldReceive('mail')
  229. ->once()
  230. ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any());
  231. $transport->send($message);
  232. }
  233. public function testSubjectHeaderIsRemovedFromHeaderSetDuringSending()
  234. {
  235. $invoker = $this->_createInvoker();
  236. $dispatcher = $this->_createEventDispatcher();
  237. $transport = $this->_createTransport($invoker, $dispatcher);
  238. $subject = $this->_createHeader();
  239. $headers = $this->_createHeaders(array(
  240. 'Subject' => $subject,
  241. ));
  242. $message = $this->_createMessage($headers);
  243. $headers->shouldReceive('remove')
  244. ->once()
  245. ->with('Subject');
  246. $headers->shouldReceive('remove')
  247. ->zeroOrMoreTimes();
  248. $invoker->shouldReceive('mail')
  249. ->once()
  250. ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any());
  251. $transport->send($message);
  252. }
  253. public function testToHeaderIsPutBackAfterSending()
  254. {
  255. $invoker = $this->_createInvoker();
  256. $dispatcher = $this->_createEventDispatcher();
  257. $transport = $this->_createTransport($invoker, $dispatcher);
  258. $to = $this->_createHeader();
  259. $headers = $this->_createHeaders(array(
  260. 'To' => $to,
  261. ));
  262. $message = $this->_createMessage($headers);
  263. $headers->shouldReceive('set')
  264. ->once()
  265. ->with($to);
  266. $headers->shouldReceive('set')
  267. ->zeroOrMoreTimes();
  268. $invoker->shouldReceive('mail')
  269. ->once()
  270. ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any());
  271. $transport->send($message);
  272. }
  273. public function testSubjectHeaderIsPutBackAfterSending()
  274. {
  275. $invoker = $this->_createInvoker();
  276. $dispatcher = $this->_createEventDispatcher();
  277. $transport = $this->_createTransport($invoker, $dispatcher);
  278. $subject = $this->_createHeader();
  279. $headers = $this->_createHeaders(array(
  280. 'Subject' => $subject,
  281. ));
  282. $message = $this->_createMessage($headers);
  283. $headers->shouldReceive('set')
  284. ->once()
  285. ->with($subject);
  286. $headers->shouldReceive('set')
  287. ->zeroOrMoreTimes();
  288. $invoker->shouldReceive('mail')
  289. ->once()
  290. ->with(\Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any(), \Mockery::any());
  291. $transport->send($message);
  292. }
  293. public function testMessageHeadersOnlyHavePHPEolsDuringSending()
  294. {
  295. $invoker = $this->_createInvoker();
  296. $dispatcher = $this->_createEventDispatcher();
  297. $transport = $this->_createTransport($invoker, $dispatcher);
  298. $subject = $this->_createHeader();
  299. $subject->shouldReceive('getFieldBody')->andReturn("Foo\r\nBar");
  300. $headers = $this->_createHeaders(array(
  301. 'Subject' => $subject,
  302. ));
  303. $message = $this->_createMessage($headers);
  304. $message->shouldReceive('toString')
  305. ->zeroOrMoreTimes()
  306. ->andReturn(
  307. "From: Foo\r\n<foo@bar>\r\n".
  308. "\r\n".
  309. "This\r\n".
  310. 'body'
  311. );
  312. if ("\r\n" != PHP_EOL) {
  313. $expectedHeaders = "From: Foo\n<foo@bar>\n";
  314. $expectedSubject = "Foo\nBar";
  315. $expectedBody = "This\nbody";
  316. } else {
  317. $expectedHeaders = "From: Foo\r\n<foo@bar>\r\n";
  318. $expectedSubject = "Foo\r\nBar";
  319. $expectedBody = "This\r\nbody";
  320. }
  321. $invoker->shouldReceive('mail')
  322. ->once()
  323. ->with(\Mockery::any(), $expectedSubject, $expectedBody, $expectedHeaders, \Mockery::any());
  324. $transport->send($message);
  325. }
  326. // -- Creation Methods
  327. private function _createTransport($invoker, $dispatcher)
  328. {
  329. return new Swift_Transport_MailTransport($invoker, $dispatcher);
  330. }
  331. private function _createEventDispatcher()
  332. {
  333. return $this->getMockery('Swift_Events_EventDispatcher')->shouldIgnoreMissing();
  334. }
  335. private function _createInvoker()
  336. {
  337. return $this->getMockery('Swift_Transport_MailInvoker');
  338. }
  339. private function _createMessage($headers)
  340. {
  341. $message = $this->getMockery('Swift_Mime_Message')->shouldIgnoreMissing();
  342. $message->shouldReceive('getHeaders')
  343. ->zeroOrMoreTimes()
  344. ->andReturn($headers);
  345. return $message;
  346. }
  347. private function _createHeaders($headers = array())
  348. {
  349. $set = $this->getMockery('Swift_Mime_HeaderSet')->shouldIgnoreMissing();
  350. if (count($headers) > 0) {
  351. foreach ($headers as $name => $header) {
  352. $set->shouldReceive('get')
  353. ->zeroOrMoreTimes()
  354. ->with($name)
  355. ->andReturn($header);
  356. $set->shouldReceive('has')
  357. ->zeroOrMoreTimes()
  358. ->with($name)
  359. ->andReturn(true);
  360. }
  361. }
  362. $header = $this->_createHeader();
  363. $set->shouldReceive('get')
  364. ->zeroOrMoreTimes()
  365. ->andReturn($header);
  366. $set->shouldReceive('has')
  367. ->zeroOrMoreTimes()
  368. ->andReturn(true);
  369. return $set;
  370. }
  371. private function _createHeader()
  372. {
  373. return $this->getMockery('Swift_Mime_Header')->shouldIgnoreMissing();
  374. }
  375. }