Переглянути джерело

Update SlackHandler tests && allow SlackRecord formatter change after construction

Anton Nizhegorodov 9 роки тому
батько
коміт
08b577c657

+ 10 - 0
src/Monolog/Handler/Slack/SlackRecord.php

@@ -226,4 +226,14 @@ class SlackRecord
 
         return $string;
     }
+
+    /**
+     * Sets the formatter
+     *
+     * @param FormatterInterface $formatter
+     */
+    public function setFormatter(FormatterInterface $formatter)
+    {
+        $this->formatter = $formatter;
+    }
 }

+ 9 - 0
src/Monolog/Handler/SlackHandler.php

@@ -11,6 +11,7 @@
 
 namespace Monolog\Handler;
 
+use Monolog\Formatter\FormatterInterface;
 use Monolog\Logger;
 use Monolog\Handler\Slack\SlackRecord;
 
@@ -178,4 +179,12 @@ class SlackHandler extends SocketHandler
 
         return $this->slackRecord->stringify($fields);
     }
+
+    public function setFormatter(FormatterInterface $formatter)
+    {
+        parent::setFormatter($formatter);
+        $this->slackRecord->setFormatter($formatter);
+
+        return $this;
+    }
 }

+ 12 - 0
tests/Monolog/Handler/Slack/SlackRecordTest.php

@@ -181,12 +181,24 @@ class SlackRecordTest extends TestCase
             ->method('format')
             ->will($this->returnCallback(function ($record) { return $record['message'] . 'test'; }));
 
+        $formatter2 = $this->createMock(FormatterInterface::class);
+        $formatter2
+            ->expects($this->any())
+            ->method('format')
+            ->will($this->returnCallback(function ($record) { return $record['message'] . 'test1'; }));
+
         $message = 'Test message';
         $record = new SlackRecord($this->channel, 'Monolog', false, null, false, false, $formatter);
         $data = $record->getSlackData($this->getRecord(Logger::WARNING, $message));
 
         $this->assertArrayHasKey('text', $data);
         $this->assertSame($message . 'test', $data['text']);
+
+        $record->setFormatter($formatter2);
+        $data = $record->getSlackData($this->getRecord(Logger::WARNING, $message));
+
+        $this->assertArrayHasKey('text', $data);
+        $this->assertSame($message . 'test1', $data['text']);
     }
 
     public function testAddsFallbackAndTextToAttachment()

+ 8 - 5
tests/Monolog/Handler/SlackHandlerTest.php

@@ -56,7 +56,10 @@ class SlackHandlerTest extends TestCase
         fseek($this->res, 0);
         $content = fread($this->res, 1024);
 
-        $this->assertRegexp('/token=myToken&channel=channel1&username=Monolog&text=&attachments=.*$/', $content);
+        $this->assertRegExp('/username=Monolog/', $content);
+        $this->assertRegExp('/channel=channel1/', $content);
+        $this->assertRegExp('/token=myToken/', $content);
+        $this->assertRegExp('/attachments/', $content);
     }
 
     public function testWriteContentUsesFormatterIfProvided()
@@ -72,8 +75,8 @@ class SlackHandlerTest extends TestCase
         fseek($this->res, 0);
         $content2 = fread($this->res, 1024);
 
-        $this->assertRegexp('/token=myToken&channel=channel1&username=Monolog&text=test1.*$/', $content);
-        $this->assertRegexp('/token=myToken&channel=channel1&username=Monolog&text=foo--test2.*$/', $content2);
+        $this->assertRegexp('/text=test1/', $content);
+        $this->assertRegexp('/text=foo--test2/', $content2);
     }
 
     public function testWriteContentWithEmoji()
@@ -83,7 +86,7 @@ class SlackHandlerTest extends TestCase
         fseek($this->res, 0);
         $content = fread($this->res, 1024);
 
-        $this->assertRegexp('/icon_emoji=%3Aalien%3A$/', $content);
+        $this->assertRegexp('/icon_emoji=%3Aalien%3A/', $content);
     }
 
     /**
@@ -96,7 +99,7 @@ class SlackHandlerTest extends TestCase
         fseek($this->res, 0);
         $content = fread($this->res, 1024);
 
-        $this->assertRegexp('/color%22%3A%22'.$expectedColor.'/', $content);
+        $this->assertRegexp('/%5Bcolor%5D='.$expectedColor.'/', $content);
     }
 
     public function testWriteContentWithPlainTextMessage()