/vendor/monolog/monolog/tests/Monolog/Handler/Slack/SlackRecordTest.php |
@@ -0,0 +1,387 @@ |
<?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\Slack; |
|
use Monolog\Logger; |
use Monolog\TestCase; |
|
/** |
* @coversDefaultClass Monolog\Handler\Slack\SlackRecord |
*/ |
class SlackRecordTest extends TestCase |
{ |
private $jsonPrettyPrintFlag; |
|
protected function setUp() |
{ |
$this->jsonPrettyPrintFlag = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 128; |
} |
|
public function dataGetAttachmentColor() |
{ |
return array( |
array(Logger::DEBUG, SlackRecord::COLOR_DEFAULT), |
array(Logger::INFO, SlackRecord::COLOR_GOOD), |
array(Logger::NOTICE, SlackRecord::COLOR_GOOD), |
array(Logger::WARNING, SlackRecord::COLOR_WARNING), |
array(Logger::ERROR, SlackRecord::COLOR_DANGER), |
array(Logger::CRITICAL, SlackRecord::COLOR_DANGER), |
array(Logger::ALERT, SlackRecord::COLOR_DANGER), |
array(Logger::EMERGENCY, SlackRecord::COLOR_DANGER), |
); |
} |
|
/** |
* @dataProvider dataGetAttachmentColor |
* @param int $logLevel |
* @param string $expectedColour RGB hex color or name of Slack color |
* @covers ::getAttachmentColor |
*/ |
public function testGetAttachmentColor($logLevel, $expectedColour) |
{ |
$slackRecord = new SlackRecord(); |
$this->assertSame( |
$expectedColour, |
$slackRecord->getAttachmentColor($logLevel) |
); |
} |
|
public function testAddsChannel() |
{ |
$channel = '#test'; |
$record = new SlackRecord($channel); |
$data = $record->getSlackData($this->getRecord()); |
|
$this->assertArrayHasKey('channel', $data); |
$this->assertSame($channel, $data['channel']); |
} |
|
public function testNoUsernameByDefault() |
{ |
$record = new SlackRecord(); |
$data = $record->getSlackData($this->getRecord()); |
|
$this->assertArrayNotHasKey('username', $data); |
} |
|
/** |
* @return array |
*/ |
public function dataStringify() |
{ |
$jsonPrettyPrintFlag = defined('JSON_PRETTY_PRINT') ? JSON_PRETTY_PRINT : 128; |
|
$multipleDimensions = array(array(1, 2)); |
$numericKeys = array('library' => 'monolog'); |
$singleDimension = array(1, 'Hello', 'Jordi'); |
|
return array( |
array(array(), '[]'), |
array($multipleDimensions, json_encode($multipleDimensions, $jsonPrettyPrintFlag)), |
array($numericKeys, json_encode($numericKeys, $jsonPrettyPrintFlag)), |
array($singleDimension, json_encode($singleDimension)) |
); |
} |
|
/** |
* @dataProvider dataStringify |
*/ |
public function testStringify($fields, $expectedResult) |
{ |
$slackRecord = new SlackRecord( |
'#test', |
'test', |
true, |
null, |
true, |
true |
); |
|
$this->assertSame($expectedResult, $slackRecord->stringify($fields)); |
} |
|
public function testAddsCustomUsername() |
{ |
$username = 'Monolog bot'; |
$record = new SlackRecord(null, $username); |
$data = $record->getSlackData($this->getRecord()); |
|
$this->assertArrayHasKey('username', $data); |
$this->assertSame($username, $data['username']); |
} |
|
public function testNoIcon() |
{ |
$record = new SlackRecord(); |
$data = $record->getSlackData($this->getRecord()); |
|
$this->assertArrayNotHasKey('icon_emoji', $data); |
} |
|
public function testAddsIcon() |
{ |
$record = $this->getRecord(); |
$slackRecord = new SlackRecord(null, null, false, 'ghost'); |
$data = $slackRecord->getSlackData($record); |
|
$slackRecord2 = new SlackRecord(null, null, false, 'http://github.com/Seldaek/monolog'); |
$data2 = $slackRecord2->getSlackData($record); |
|
$this->assertArrayHasKey('icon_emoji', $data); |
$this->assertSame(':ghost:', $data['icon_emoji']); |
$this->assertArrayHasKey('icon_url', $data2); |
$this->assertSame('http://github.com/Seldaek/monolog', $data2['icon_url']); |
} |
|
public function testAttachmentsNotPresentIfNoAttachment() |
{ |
$record = new SlackRecord(null, null, false); |
$data = $record->getSlackData($this->getRecord()); |
|
$this->assertArrayNotHasKey('attachments', $data); |
} |
|
public function testAddsOneAttachment() |
{ |
$record = new SlackRecord(); |
$data = $record->getSlackData($this->getRecord()); |
|
$this->assertArrayHasKey('attachments', $data); |
$this->assertArrayHasKey(0, $data['attachments']); |
$this->assertInternalType('array', $data['attachments'][0]); |
} |
|
public function testTextEqualsMessageIfNoAttachment() |
{ |
$message = 'Test message'; |
$record = new SlackRecord(null, null, false); |
$data = $record->getSlackData($this->getRecord(Logger::WARNING, $message)); |
|
$this->assertArrayHasKey('text', $data); |
$this->assertSame($message, $data['text']); |
} |
|
public function testTextEqualsFormatterOutput() |
{ |
$formatter = $this->getMock('Monolog\\Formatter\\FormatterInterface'); |
$formatter |
->expects($this->any()) |
->method('format') |
->will($this->returnCallback(function ($record) { return $record['message'] . 'test'; })); |
|
$formatter2 = $this->getMock('Monolog\\Formatter\\FormatterInterface'); |
$formatter2 |
->expects($this->any()) |
->method('format') |
->will($this->returnCallback(function ($record) { return $record['message'] . 'test1'; })); |
|
$message = 'Test message'; |
$record = new SlackRecord(null, null, false, null, false, false, array(), $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() |
{ |
$message = 'Test message'; |
$record = new SlackRecord(null); |
$data = $record->getSlackData($this->getRecord(Logger::WARNING, $message)); |
|
$this->assertSame($message, $data['attachments'][0]['text']); |
$this->assertSame($message, $data['attachments'][0]['fallback']); |
} |
|
public function testMapsLevelToColorAttachmentColor() |
{ |
$record = new SlackRecord(null); |
$errorLoggerRecord = $this->getRecord(Logger::ERROR); |
$emergencyLoggerRecord = $this->getRecord(Logger::EMERGENCY); |
$warningLoggerRecord = $this->getRecord(Logger::WARNING); |
$infoLoggerRecord = $this->getRecord(Logger::INFO); |
$debugLoggerRecord = $this->getRecord(Logger::DEBUG); |
|
$data = $record->getSlackData($errorLoggerRecord); |
$this->assertSame(SlackRecord::COLOR_DANGER, $data['attachments'][0]['color']); |
|
$data = $record->getSlackData($emergencyLoggerRecord); |
$this->assertSame(SlackRecord::COLOR_DANGER, $data['attachments'][0]['color']); |
|
$data = $record->getSlackData($warningLoggerRecord); |
$this->assertSame(SlackRecord::COLOR_WARNING, $data['attachments'][0]['color']); |
|
$data = $record->getSlackData($infoLoggerRecord); |
$this->assertSame(SlackRecord::COLOR_GOOD, $data['attachments'][0]['color']); |
|
$data = $record->getSlackData($debugLoggerRecord); |
$this->assertSame(SlackRecord::COLOR_DEFAULT, $data['attachments'][0]['color']); |
} |
|
public function testAddsShortAttachmentWithoutContextAndExtra() |
{ |
$level = Logger::ERROR; |
$levelName = Logger::getLevelName($level); |
$record = new SlackRecord(null, null, true, null, true); |
$data = $record->getSlackData($this->getRecord($level, 'test', array('test' => 1))); |
|
$attachment = $data['attachments'][0]; |
$this->assertArrayHasKey('title', $attachment); |
$this->assertArrayHasKey('fields', $attachment); |
$this->assertSame($levelName, $attachment['title']); |
$this->assertSame(array(), $attachment['fields']); |
} |
|
public function testAddsShortAttachmentWithContextAndExtra() |
{ |
$level = Logger::ERROR; |
$levelName = Logger::getLevelName($level); |
$context = array('test' => 1); |
$extra = array('tags' => array('web')); |
$record = new SlackRecord(null, null, true, null, true, true); |
$loggerRecord = $this->getRecord($level, 'test', $context); |
$loggerRecord['extra'] = $extra; |
$data = $record->getSlackData($loggerRecord); |
|
$attachment = $data['attachments'][0]; |
$this->assertArrayHasKey('title', $attachment); |
$this->assertArrayHasKey('fields', $attachment); |
$this->assertCount(2, $attachment['fields']); |
$this->assertSame($levelName, $attachment['title']); |
$this->assertSame( |
array( |
array( |
'title' => 'Extra', |
'value' => sprintf('```%s```', json_encode($extra, $this->jsonPrettyPrintFlag)), |
'short' => false |
), |
array( |
'title' => 'Context', |
'value' => sprintf('```%s```', json_encode($context, $this->jsonPrettyPrintFlag)), |
'short' => false |
) |
), |
$attachment['fields'] |
); |
} |
|
public function testAddsLongAttachmentWithoutContextAndExtra() |
{ |
$level = Logger::ERROR; |
$levelName = Logger::getLevelName($level); |
$record = new SlackRecord(null, null, true, null); |
$data = $record->getSlackData($this->getRecord($level, 'test', array('test' => 1))); |
|
$attachment = $data['attachments'][0]; |
$this->assertArrayHasKey('title', $attachment); |
$this->assertArrayHasKey('fields', $attachment); |
$this->assertCount(1, $attachment['fields']); |
$this->assertSame('Message', $attachment['title']); |
$this->assertSame( |
array(array( |
'title' => 'Level', |
'value' => $levelName, |
'short' => false |
)), |
$attachment['fields'] |
); |
} |
|
public function testAddsLongAttachmentWithContextAndExtra() |
{ |
$level = Logger::ERROR; |
$levelName = Logger::getLevelName($level); |
$context = array('test' => 1); |
$extra = array('tags' => array('web')); |
$record = new SlackRecord(null, null, true, null, false, true); |
$loggerRecord = $this->getRecord($level, 'test', $context); |
$loggerRecord['extra'] = $extra; |
$data = $record->getSlackData($loggerRecord); |
|
$expectedFields = array( |
array( |
'title' => 'Level', |
'value' => $levelName, |
'short' => false, |
), |
array( |
'title' => 'tags', |
'value' => sprintf('```%s```', json_encode($extra['tags'])), |
'short' => false |
), |
array( |
'title' => 'test', |
'value' => $context['test'], |
'short' => false |
) |
); |
|
$attachment = $data['attachments'][0]; |
$this->assertArrayHasKey('title', $attachment); |
$this->assertArrayHasKey('fields', $attachment); |
$this->assertCount(3, $attachment['fields']); |
$this->assertSame('Message', $attachment['title']); |
$this->assertSame( |
$expectedFields, |
$attachment['fields'] |
); |
} |
|
public function testAddsTimestampToAttachment() |
{ |
$record = $this->getRecord(); |
$slackRecord = new SlackRecord(); |
$data = $slackRecord->getSlackData($this->getRecord()); |
|
$attachment = $data['attachments'][0]; |
$this->assertArrayHasKey('ts', $attachment); |
$this->assertSame($record['datetime']->getTimestamp(), $attachment['ts']); |
} |
|
public function testExcludeExtraAndContextFields() |
{ |
$record = $this->getRecord( |
Logger::WARNING, |
'test', |
array('info' => array('library' => 'monolog', 'author' => 'Jordi')) |
); |
$record['extra'] = array('tags' => array('web', 'cli')); |
|
$slackRecord = new SlackRecord(null, null, true, null, false, true, array('context.info.library', 'extra.tags.1')); |
$data = $slackRecord->getSlackData($record); |
$attachment = $data['attachments'][0]; |
|
$expected = array( |
array( |
'title' => 'info', |
'value' => sprintf('```%s```', json_encode(array('author' => 'Jordi'), $this->jsonPrettyPrintFlag)), |
'short' => false |
), |
array( |
'title' => 'tags', |
'value' => sprintf('```%s```', json_encode(array('web'))), |
'short' => false |
), |
); |
|
foreach ($expected as $field) { |
$this->assertNotFalse(array_search($field, $attachment['fields'])); |
break; |
} |
} |
} |