Explorar o código

Merge pull request #948 from knugen/master

Add level parameter to payload when reporting Rollbar exceptions (#852)
Jordi Boggiano %!s(int64=8) %!d(string=hai) anos
pai
achega
4f5f6abd77

+ 1 - 0
src/Monolog/Handler/RollbarHandler.php

@@ -97,6 +97,7 @@ class RollbarHandler extends AbstractProcessingHandler
         ]);
 
         if (isset($context['exception']) && $context['exception'] instanceof Exception) {
+            $payload['level'] = $context['level'];
             $exception = $context['exception'];
             unset($context['exception']);
 

+ 82 - 0
tests/Monolog/Handler/RollbarHandlerTest.php

@@ -0,0 +1,82 @@
+<?php declare(strict_types=1);
+
+/*
+ * 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 Exception;
+use Monolog\Test\TestCase;
+use Monolog\Logger;
+use PHPUnit_Framework_MockObject_MockObject as MockObject;
+
+/**
+ * @author Erik Johansson <erik.pm.johansson@gmail.com>
+ * @see    https://rollbar.com/docs/notifier/rollbar-php/
+ *
+ * @coversDefaultClass Monolog\Handler\RollbarHandler
+ */
+class RollbarHandlerTest extends TestCase
+{
+    /**
+     * @var MockObject
+     */
+    private $rollbarNotifier;
+
+    /**
+     * @var array
+     */
+    private $reportedExceptionArguments = null;
+
+    protected function setUp()
+    {
+        parent::setUp();
+
+        $this->setupRollbarNotifierMock();
+    }
+
+    /**
+     * When reporting exceptions to Rollbar the
+     * level has to be set in the payload data
+     */
+    public function testExceptionLogLevel()
+    {
+        $handler = $this->createHandler();
+
+        $handler->handle($this->createExceptionRecord(Logger::DEBUG));
+
+        $this->assertEquals('debug', $this->reportedExceptionArguments['payload']['level']);
+    }
+
+    private function setupRollbarNotifierMock()
+    {
+        $this->rollbarNotifier = $this->getMockBuilder('RollbarNotifier')
+            ->setMethods(array('report_message', 'report_exception', 'flush'))
+            ->getMock();
+
+        $this->rollbarNotifier
+            ->expects($this->any())
+            ->method('report_exception')
+            ->willReturnCallback(function ($exception, $context, $payload) {
+                $this->reportedExceptionArguments = compact('exception', 'context', 'payload');
+            });
+    }
+
+    private function createHandler(): RollbarHandler
+    {
+        return new RollbarHandler($this->rollbarNotifier, Logger::DEBUG);
+    }
+
+    private function createExceptionRecord($level = Logger::DEBUG, $message = 'test', $exception = null): array
+    {
+        return $this->getRecord($level, $message, [
+            'exception' => $exception ?? new Exception()
+        ]);
+    }
+}