From 080e74e38f6048c57ec7697cb0b5225b89cdd1c9 Mon Sep 17 00:00:00 2001 From: ppelgrims Date: Fri, 7 Feb 2025 13:04:06 +0100 Subject: [PATCH] Switch container for application in resolve attribute --- src/Laravel/Attributes/Resolve.php | 6 ++-- src/Laravel/Attributes/ResolveTest.php | 47 +++++++++++--------------- 2 files changed, 22 insertions(+), 31 deletions(-) diff --git a/src/Laravel/Attributes/Resolve.php b/src/Laravel/Attributes/Resolve.php index b750e7b..f5afd1e 100644 --- a/src/Laravel/Attributes/Resolve.php +++ b/src/Laravel/Attributes/Resolve.php @@ -6,7 +6,7 @@ use Attribute; use Closure; -use Illuminate\Container\Container; +use Illuminate\Foundation\Application; /** * @deprecated 8.3 @@ -33,7 +33,7 @@ public function __construct( $this->using = $using ? $using(...) : null; } - public function __invoke(string $abstract, Container $app): mixed + public function __invoke(string $abstract, Application $app): mixed { // If the property is set to be resolved by alias, we should use the alias instead of the abstract // classFQN. This is useful when working with fakes that may be bound to multiple abstractions... @@ -74,7 +74,7 @@ public function __invoke(string $abstract, Container $app): mixed return $instance; } - private function addConditionalBindingsToAbstract(string $abstract, Container $app): void + private function addConditionalBindingsToAbstract(string $abstract, Application $app): void { foreach ($this->with as $binding => $implementation) { $app->when($abstract) diff --git a/src/Laravel/Attributes/ResolveTest.php b/src/Laravel/Attributes/ResolveTest.php index 026f247..9f79818 100644 --- a/src/Laravel/Attributes/ResolveTest.php +++ b/src/Laravel/Attributes/ResolveTest.php @@ -8,19 +8,17 @@ use Craftzing\TestBench\Laravel\Attributes\TestFixture\FakeService; use Craftzing\TestBench\Laravel\Attributes\TestFixture\Service; use Craftzing\TestBench\Laravel\Attributes\TestFixture\ServiceDecorator; -use Illuminate\Container\Container; +use Craftzing\TestBench\Laravel\TestCase; use PHPUnit\Framework\Attributes\Test; -use PHPUnit\Framework\TestCase; final class ResolveTest extends TestCase { #[Test] public function itCanReturnTheInstance(): void { - $container = new Container(); - $container->bind(Service::class, FakeService::class); + $this->app->bind(Service::class, FakeService::class); - $resolved = (new Resolve())(Service::class, $container); + $resolved = (new Resolve())(Service::class, $this->app); $this->assertInstanceOf(FakeService::class, $resolved); } @@ -28,10 +26,9 @@ public function itCanReturnTheInstance(): void #[Test] public function itCanSwapAnImplementation(): void { - $container = new Container(); - $container->bind(Service::class, FakeService::class); + $this->app->bind(Service::class, FakeService::class); - $resolved = (new Resolve(swap: Service::class))(AlternateFakeService::class, $container); + $resolved = (new Resolve(swap: Service::class))(AlternateFakeService::class, $this->app); $this->assertInstanceOf(AlternateFakeService::class, $resolved); } @@ -39,11 +36,10 @@ public function itCanSwapAnImplementation(): void #[Test] public function itCanResolveAnImplementationWithoutDecorators(): void { - $container = new Container(); - $container->bind(Service::class, FakeService::class); - $container->extend(Service::class, fn (Service $service): Service => new ServiceDecorator($service)); + $this->app->bind(Service::class, FakeService::class); + $this->app->extend(Service::class, fn (Service $service): Service => new ServiceDecorator($service)); - $resolved = (new Resolve(withoutDecorators: true))(Service::class, $container); + $resolved = (new Resolve(withoutDecorators: true))(Service::class, $this->app); $this->assertInstanceOf(FakeService::class, $resolved); } @@ -51,10 +47,9 @@ public function itCanResolveAnImplementationWithoutDecorators(): void #[Test] public function itCanResolveTheImplementationByAliasNameInsteadOfFQN(): void { - $container = new Container(); - $container->bind('service', FakeService::class); + $this->app->bind('service', FakeService::class); - $resolved = (new Resolve(alias: 'service'))(Service::class, $container); + $resolved = (new Resolve(alias: 'service'))(Service::class, $this->app); $this->assertInstanceOf(FakeService::class, $resolved); } @@ -62,10 +57,9 @@ public function itCanResolveTheImplementationByAliasNameInsteadOfFQN(): void #[Test] public function itCanDropTheBindingOfTheImplementation(): void { - $container = new Container(); - $container->bind(FakeService::class, fn (): Service => new FakeService(1)); + $this->app->bind(FakeService::class, fn (): Service => new FakeService(1)); - $resolved = (new Resolve(unbind: true))(FakeService::class, $container); + $resolved = (new Resolve(unbind: true))(FakeService::class, $this->app); $this->assertInstanceOf(FakeService::class, $resolved); $this->assertNull($resolved->value); @@ -75,10 +69,9 @@ public function itCanDropTheBindingOfTheImplementation(): void public function itCanResolveTheImplementationWithParameters(): void { $expectedValue = 1; - $container = new Container(); - $container->bind(Service::class, FakeService::class); + $this->app->bind(Service::class, FakeService::class); - $resolved = (new Resolve(with: ['$value' => $expectedValue]))(FakeService::class, $container); + $resolved = (new Resolve(with: ['$value' => $expectedValue]))(FakeService::class, $this->app); $this->assertEquals($expectedValue, $resolved->value); } @@ -86,11 +79,10 @@ public function itCanResolveTheImplementationWithParameters(): void #[Test] public function itCanRebindAnImplementationAsSingleton(): void { - $container = new Container(); - $container->bind(FakeService::class, FakeService::class); + $this->app->bind(FakeService::class, FakeService::class); - $firstTimeResolved = (new Resolve(singleton: true))(FakeService::class, $container); - $secondTimeResolved = (new Resolve())(FakeService::class, $container); + $firstTimeResolved = (new Resolve(singleton: true))(FakeService::class, $this->app); + $secondTimeResolved = (new Resolve())(FakeService::class, $this->app); $this->assertSame($firstTimeResolved, $secondTimeResolved); } @@ -98,11 +90,10 @@ public function itCanRebindAnImplementationAsSingleton(): void #[Test] public function itCanResolveTheImplementationUsingACallback(): void { - $container = new Container(); - $container->bind(Service::class, FakeService::class); + $this->app->bind(Service::class, FakeService::class); $callback = fn (Service $service): Service => new ServiceDecorator($service); - $resolved = (new Resolve(using: $callback))(Service::class, $container); + $resolved = (new Resolve(using: $callback))(Service::class, $this->app); $this->assertInstanceOf(ServiceDecorator::class, $resolved); }