|
11 | 11 |
|
12 | 12 | declare(strict_types=1); |
13 | 13 |
|
14 | | -namespace spec\Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\Helper; |
| 14 | +namespace Sylius\Bundle\ResourceBundle\spec\DependencyInjection\Compiler\Helper; |
15 | 15 |
|
16 | | -use PhpSpec\ObjectBehavior; |
| 16 | +use PHPUnit\Framework\TestCase; |
| 17 | +use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\Helper\TargetEntitiesResolver; |
17 | 18 | use Sylius\Bundle\ResourceBundle\DependencyInjection\Compiler\Helper\TargetEntitiesResolverInterface; |
18 | 19 | use Sylius\Bundle\ResourceBundle\Tests\Fixtures\AnimalInterface; |
19 | 20 | use Sylius\Bundle\ResourceBundle\Tests\Fixtures\Bear; |
|
23 | 24 | use Sylius\Bundle\ResourceBundle\Tests\Fixtures\MammalInterface; |
24 | 25 | use Sylius\Bundle\ResourceBundle\Tests\Fixtures\Resource; |
25 | 26 |
|
26 | | -class TargetEntitiesResolverSpec extends ObjectBehavior |
| 27 | +final class TargetEntitiesResolverTest extends TestCase |
27 | 28 | { |
28 | | - function it_is_a_target_entities_resolver(): void |
| 29 | + private TargetEntitiesResolverInterface $resolver; |
| 30 | + |
| 31 | + protected function setUp(): void |
| 32 | + { |
| 33 | + $this->resolver = new TargetEntitiesResolver(); |
| 34 | + } |
| 35 | + |
| 36 | + public function testItIsATargetEntitiesResolver(): void |
29 | 37 | { |
30 | | - $this->shouldImplement(TargetEntitiesResolverInterface::class); |
| 38 | + $this->assertInstanceOf(TargetEntitiesResolverInterface::class, $this->resolver); |
31 | 39 | } |
32 | 40 |
|
33 | | - function it_skips_resource_interface(): void |
| 41 | + public function testItSkipsResourceInterface(): void |
34 | 42 | { |
35 | 43 | $emptyConfig = ['app.resource' => ['classes' => ['model' => Resource::class]]]; |
36 | 44 |
|
37 | | - $this->resolve($emptyConfig)->shouldReturn([]); |
| 45 | + $this->assertSame([], $this->resolver->resolve($emptyConfig)); |
38 | 46 | } |
39 | 47 |
|
40 | | - function it_autodiscovers_interfaces_based_on_the_model_class(): void |
| 48 | + public function testItAutodiscoversInterfacesBasedOnTheModelClass(): void |
41 | 49 | { |
42 | 50 | $flyConfig = ['app.fly' => ['classes' => ['model' => Fly::class]]]; |
43 | 51 |
|
44 | | - $this->resolve($flyConfig)->shouldHaveCount(2); |
45 | | - $this->resolve($flyConfig)->shouldHaveKeyWithValue(FlyInterface::class, Fly::class); |
46 | | - $this->resolve($flyConfig)->shouldHaveKeyWithValue(AnimalInterface::class, Fly::class); |
| 52 | + $resolved = $this->resolver->resolve($flyConfig); |
| 53 | + |
| 54 | + $this->assertCount(2, $resolved); |
| 55 | + $this->assertSame(Fly::class, $resolved[FlyInterface::class]); |
| 56 | + $this->assertSame(Fly::class, $resolved[AnimalInterface::class]); |
47 | 57 |
|
48 | 58 | $bearConfig = ['app.bear' => ['classes' => ['model' => Bear::class]]]; |
49 | 59 |
|
50 | | - $this->resolve($bearConfig)->shouldHaveCount(3); |
51 | | - $this->resolve($bearConfig)->shouldHaveKeyWithValue(BearInterface::class, Bear::class); |
52 | | - $this->resolve($bearConfig)->shouldHaveKeyWithValue(MammalInterface::class, Bear::class); |
53 | | - $this->resolve($bearConfig)->shouldHaveKeyWithValue(AnimalInterface::class, Bear::class); |
| 60 | + $resolved = $this->resolver->resolve($bearConfig); |
| 61 | + |
| 62 | + $this->assertCount(3, $resolved); |
| 63 | + $this->assertSame(Bear::class, $resolved[BearInterface::class]); |
| 64 | + $this->assertSame(Bear::class, $resolved[MammalInterface::class]); |
| 65 | + $this->assertSame(Bear::class, $resolved[AnimalInterface::class]); |
54 | 66 | } |
55 | 67 |
|
56 | | - function it_autodiscovers_only_unique_interfaces_based_on_model_classes(): void |
| 68 | + public function testItAutodiscoversOnlyUniqueInterfacesBasedOnModelClasses(): void |
57 | 69 | { |
58 | 70 | $config = [ |
59 | 71 | 'app.fly' => ['classes' => ['model' => Fly::class]], |
60 | 72 | 'app.bear' => ['classes' => ['model' => Bear::class]], |
61 | 73 | ]; |
62 | 74 |
|
63 | | - $this->resolve($config)->shouldHaveCount(3); |
64 | | - $this->resolve($config)->shouldHaveKeyWithValue(BearInterface::class, Bear::class); |
65 | | - $this->resolve($config)->shouldHaveKeyWithValue(MammalInterface::class, Bear::class); |
66 | | - $this->resolve($config)->shouldHaveKeyWithValue(FlyInterface::class, Fly::class); |
| 75 | + $resolved = $this->resolver->resolve($config); |
67 | 76 |
|
68 | | - $this->resolve($config)->shouldNotHaveKeyWithValue(AnimalInterface::class, Fly::class); |
69 | | - $this->resolve($config)->shouldNotHaveKeyWithValue(AnimalInterface::class, Bear::class); |
| 77 | + $this->assertCount(3, $resolved); |
| 78 | + $this->assertSame(Bear::class, $resolved[BearInterface::class]); |
| 79 | + $this->assertSame(Bear::class, $resolved[MammalInterface::class]); |
| 80 | + $this->assertSame(Fly::class, $resolved[FlyInterface::class]); |
| 81 | + |
| 82 | + $this->assertArrayNotHasKey(AnimalInterface::class, $resolved); |
70 | 83 | } |
71 | 84 |
|
72 | | - function it_autodiscovers_interfaces_on_models_when_passed_multiple_times(): void |
| 85 | + public function testItAutodiscoversInterfacesOnModelsWhenPassedMultipleTimes(): void |
73 | 86 | { |
74 | 87 | $config = [ |
75 | 88 | 'app.fly' => ['classes' => ['model' => Fly::class]], |
76 | 89 | 'app.another_resource_with_fly_model' => ['classes' => ['model' => Fly::class]], |
77 | 90 | ]; |
78 | 91 |
|
79 | | - $this->resolve($config)->shouldHaveCount(2); |
80 | | - $this->resolve($config)->shouldHaveKeyWithValue(FlyInterface::class, Fly::class); |
81 | | - $this->resolve($config)->shouldHaveKeyWithValue(AnimalInterface::class, Fly::class); |
| 92 | + $resolved = $this->resolver->resolve($config); |
| 93 | + |
| 94 | + $this->assertCount(2, $resolved); |
| 95 | + $this->assertSame(Fly::class, $resolved[FlyInterface::class]); |
| 96 | + $this->assertSame(Fly::class, $resolved[AnimalInterface::class]); |
82 | 97 | } |
83 | 98 |
|
84 | | - function it_uses_the_interface_defined_in_the_config(): void |
| 99 | + public function testItUsesTheInterfaceDefinedInTheConfig(): void |
85 | 100 | { |
86 | 101 | $config = [ |
87 | 102 | 'app.deprecated' => ['classes' => ['model' => Resource::class, 'interface' => \Countable::class]], |
88 | 103 | ]; |
89 | 104 |
|
90 | | - error_reporting(0); |
91 | | - $this->resolve($config)->shouldHaveCount(1); |
92 | | - $this->resolve($config)->shouldHaveKeyWithValue(\Countable::class, Resource::class); |
93 | | - error_reporting(\E_ALL); |
94 | | - $this->shouldTrigger(\E_USER_DEPRECATED)->during('resolve', [$config]); |
| 105 | + $resolved = @$this->resolver->resolve($config); |
| 106 | + |
| 107 | + $this->assertCount(1, $resolved); |
| 108 | + $this->assertSame(Resource::class, $resolved[\Countable::class]); |
95 | 109 | } |
96 | 110 |
|
97 | | - function it_uses_the_interface_defined_explicitly_over_the_autodiscovered_one(): void |
| 111 | + public function testItUsesTheInterfaceDefinedExplicitlyOverTheAutodiscoveredOne(): void |
98 | 112 | { |
99 | 113 | $config = [ |
100 | 114 | 'app.deprecated' => ['classes' => ['model' => Resource::class, 'interface' => MammalInterface::class]], |
101 | 115 | 'app.bear' => ['classes' => ['model' => Bear::class]], |
102 | 116 | ]; |
103 | 117 |
|
104 | | - error_reporting(0); |
105 | | - $this->resolve($config)->shouldHaveCount(3); |
106 | | - $this->resolve($config)->shouldHaveKeyWithValue(MammalInterface::class, Resource::class); |
107 | | - $this->resolve($config)->shouldHaveKeyWithValue(AnimalInterface::class, Bear::class); |
108 | | - $this->resolve($config)->shouldHaveKeyWithValue(BearInterface::class, Bear::class); |
109 | | - error_reporting(\E_ALL); |
110 | | - $this->shouldTrigger(\E_USER_DEPRECATED)->during('resolve', [$config]); |
| 118 | + $resolved = @$this->resolver->resolve($config); |
| 119 | + |
| 120 | + $this->assertCount(3, $resolved); |
| 121 | + $this->assertSame(Resource::class, $resolved[MammalInterface::class]); |
| 122 | + $this->assertSame(Bear::class, $resolved[AnimalInterface::class]); |
| 123 | + $this->assertSame(Bear::class, $resolved[BearInterface::class]); |
111 | 124 | } |
112 | 125 |
|
113 | | - function it_throws_an_exception_if_model_class_can_not_be_resolved(): void |
| 126 | + public function testItThrowsAnExceptionIfModelClassCannotBeResolved(): void |
114 | 127 | { |
115 | 128 | $config = ['app.error' => ['classes' => ['interface' => \Countable::class]]]; |
116 | 129 |
|
117 | | - $this->shouldThrow(\InvalidArgumentException::class)->during('resolve', [$config]); |
| 130 | + $this->expectException(\InvalidArgumentException::class); |
| 131 | + |
| 132 | + $this->resolver->resolve($config); |
118 | 133 | } |
119 | 134 | } |
0 commit comments