SwiftMailerHandlerTest.php 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. namespace Monolog\Handler;
  3. use Monolog\Logger;
  4. use Monolog\TestCase;
  5. class SwiftMailerHandlerTest extends TestCase
  6. {
  7. /** @var \Swift_Mailer|\PHPUnit_Framework_MockObject_MockObject */
  8. private $mailer;
  9. public function setUp()
  10. {
  11. $this->mailer = $this
  12. ->getMockBuilder('Swift_Mailer')
  13. ->disableOriginalConstructor()
  14. ->getMock();
  15. }
  16. public function testMessageCreationIsLazyWhenUsingCallback()
  17. {
  18. $this->mailer->expects($this->never())
  19. ->method('send');
  20. $callback = function () {
  21. throw new \RuntimeException('Swift_Message creation callback should not have been called in this test');
  22. };
  23. $handler = new SwiftMailerHandler($this->mailer, $callback);
  24. $records = array(
  25. $this->getRecord(Logger::DEBUG),
  26. $this->getRecord(Logger::INFO),
  27. );
  28. $handler->handleBatch($records);
  29. }
  30. public function testMessageCanBeCustomizedGivenLoggedData()
  31. {
  32. // Wire Mailer to expect a specific Swift_Message with a customized Subject
  33. $expectedMessage = new \Swift_Message();
  34. $this->mailer->expects($this->once())
  35. ->method('send')
  36. ->with($this->callback(function ($value) use ($expectedMessage) {
  37. return $value instanceof \Swift_Message
  38. && $value->getSubject() === 'Emergency'
  39. && $value === $expectedMessage;
  40. }));
  41. // Callback dynamically changes subject based on number of logged records
  42. $callback = function ($content, array $records) use ($expectedMessage) {
  43. $subject = count($records) > 0 ? 'Emergency' : 'Normal';
  44. $expectedMessage->setSubject($subject);
  45. return $expectedMessage;
  46. };
  47. $handler = new SwiftMailerHandler($this->mailer, $callback);
  48. // Logging 1 record makes this an Emergency
  49. $records = array(
  50. $this->getRecord(Logger::EMERGENCY),
  51. );
  52. $handler->handleBatch($records);
  53. }
  54. public function testMessageHaveUniqueId() {
  55. $messageTemplate = \Swift_Message::newInstance();
  56. $handler = new SwiftMailerHandler($this->mailer, $messageTemplate);
  57. $method = new \ReflectionMethod('Monolog\Handler\SwiftMailerHandler', 'buildMessage');
  58. $method->setAccessible(true);
  59. $method->invokeArgs($handler, array($messageTemplate, array()));
  60. $builtMessage1 = $method->invoke($handler, $messageTemplate, array());
  61. $builtMessage2 = $method->invoke($handler, $messageTemplate, array());
  62. $this->assertFalse($builtMessage1->getId() === $builtMessage2->getId(), 'Two different messages have the same id');
  63. }
  64. }