]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - vendor/monolog/monolog/tests/Monolog/Handler/SwiftMailerHandlerTest.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / vendor / monolog / monolog / tests / Monolog / Handler / SwiftMailerHandlerTest.php
diff --git a/vendor/monolog/monolog/tests/Monolog/Handler/SwiftMailerHandlerTest.php b/vendor/monolog/monolog/tests/Monolog/Handler/SwiftMailerHandlerTest.php
new file mode 100644 (file)
index 0000000..8588691
--- /dev/null
@@ -0,0 +1,113 @@
+<?php
+
+/*
+ * This file is part of the Monolog package.
+ *
+ * (c) Jordi Boggiano <j.boggiano@seld.be>
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Monolog\Handler;
+
+use Monolog\Logger;
+use Monolog\TestCase;
+
+class SwiftMailerHandlerTest extends TestCase
+{
+    /** @var \Swift_Mailer|\PHPUnit_Framework_MockObject_MockObject */
+    private $mailer;
+
+    public function setUp()
+    {
+        $this->mailer = $this
+            ->getMockBuilder('Swift_Mailer')
+            ->disableOriginalConstructor()
+            ->getMock();
+    }
+
+    public function testMessageCreationIsLazyWhenUsingCallback()
+    {
+        $this->mailer->expects($this->never())
+            ->method('send');
+
+        $callback = function () {
+            throw new \RuntimeException('Swift_Message creation callback should not have been called in this test');
+        };
+        $handler = new SwiftMailerHandler($this->mailer, $callback);
+
+        $records = array(
+            $this->getRecord(Logger::DEBUG),
+            $this->getRecord(Logger::INFO),
+        );
+        $handler->handleBatch($records);
+    }
+
+    public function testMessageCanBeCustomizedGivenLoggedData()
+    {
+        // Wire Mailer to expect a specific Swift_Message with a customized Subject
+        $expectedMessage = new \Swift_Message();
+        $this->mailer->expects($this->once())
+            ->method('send')
+            ->with($this->callback(function ($value) use ($expectedMessage) {
+                return $value instanceof \Swift_Message
+                    && $value->getSubject() === 'Emergency'
+                    && $value === $expectedMessage;
+            }));
+
+        // Callback dynamically changes subject based on number of logged records
+        $callback = function ($content, array $records) use ($expectedMessage) {
+            $subject = count($records) > 0 ? 'Emergency' : 'Normal';
+            $expectedMessage->setSubject($subject);
+
+            return $expectedMessage;
+        };
+        $handler = new SwiftMailerHandler($this->mailer, $callback);
+
+        // Logging 1 record makes this an Emergency
+        $records = array(
+            $this->getRecord(Logger::EMERGENCY),
+        );
+        $handler->handleBatch($records);
+    }
+
+    public function testMessageSubjectFormatting()
+    {
+        // Wire Mailer to expect a specific Swift_Message with a customized Subject
+        $messageTemplate = new \Swift_Message();
+        $messageTemplate->setSubject('Alert: %level_name% %message%');
+        $receivedMessage = null;
+
+        $this->mailer->expects($this->once())
+            ->method('send')
+            ->with($this->callback(function ($value) use (&$receivedMessage) {
+                $receivedMessage = $value;
+                return true;
+            }));
+
+        $handler = new SwiftMailerHandler($this->mailer, $messageTemplate);
+
+        $records = array(
+            $this->getRecord(Logger::EMERGENCY),
+        );
+        $handler->handleBatch($records);
+
+        $this->assertEquals('Alert: EMERGENCY test', $receivedMessage->getSubject());
+    }
+
+    public function testMessageHaveUniqueId()
+    {
+        $messageTemplate = \Swift_Message::newInstance();
+        $handler = new SwiftMailerHandler($this->mailer, $messageTemplate);
+
+        $method = new \ReflectionMethod('Monolog\Handler\SwiftMailerHandler', 'buildMessage');
+        $method->setAccessible(true);
+        $method->invokeArgs($handler, array($messageTemplate, array()));
+
+        $builtMessage1 = $method->invoke($handler, $messageTemplate, array());
+        $builtMessage2 = $method->invoke($handler, $messageTemplate, array());
+
+        $this->assertFalse($builtMessage1->getId() === $builtMessage2->getId(), 'Two different messages have the same id');
+    }
+}