provideInstances()
last analyzed

Size

Total Lines 13
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 6
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 13

1 Method

Rating   Name   Duplication   Size   Complexity  
A LoggerAwareDelegatorFactoryTest.php$0 ➔ setLogger() 0 3 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ShlinkioTest\Shlink\Common\Logger;
6
7
use PHPUnit\Framework\Assert;
8
use PHPUnit\Framework\TestCase;
9
use Prophecy\PhpUnit\ProphecyTrait;
10
use Prophecy\Prophecy\ObjectProphecy;
11
use Psr\Container\ContainerInterface;
12
use Psr\Log;
13
use Psr\Log\LoggerInterface;
14
use Shlinkio\Shlink\Common\Logger\LoggerAwareDelegatorFactory;
15
use stdClass;
16
17
class LoggerAwareDelegatorFactoryTest extends TestCase
18
{
19
    use ProphecyTrait;
20
21
    private LoggerAwareDelegatorFactory $delegator;
22
    private ObjectProphecy $container;
23
24
    public function setUp(): void
25
    {
26
        $this->container = $this->prophesize(ContainerInterface::class);
27
        $this->delegator = new LoggerAwareDelegatorFactory();
28
    }
29
30
    /**
31
     * @test
32
     * @dataProvider provideInstances
33
     */
34
    public function injectsLoggerOnInstanceWhenImplementingLoggerAware(
35
        object $instance,
36
        bool $hasLogger,
37
        int $expectedHasLoggerCalls,
38
        int $expectedGetLoggerCalls
39
    ): void {
40
        $callback = fn () => $instance;
41
        $getLogger = $this->container->get(Log\LoggerInterface::class)->willReturn(new Log\NullLogger());
42
        $hasLogger = $this->container->has(Log\LoggerInterface::class)->willReturn($hasLogger);
43
44
        $result = ($this->delegator)($this->container->reveal(), '', $callback);
45
46
        $this->assertSame($instance, $result);
47
        $hasLogger->shouldHaveBeenCalledTimes($expectedHasLoggerCalls);
48
        $getLogger->shouldHaveBeenCalledTimes($expectedGetLoggerCalls);
49
    }
50
51
    public function provideInstances(): iterable
52
    {
53
        $loggerAware = new class implements Log\LoggerAwareInterface {
54
            public function setLogger(LoggerInterface $logger): void
55
            {
56
                Assert::assertInstanceOf(Log\NullLogger::class, $logger);
57
            }
58
        };
59
60
        yield 'no logger aware and no logger registered' => [new stdClass(), false, 0, 0];
61
        yield 'no logger aware and logger registered' => [new stdClass(), true, 0, 0];
62
        yield 'logger aware and no logger registered' => [$loggerAware, false, 1, 0];
63
        yield 'logger aware and logger registered' => [$loggerAware, true, 1, 1];
64
    }
65
}
66