Passed
Push — main ( a46516...08d8b4 )
by Chema
53s queued 14s
created

test_missing_interface_dependency()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
nc 1
nop 0
dl 0
loc 8
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace GacelaTest\Unit;
6
7
use Gacela\Container\DependencyResolver;
8
use Gacela\Container\Exception\DependencyInvalidArgumentException;
9
use Gacela\Container\Exception\DependencyNotFoundException;
10
use GacelaTest\Fake\Person;
11
use GacelaTest\Fake\PersonInterface;
12
use PHPUnit\Framework\TestCase;
13
14
final class CallableDependencyResolverTest extends TestCase
15
{
16
    public function test_without_dependencies(): void
17
    {
18
        $resolver = new DependencyResolver();
19
        $actual = $resolver->resolveDependencies(static function () {
20
            return [];
21
        });
22
23
        self::assertSame([], $actual);
24
    }
25
26
    public function test_object_dependencies(): void
27
    {
28
        $resolver = new DependencyResolver();
29
        $actual = $resolver->resolveDependencies(static function (Person $person) {
30
            return $person;
31
        });
32
33
        $expected = [new Person()];
34
35
        self::assertEquals($expected, $actual);
36
    }
37
38
    public function test_interface_dependency(): void
39
    {
40
        $resolver = new DependencyResolver([
41
            PersonInterface::class => Person::class,
42
        ]);
43
        $actual = $resolver->resolveDependencies(static function (PersonInterface $person) {
44
            return $person;
45
        });
46
47
        $expected = [new Person()];
48
49
        self::assertEquals($expected, $actual);
50
    }
51
52
    public function test_use_mapped_interface_dependency(): void
53
    {
54
        $person = new Person();
55
        $person->name = 'anything';
56
57
        $resolver = new DependencyResolver([
58
            PersonInterface::class => $person,
59
        ]);
60
61
        $actual = $resolver->resolveDependencies(static function (PersonInterface $person) {
62
            return $person;
63
        });
64
65
        $expected = [$person];
66
67
        self::assertSame($expected, $actual);
68
    }
69
70
    public function test_missing_interface_dependency(): void
71
    {
72
        $this->expectExceptionObject(DependencyNotFoundException::mapNotFoundForClassName(PersonInterface::class));
73
74
        $resolver = new DependencyResolver();
75
76
        $resolver->resolveDependencies(static function (PersonInterface $person) {
77
            return $person;
78
        });
79
    }
80
81
    public function test_missing_default_raw_dependency_value(): void
82
    {
83
        $this->expectExceptionObject(DependencyInvalidArgumentException::unableToResolve('string', self::class));
84
85
        $resolver = new DependencyResolver();
86
        $resolver->resolveDependencies(static function (string $name) {
87
            return $name;
88
        });
89
    }
90
91
    public function test_missing_param_types_on_dependency_value(): void
92
    {
93
        $this->expectExceptionObject(DependencyInvalidArgumentException::noParameterTypeFor('name'));
94
95
        $resolver = new DependencyResolver();
96
        $resolver->resolveDependencies(static function ($name) {
97
            return $name;
98
        });
99
    }
100
}
101