|
4 | 4 |
|
5 | 5 | namespace Constructo\Test\Core\Fake\Resolver; |
6 | 6 |
|
7 | | -use Constructo\Core\Fake\Resolver\FromDependency; |
| 7 | +use Constructo\Support\Reflective\Notation; |
8 | 8 | use Constructo\Support\Set; |
9 | | -use Constructo\Test\Stub\Domain\Entity\Game; |
10 | 9 | use PHPUnit\Framework\TestCase; |
11 | | -use ReflectionMethod; |
| 10 | +use Constructo\Support\Reflective\Factory\Target; |
| 11 | +use Constructo\Test\Stub\Builtin; |
| 12 | +use Constructo\Test\Stub\Complex; |
| 13 | +use Constructo\Test\Stub\EntityStub; |
| 14 | +use Constructo\Test\Stub\Intersection; |
| 15 | +use Constructo\Test\Stub\Type\Intersected; |
| 16 | +use Constructo\Test\Stub\Union; |
| 17 | +use Constructo\Test\Stub\Variety; |
| 18 | +use Constructo\Core\Fake\Resolver\FromDependency; |
12 | 19 |
|
13 | 20 | final class FromDependencyTest extends TestCase |
14 | 21 | { |
15 | 22 | public function testShouldResolveClassDependency(): void |
16 | 23 | { |
17 | | - $resolver = new FromDependency(); |
18 | | - $method = new ReflectionMethod($this, 'methodWithClassDependency'); |
19 | | - $parameter = $method->getParameters()[0]; |
20 | | - $presets = Set::createFrom([]); |
| 24 | + $resolver = new FromDependency(Notation::SNAKE); |
| 25 | + $target = Target::createFrom(Complex::class); |
| 26 | + $parameters = $target->getReflectionParameters(); |
| 27 | + |
| 28 | + [0 => $entityParameter] = $parameters; |
| 29 | + |
| 30 | + $set = Set::createFrom([]); |
| 31 | + $value = $resolver->resolve($entityParameter, $set); |
| 32 | + |
| 33 | + $this->assertNotNull($value); |
| 34 | + $this->assertIsArray($value->content); |
| 35 | + $this->assertArrayHasKey('id', $value->content); |
| 36 | + $this->assertArrayHasKey('price', $value->content); |
| 37 | + $this->assertArrayHasKey('name', $value->content); |
| 38 | + $this->assertArrayHasKey('is_active', $value->content); |
| 39 | + } |
| 40 | + |
| 41 | + public function testShouldNotResolveBuiltinType(): void |
| 42 | + { |
| 43 | + $resolver = new FromDependency(Notation::SNAKE); |
| 44 | + $target = Target::createFrom(Builtin::class); |
| 45 | + $parameters = $target->getReflectionParameters(); |
21 | 46 |
|
22 | | - $result = $resolver->resolve($parameter, $presets); |
| 47 | + [0 => $stringParameter] = $parameters; |
23 | 48 |
|
24 | | - $this->assertNotNull($result); |
25 | | - $this->assertIsArray($result->get()); |
| 49 | + $set = Set::createFrom([]); |
| 50 | + $value = $resolver->resolve($stringParameter, $set); |
| 51 | + |
| 52 | + $this->assertNull($value); |
26 | 53 | } |
27 | 54 |
|
28 | | - public function testShouldReturnNullForBuiltinType(): void |
| 55 | + public function testShouldNotResolveEnumType(): void |
29 | 56 | { |
30 | | - $resolver = new FromDependency(); |
31 | | - $method = new ReflectionMethod($this, 'methodWithBuiltinType'); |
32 | | - $parameter = $method->getParameters()[0]; |
33 | | - $presets = Set::createFrom([]); |
| 57 | + $resolver = new FromDependency(Notation::SNAKE); |
| 58 | + $target = Target::createFrom(EntityStub::class); |
| 59 | + $parameters = $target->getReflectionParameters(); |
| 60 | + |
| 61 | + [8 => $enumParameter] = $parameters; |
34 | 62 |
|
35 | | - $result = $resolver->resolve($parameter, $presets); |
| 63 | + $set = Set::createFrom([]); |
| 64 | + $value = $resolver->resolve($enumParameter, $set); |
36 | 65 |
|
37 | | - $this->assertNull($result); |
| 66 | + $this->assertNull($value); |
38 | 67 | } |
39 | 68 |
|
40 | | - public function testShouldReturnNullForIntersectionType(): void |
| 69 | + public function testShouldNotResolveIntersectionType(): void |
41 | 70 | { |
42 | | - $resolver = new FromDependency(); |
43 | | - $method = new ReflectionMethod($this, 'methodWithIntersectionType'); |
44 | | - $parameter = $method->getParameters()[0]; |
45 | | - $presets = Set::createFrom([]); |
| 71 | + $resolver = new FromDependency(Notation::SNAKE); |
| 72 | + $target = Target::createFrom(Variety::class); |
| 73 | + $parameters = $target->getReflectionParameters(); |
46 | 74 |
|
47 | | - $result = $resolver->resolve($parameter, $presets); |
| 75 | + [1 => $intersectionParameter] = $parameters; |
48 | 76 |
|
49 | | - $this->assertNull($result); |
| 77 | + $set = Set::createFrom([]); |
| 78 | + $value = $resolver->resolve($intersectionParameter, $set); |
| 79 | + |
| 80 | + $this->assertNull($value); |
50 | 81 | } |
51 | 82 |
|
52 | | - private function methodWithClassDependency(Game $game): void |
| 83 | + public function testShouldResolveUnionTypeWithFirstEligibleType(): void |
53 | 84 | { |
| 85 | + $resolver = new FromDependency(Notation::SNAKE); |
| 86 | + $target = Target::createFrom(Union::class); |
| 87 | + $parameters = $target->getReflectionParameters(); |
| 88 | + |
| 89 | + [2 => $nativeUnionParameter] = $parameters; |
| 90 | + |
| 91 | + $set = Set::createFrom([]); |
| 92 | + $value = $resolver->resolve($nativeUnionParameter, $set); |
| 93 | + |
| 94 | + $this->assertNotNull($value); |
| 95 | + $this->assertIsArray($value->content); |
54 | 96 | } |
55 | 97 |
|
56 | | - private function methodWithBuiltinType(string $value): void |
| 98 | + public function testShouldFallbackToNextResolverForNonExistingClass(): void |
57 | 99 | { |
| 100 | + $resolver = new FromDependency(Notation::SNAKE); |
| 101 | + $target = Target::createFrom(Intersection::class); |
| 102 | + $parameters = $target->getReflectionParameters(); |
| 103 | + |
| 104 | + [0 => $intersectedParameter] = $parameters; |
| 105 | + |
| 106 | + $set = Set::createFrom(['intersected' => new Intersected()]); |
| 107 | + $value = $resolver->resolve($intersectedParameter, $set); |
| 108 | + |
| 109 | + $this->assertNull($value); |
58 | 110 | } |
59 | 111 |
|
60 | | - private function methodWithIntersectionType(\Countable&\Iterator $value): void |
| 112 | + public function testShouldReturnNullForParameterWithoutType(): void |
61 | 113 | { |
| 114 | + $resolver = new FromDependency(Notation::SNAKE); |
| 115 | + $target = Target::createFrom(Variety::class); |
| 116 | + $parameters = $target->getReflectionParameters(); |
| 117 | + |
| 118 | + [3 => $whateverParameter] = $parameters; |
| 119 | + |
| 120 | + $set = Set::createFrom([]); |
| 121 | + $value = $resolver->resolve($whateverParameter, $set); |
| 122 | + |
| 123 | + $this->assertNull($value); |
62 | 124 | } |
63 | 125 | } |
0 commit comments