From 505c7a28c70107a23cd89595332aaee3332e7c10 Mon Sep 17 00:00:00 2001 From: KevinMartinsDev Date: Sun, 19 Apr 2026 17:07:23 +0200 Subject: [PATCH 1/2] feat(openapi): implement ResetInterface in OpenApiFactory --- src/OpenApi/Factory/OpenApiFactory.php | 9 ++++- .../Tests/Factory/OpenApiFactoryTest.php | 34 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/OpenApi/Factory/OpenApiFactory.php b/src/OpenApi/Factory/OpenApiFactory.php index 351b9d68193..5fc35811c59 100644 --- a/src/OpenApi/Factory/OpenApiFactory.php +++ b/src/OpenApi/Factory/OpenApiFactory.php @@ -62,11 +62,12 @@ use Symfony\Component\Routing\RouterInterface; use Symfony\Component\TypeInfo\Type; use Symfony\Component\TypeInfo\TypeIdentifier; +use Symfony\Contracts\Service\ResetInterface; /** * Generates an Open API v3 specification. */ -final class OpenApiFactory implements OpenApiFactoryInterface +final class OpenApiFactory implements OpenApiFactoryInterface, ResetInterface { use NormalizeOperationNameTrait; use StateOptionsTrait; @@ -1065,4 +1066,10 @@ private function getErrorResource(string $error, ?int $status = null, ?string $d return $this->localErrorResourceCache[$error] = $errorResource; } + + public function reset(): void + { + $this->routeCollection = null; + $this->localErrorResourceCache = []; + } } diff --git a/src/OpenApi/Tests/Factory/OpenApiFactoryTest.php b/src/OpenApi/Tests/Factory/OpenApiFactoryTest.php index d8773f8c7a6..509a8efd8d8 100644 --- a/src/OpenApi/Tests/Factory/OpenApiFactoryTest.php +++ b/src/OpenApi/Tests/Factory/OpenApiFactoryTest.php @@ -1438,4 +1438,38 @@ public function testGetExtensionPropertiesWithFalseValue(): void $openApi = $factory->__invoke(); } + + public function testReset(): void + { + $resourceNameCollectionFactory = $this->createMock(ResourceNameCollectionFactoryInterface::class); + $resourceCollectionMetadataFactory = $this->createMock(ResourceMetadataCollectionFactoryInterface::class); + $propertyNameCollectionFactory = $this->createMock(PropertyNameCollectionFactoryInterface::class); + $propertyMetadataFactory = $this->createMock(PropertyMetadataFactoryInterface::class); + $schemaFactory = $this->createMock(\ApiPlatform\JsonSchema\SchemaFactoryInterface::class); + + $factory = new OpenApiFactory( + $resourceNameCollectionFactory, + $resourceCollectionMetadataFactory, + $propertyNameCollectionFactory, + $propertyMetadataFactory, + $schemaFactory + ); + + $refl = new \ReflectionClass($factory); + $routeCollection = $refl->getProperty('routeCollection'); + $routeCollection->setAccessible(true); + $routeCollection->setValue($factory, new \Symfony\Component\Routing\RouteCollection()); + + $localErrorResourceCache = $refl->getProperty('localErrorResourceCache'); + $localErrorResourceCache->setAccessible(true); + $localErrorResourceCache->setValue($factory, ['foo' => 'bar']); + + $this->assertNotNull($routeCollection->getValue($factory)); + $this->assertNotEmpty($localErrorResourceCache->getValue($factory)); + + $factory->reset(); + + $this->assertNull($routeCollection->getValue($factory)); + $this->assertEmpty($localErrorResourceCache->getValue($factory)); + } } From 690d596fba462bb30beb32470ea8d3032edd53e7 Mon Sep 17 00:00:00 2001 From: KevinMartinsDev Date: Sun, 19 Apr 2026 17:18:34 +0200 Subject: [PATCH 2/2] test(openapi): fix RouteCollection class not found in testReset --- src/OpenApi/Tests/Factory/OpenApiFactoryTest.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/OpenApi/Tests/Factory/OpenApiFactoryTest.php b/src/OpenApi/Tests/Factory/OpenApiFactoryTest.php index 509a8efd8d8..9c26b8e971c 100644 --- a/src/OpenApi/Tests/Factory/OpenApiFactoryTest.php +++ b/src/OpenApi/Tests/Factory/OpenApiFactoryTest.php @@ -1458,7 +1458,9 @@ public function testReset(): void $refl = new \ReflectionClass($factory); $routeCollection = $refl->getProperty('routeCollection'); $routeCollection->setAccessible(true); - $routeCollection->setValue($factory, new \Symfony\Component\Routing\RouteCollection()); + if (class_exists(\Symfony\Component\Routing\RouteCollection::class)) { + $routeCollection->setValue($factory, $this->createMock(\Symfony\Component\Routing\RouteCollection::class)); + } $localErrorResourceCache = $refl->getProperty('localErrorResourceCache'); $localErrorResourceCache->setAccessible(true);