From 76e5456530a02c825f3ac73781bee7c7bf9ee956 Mon Sep 17 00:00:00 2001 From: Cees-Jan Kiewiet Date: Mon, 16 Sep 2019 20:38:20 +0200 Subject: [PATCH] Add functional test --- tests/FunctionalTest.php | 156 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 156 insertions(+) create mode 100644 tests/FunctionalTest.php diff --git a/tests/FunctionalTest.php b/tests/FunctionalTest.php new file mode 100644 index 0000000..2c622ce --- /dev/null +++ b/tests/FunctionalTest.php @@ -0,0 +1,156 @@ +provideMonolog(); + + $monolog->info('message'); + + self::assertCount(1, $this->logs); + self::assertArrayHasKey('datetime', $this->logs[0]); + self::assertArrayHasKey('datetime', $this->logs[0]['context']); + self::assertArrayHasKey('runtime', $this->logs[0]['extra']); + self::assertSame($this->logs[0]['datetime'], $this->logs[0]['context']['datetime']); + unset($this->logs[0]['datetime'], $this->logs[0]['context']['datetime']); + + self::assertIsFloat($this->logs[0]['extra']['runtime']); + self::assertIsFloat($this->logs[0]['context']['extra']['runtime']); + self::assertSame($this->logs[0]['extra']['runtime'], $this->logs[0]['context']['extra']['runtime']); + unset($this->logs[0]['extra']['runtime'], $this->logs[0]['context']['extra']['runtime']); + + self::assertSame([ + [ + 'message' => 'message', + 'context' => [ + 'channel' => 'logger', + 'extra' => [ + 'version' => '1.2.3', + ], + ], + 'level' => 200, + 'level_name' => 'INFO', + 'channel' => 'logger', + 'extra' => [ + 'version' => '1.2.3', + ], + ], + ], $this->logs); + } + + public function testException(): void + { + $monolog = $this->provideMonolog(); + + $e = new \Exception('Poof!'); + $message = \sprintf('Uncaught Exception %s: "%s" at %s line %s', Utils::getClass($e), $e->getMessage(), $e->getFile(), $e->getLine()); + $trace = $e->getTrace(); + foreach ($trace as $index => $line) { + if (!isset($line['args'])) { + continue; + } + + unset($trace[$index]['args']); + } + $monolog->log( + LogLevel::ERROR, + $message, + ['exception' => $e] + ); + + self::assertCount(1, $this->logs); + self::assertArrayHasKey('datetime', $this->logs[0]); + self::assertArrayHasKey('datetime', $this->logs[0]['context']); + self::assertArrayHasKey('runtime', $this->logs[0]['extra']); + self::assertSame($this->logs[0]['datetime'], $this->logs[0]['context']['datetime']); + unset($this->logs[0]['datetime'], $this->logs[0]['context']['datetime']); + + self::assertIsFloat($this->logs[0]['extra']['runtime']); + self::assertIsFloat($this->logs[0]['context']['extra']['runtime']); + self::assertSame($this->logs[0]['extra']['runtime'], $this->logs[0]['context']['extra']['runtime']); + unset($this->logs[0]['extra']['runtime'], $this->logs[0]['context']['extra']['runtime']); + + self::assertSame([ + [ + 'message' => $message, + 'context' => [ + 'exception' => $e, + 'channel' => 'logger', + 'extra' => [ + 'trace' => $trace, + 'version' => '1.2.3', + 'exception_class' => 'Exception', + 'class_exception' => 'Exception', + ], + ], + 'level' => 400, + 'level_name' => 'ERROR', + 'channel' => 'logger', + 'extra' => [ + 'trace' => $trace, + 'version' => '1.2.3', + 'exception_class' => 'Exception', + 'class_exception' => 'Exception', + ], + ], + ], $this->logs); + } + + private function provideProcessors(): iterable + { + yield new ToContextProcessor(); + yield new CopyProcessor('extra.exception_class', 'extra.class_exception'); + yield new ExceptionClassProcessor(); + yield new KeyValueProcessor('version', '1.2.3'); + yield new RuntimeProcessor(); + yield new TraceProcessor(); + } + + private function provideMonolog(): Logger + { + $monolog = new Logger('logger'); + + $monolog->pushHandler(new class(function ($log): void { + $this->logs[] = $log; + }) extends AbstractHandler { + /** @var callable */ + private $handler; + + public function __construct(callable $handler) + { + $this->handler = $handler; + } + + public function handle(array $record): void + { + ($this->handler)($record); + } + }); + + foreach ($this->provideProcessors() as $processor) { + $monolog->pushProcessor($processor); + } + + return $monolog; + } +}