Skip to content
Snippets Groups Projects
LoggerTraitTest.php 4.37 KiB
Newer Older
<?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");
        }
    }