Skip to content

Commit 95ea9f4

Browse files
committed
Fix self reference factory
1 parent 8845016 commit 95ea9f4

File tree

2 files changed

+25
-51
lines changed

2 files changed

+25
-51
lines changed

src/ServiceProvider/FrameworkServiceProvider.php

Lines changed: 2 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,8 @@
3333
* This class SHALL implement the ServiceProviderInterface and MUST delegate
3434
* its service discovery responsibilities to an internal AggregateServiceProvider.
3535
*/
36-
final class FrameworkServiceProvider implements ServiceProviderInterface
36+
final class FrameworkServiceProvider extends AggregateServiceProvider
3737
{
38-
/**
39-
* @var ServiceProviderInterface the aggregate container for framework service providers
40-
*/
41-
private ServiceProviderInterface $serviceProvider;
42-
4338
/**
4439
* Constructs the FrameworkServiceProvider.
4540
*
@@ -48,43 +43,8 @@ final class FrameworkServiceProvider implements ServiceProviderInterface
4843
*/
4944
public function __construct()
5045
{
51-
$this->serviceProvider = new AggregateServiceProvider(
46+
parent::__construct(
5247
new HttpServiceProvider(),
53-
// ErrorHandlerServiceProvider,
54-
// EventDispatcherServiceProvider,
55-
// LoggerServiceProvider,
56-
// CacheServiceProvider,
57-
// ConsoleServiceProvider,
58-
// TemplateRendererServiceProvider,
59-
// SecurityServiceProvider,
60-
// SessionServiceProvider,
61-
// ...
6248
);
6349
}
64-
65-
/**
66-
* Returns an array of service factory callables.
67-
*
68-
* This method MUST delegate to the internal AggregateServiceProvider and
69-
* return all service factories required for container instantiation.
70-
*
71-
* @return array<string, callable> an associative array of factory callables indexed by service IDs
72-
*/
73-
public function getFactories(): array
74-
{
75-
return $this->serviceProvider->getFactories();
76-
}
77-
78-
/**
79-
* Returns an array of service extension callables.
80-
*
81-
* This method MUST delegate to the internal AggregateServiceProvider and
82-
* return all service extensions used to decorate existing services.
83-
*
84-
* @return array<string, callable> an associative array of extension callables indexed by service IDs
85-
*/
86-
public function getExtensions(): array
87-
{
88-
return $this->serviceProvider->getExtensions();
89-
}
9050
}

tests/ServiceProvider/FrameworkServiceProviderTest.php

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44

55
namespace FastForward\Framework\Tests\ServiceProvider;
66

7+
use FastForward\Container\Factory\ServiceFactory;
78
use FastForward\Framework\ServiceProvider\FrameworkServiceProvider;
9+
use FastForward\Http\ServiceProvider\HttpServiceProvider;
810
use PHPUnit\Framework\Attributes\CoversClass;
911
use PHPUnit\Framework\TestCase;
1012
use Prophecy\PhpUnit\ProphecyTrait;
@@ -23,22 +25,34 @@ protected function setUp(): void
2325

2426
public function testGetFactoriesWillReturnHttpServiceProviderFactories(): void
2527
{
26-
$factories = $this->provider->getFactories();
28+
$expectedFactories = array_merge(
29+
(new HttpServiceProvider())->getFactories(),
30+
[FrameworkServiceProvider::class => new ServiceFactory($this->provider)]
31+
);
2732

28-
self::assertIsArray($factories);
29-
self::assertNotEmpty($factories);
30-
foreach ($factories as $factory) {
31-
self::assertIsCallable($factory);
33+
$actualFactories = $this->provider->getFactories();
34+
35+
foreach ($expectedFactories as $id => $factory) {
36+
self::assertArrayHasKey($id, $actualFactories);
37+
self::assertIsCallable($actualFactories[$id]);
3238
}
39+
40+
self::assertSameSize($expectedFactories, $actualFactories);
3341
}
3442

3543
public function testGetExtensionsWillReturnHttpServiceProviderExtensions(): void
3644
{
37-
$extensions = $this->provider->getExtensions();
45+
$expectedExtensions = array_merge(
46+
(new HttpServiceProvider())->getExtensions(),
47+
);
3848

39-
self::assertIsArray($extensions);
40-
foreach ($extensions as $extension) {
41-
self::assertIsCallable($extension);
49+
$actualExtensions = $this->provider->getExtensions();
50+
51+
foreach ($expectedExtensions as $id => $extension) {
52+
self::assertArrayHasKey($id, $actualExtensions);
53+
self::assertIsCallable($actualExtensions[$id]);
4254
}
55+
56+
self::assertSameSize($expectedExtensions, $actualExtensions);
4357
}
4458
}

0 commit comments

Comments
 (0)