ErrorLoggerTest   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 3
eloc 20
c 2
b 0
f 0
dl 0
loc 39
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A provideStatusCodes() 0 12 1
A delegatesIntoInternalLoggerWhenInvoked() 0 8 1
A setUp() 0 4 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ShlinkioTest\Shlink\Common\Logger;
6
7
use Exception;
8
use Laminas\Diactoros\Response;
9
use Laminas\Diactoros\ServerRequest;
10
use PHPUnit\Framework\TestCase;
11
use Prophecy\PhpUnit\ProphecyTrait;
12
use Prophecy\Prophecy\ObjectProphecy;
13
use Psr\Log\LoggerInterface;
14
use Psr\Log\LogLevel;
15
use Shlinkio\Shlink\Common\Logger\ErrorLogger;
16
17
class ErrorLoggerTest extends TestCase
18
{
19
    use ProphecyTrait;
20
21
    private ErrorLogger $errorLogger;
22
    private ObjectProphecy $logger;
23
24
    public function setUp(): void
25
    {
26
        $this->logger = $this->prophesize(LoggerInterface::class);
27
        $this->errorLogger = new ErrorLogger($this->logger->reveal());
28
    }
29
30
    /**
31
     * @test
32
     * @dataProvider provideStatusCodes
33
     */
34
    public function delegatesIntoInternalLoggerWhenInvoked(int $status, string $expectedLevel): void
35
    {
36
        $e = new Exception('Something wrong');
37
        $log = $this->logger->log($expectedLevel, (string) $e);
38
39
        ($this->errorLogger)($e, new ServerRequest(), (new Response())->withStatus($status));
40
41
        $log->shouldHaveBeenCalledOnce();
42
    }
43
44
    public function provideStatusCodes(): iterable
45
    {
46
        yield 'status 500' => [500, LogLevel::ERROR];
47
        yield 'status 503' => [503, LogLevel::ERROR];
48
        yield 'status 504' => [504, LogLevel::ERROR];
49
        yield 'status 400' => [400, LogLevel::DEBUG];
50
        yield 'status 401' => [401, LogLevel::DEBUG];
51
        yield 'status 403' => [403, LogLevel::DEBUG];
52
        yield 'status 404' => [404, LogLevel::DEBUG];
53
        yield 'status 499' => [499, LogLevel::DEBUG];
54
        yield 'status 200' => [200, LogLevel::DEBUG];
55
        yield 'status 301' => [301, LogLevel::DEBUG];
56
    }
57
}
58