SmtpTransportAdapterTest.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. <?php
  2. namespace Dotdigitalgroup\Email\Test\Unit\Model\Mail;
  3. use Dotdigitalgroup\Email\Helper\Transactional;
  4. use Dotdigitalgroup\Email\Model\Mail\SmtpTransportAdapter;
  5. use Dotdigitalgroup\Email\Model\Mail\SmtpTransportZend1;
  6. use Dotdigitalgroup\Email\Model\Mail\SmtpTransportZend2;
  7. use Magento\Framework\Mail\TransportInterface;
  8. use Zend_Mail;
  9. class SmtpTransportAdapterTest extends \PHPUnit\Framework\TestCase
  10. {
  11. /**
  12. * @var bool
  13. */
  14. public static $shouldOverrideMethodExists = false;
  15. /**
  16. * @var Transactional|PHPUnit_Framework_MockObject_MockObject
  17. */
  18. private $transactionalEmailSettingsMock;
  19. /**
  20. * @var SmtpTransportZend1|PHPUnit_Framework_MockObject_MockObject
  21. */
  22. private $smtpTransportZendV1Mock;
  23. /**
  24. * @var SmtpTransportZend2|PHPUnit_Framework_MockObject_MockObject
  25. */
  26. private $smtpTransportZendV2Mock;
  27. /**
  28. * @var SmtpTransportAdapter
  29. */
  30. private $smtpTransportAdapter;
  31. /**
  32. * @var TransportInterface|PHPUnit_Framework_MockObject_MockObject
  33. */
  34. private $subject;
  35. /**
  36. * @var int
  37. */
  38. private $storeId = 123;
  39. /**
  40. * Prepare data
  41. */
  42. protected function setUp()
  43. {
  44. $this->transactionalEmailSettingsMock = $this->getMockBuilder(
  45. Transactional::class
  46. )->disableOriginalConstructor(
  47. )->getMock();
  48. $this->smtpTransportZendV1Mock = $this->getMockBuilder(
  49. SmtpTransportZend1::class
  50. )->disableOriginalConstructor(
  51. )->getMock();
  52. $this->smtpTransportZendV2Mock = $this->getMockBuilder(
  53. SmtpTransportZend2::class
  54. )->disableOriginalConstructor(
  55. )->getMock();
  56. $this->subject = $this->getMockBuilder(
  57. TransportInterface::class
  58. )->disableOriginalConstructor(
  59. )->getMock();
  60. $this->smtpTransportAdapter = new SmtpTransportAdapter(
  61. $this->transactionalEmailSettingsMock,
  62. $this->smtpTransportZendV1Mock,
  63. $this->smtpTransportZendV2Mock
  64. );
  65. }
  66. /**
  67. * @throws \ReflectionException
  68. * @throws \Zend_Mail_Transport_Exception
  69. */
  70. public function testSmtpTransportZend1UsedIfMessageIsZendMail()
  71. {
  72. $message = new Zend_Mail();
  73. $this->subject->expects($this->once())->method('getMessage')->willReturn($message);
  74. $this->smtpTransportZendV1Mock->expects($this->once())->method('send')->with($message, $this->storeId);
  75. $this->smtpTransportZendV2Mock->expects($this->never())->method('send');
  76. $this->smtpTransportAdapter->send($this->subject, $this->storeId);
  77. }
  78. /**
  79. * @throws \ReflectionException
  80. * @throws \Zend_Mail_Transport_Exception
  81. */
  82. public function testMessageIsAccessedViaReflectionIfAccesssorMethodNotFound()
  83. {
  84. self::$shouldOverrideMethodExists = true;
  85. $message = new Zend_Mail();
  86. $subject = new Magento21FrameworkMailTransportMock();
  87. $subject->setMessage($message);
  88. $this->smtpTransportZendV1Mock->expects($this->once())->method('send')->with($message, $this->storeId);
  89. $this->smtpTransportZendV2Mock->expects($this->never())->method('send');
  90. $this->smtpTransportAdapter->send($subject, $this->storeId);
  91. }
  92. /**
  93. * @throws \ReflectionException
  94. * @throws \Zend_Mail_Transport_Exception
  95. */
  96. public function testSmtpTransportZend2UsedIfMessageIsNotZendMail()
  97. {
  98. $zendMessage = new \Zend\Mail\Message();
  99. $magentoFrameworkMessage = $this->getMockBuilder(
  100. \Magento\Framework\Mail\Message::class
  101. )->disableOriginalConstructor(
  102. )->getMock();
  103. $magentoFrameworkMessage->expects($this->once())
  104. ->method('getRawMessage')
  105. ->willReturn($zendMessage->toString());
  106. $this->subject->expects($this->once())->method('getMessage')->willReturn($magentoFrameworkMessage);
  107. $this->smtpTransportZendV1Mock->expects($this->never())->method('send');
  108. // Not checking args passed in. Can't mock static Message::fromString
  109. $this->smtpTransportZendV2Mock->expects($this->once())->method('send');
  110. $this->smtpTransportAdapter->send($this->subject, $this->storeId);
  111. }
  112. }