<?php namespace Tests\Library; class Logger { use \Library\LoggerTrait; } class LoggerTraitTest extends \PHPUnit_Framework_TestCase { public function test_default_init_logger() { $testlog = new \Tests\Library\Logger(); $this->assertNull($testlog->get_logger(), "no logger without init_logger()"); $testlog->init_logger([]); $logger = $testlog->get_logger(); $this->assertInstanceOf("\Monolog\Logger", $logger, 'get_logger() returns instance of \Monolog\Logger'); $this->assertEquals("default", $logger->getName(), "default name"); $handlers = $logger->getHandlers(); $this->assertEquals(1, count($handlers), "default logger has 1 handler"); $handler = $handlers[0]; $this->assertInstanceOf("\Monolog\Handler\StreamHandler", $handler, 'default log handler is a StreamHandler'); $this->assertEquals("php://stderr", $handler->getUrl(), "default log handler path (url)"); $this->assertEquals(\Monolog\Logger::toMonologLevel("info"), $handler->getLevel(), "default log handler level is 'info'"); $formatter = $handler->getFormatter(); $this->assertInstanceOf("\Monolog\Formatter\LineFormatter", $formatter, 'default log handler formatter is a LineFormatter'); } public function test_init_logger_single_handler() { $settings = [ "name" => "test-logger", "path" => "log/test.log", "level" => "debug", "format" => "[%datetime%]%level_name% %extra% %context%: %message%", // not testable ]; $testlog = new \Tests\Library\Logger(); $testlog->init_logger($settings); $logger = $testlog->get_logger(); $this->assertEquals($settings["name"], $logger->getName(), "name"); $handlers = $logger->getHandlers(); $this->assertEquals(1, count($handlers), "logger has 1 handler"); $handler = $handlers[0]; $this->assertEquals("./" . $settings["path"], $handler->getUrl(), "log handler path (with default basedir)"); $this->assertEquals(\Monolog\Logger::toMonologLevel($settings["level"]), $handler->getLevel(), "log handler level"); $basedir = "/var/log/local"; $testlog = new \Tests\Library\Logger(); $testlog->init_logger($settings, $basedir); $logger = $testlog->get_logger(); $this->assertEquals($settings["name"], $logger->getName(), "name"); $handlers = $logger->getHandlers(); $this->assertEquals(1, count($handlers), "logger has 1 handler"); $handler = $handlers[0]; $this->assertEquals("$basedir/" . $settings["path"], $handler->getUrl(), "log handler path (with passed basedir)"); $this->assertEquals(\Monolog\Logger::toMonologLevel($settings["level"]), $handler->getLevel(), "log handler level"); } public function test_init_logger_two_handlers() { $basedir = "/var/log/local"; $settings = [ "name" => "test-logger", "handler" => [ [ "path" => "log/test.log", "expectpath" => "$basedir/log/test.log", // expected path for testing "level" => "debug", "format" => "[%datetime%]%level_name% %extra% %context%: %message%", // not testable ], [ "path" => "php://stdout", "expectpath" => "php://stdout", "level" => "warning", "format" => "[%datetime%]%level_name% %extra% %context%: %message%", // not testable ], ], ]; $testlog = new \Tests\Library\Logger(); $testlog->init_logger($settings, $basedir); $logger = $testlog->get_logger(); $this->assertEquals($settings["name"], $logger->getName(), "name"); $expects = $settings["handler"]; $handlers = $logger->getHandlers(); $this->assertEquals(count($expects), count($handlers), "number of handlers in settings"); for ($i = 0; $i < count($expects); $i++) { $expect = $expects[$i]; $handler = array_pop($handlers); // handlers are in reverse order $this->assertEquals($expect["expectpath"], $handler->getUrl(), "$i: log handler path"); $this->assertEquals(\Monolog\Logger::toMonologLevel($expect["level"]), $handler->getLevel(), "$i: log handler level"); } } }