Passed
Push — main ( 60c49f...544d0e )
by Chema
06:20 queued 04:56
created

AliasServicesTest   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 1
Metric Value
eloc 29
c 1
b 0
f 1
dl 0
loc 56
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A test_multiple_aliases_for_same_factory() 0 16 1
A test_alias_resolves_to_original_service() 0 12 1
A tearDown() 0 5 1
A test_alias_with_factory_service() 0 15 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace GacelaTest\Integration\Framework\Container;
6
7
use Gacela\Framework\Bootstrap\GacelaConfig;
8
use Gacela\Framework\Container\Container;
9
use Gacela\Framework\Gacela;
10
use PHPUnit\Framework\TestCase;
11
use ReflectionClass;
12
use stdClass;
13
14
final class AliasServicesTest extends TestCase
15
{
16
    protected function tearDown(): void
17
    {
18
        $reflection = new ReflectionClass(Gacela::class);
19
        $method = $reflection->getMethod('resetCache');
20
        $method->invoke(null);
21
    }
22
23
    public function test_alias_resolves_to_original_service(): void
24
    {
25
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
26
            $config->addBinding('original-service', static fn (): stdClass => new stdClass());
27
            $config->addAlias('alias-service', 'original-service');
28
        });
29
30
        $container = Container::withConfig(\Gacela\Framework\Config\Config::getInstance());
31
32
        $alias = $container->get('alias-service');
33
34
        self::assertInstanceOf(stdClass::class, $alias, 'Alias should resolve using the binding');
35
    }
36
37
    public function test_multiple_aliases_for_same_factory(): void
38
    {
39
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
40
            $config->addFactory('factory', static fn (): stdClass => new stdClass());
41
            $config->addAlias('alias1', 'factory');
42
            $config->addAlias('alias2', 'factory');
43
        });
44
45
        $container = Container::withConfig(\Gacela\Framework\Config\Config::getInstance());
46
47
        $instance1 = $container->get('alias1');
48
        $instance2 = $container->get('alias2');
49
50
        self::assertInstanceOf(stdClass::class, $instance1);
51
        self::assertInstanceOf(stdClass::class, $instance2);
52
        self::assertNotSame($instance1, $instance2, 'Aliases to factory should each return new instances');
53
    }
54
55
    public function test_alias_with_factory_service(): void
56
    {
57
        Gacela::bootstrap(__DIR__, static function (GacelaConfig $config): void {
58
            $config->addFactory('factory-service', static fn (): stdClass => new stdClass());
59
            $config->addAlias('alias-factory', 'factory-service');
60
        });
61
62
        $container = Container::withConfig(\Gacela\Framework\Config\Config::getInstance());
63
64
        $instance1 = $container->get('factory-service');
65
        $instance2 = $container->get('alias-factory');
66
67
        self::assertInstanceOf(stdClass::class, $instance1);
68
        self::assertInstanceOf(stdClass::class, $instance2);
69
        self::assertNotSame($instance1, $instance2, 'Factory service should return new instances even through alias');
70
    }
71
}
72