Skip to content

Commit de35b92

Browse files
committed
update tests, remove OperationID process from openApi generator
1 parent aa3eb36 commit de35b92

File tree

4 files changed

+262
-251
lines changed

4 files changed

+262
-251
lines changed

phpunit.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
>
1010
<testsuites>
1111
<testsuite name="Test Suite">
12-
<directory>tests</directory>
12+
<directory>tests/</directory>
1313
</testsuite>
1414
</testsuites>
1515

src/OpenApiRouteLoader.php

Lines changed: 24 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44

55
namespace Tobion\OpenApiSymfonyRouting;
66

7-
use OpenApi\Analysers\AttributeAnnotationFactory;
8-
use OpenApi\Analysers\DocBlockAnnotationFactory;
9-
use OpenApi\Analysers\ReflectionAnalyser;
107
use OpenApi\Analysis;
118
use OpenApi\Annotations\OpenApi;
129
use OpenApi\Annotations\Operation;
@@ -30,6 +27,11 @@ class OpenApiRouteLoader implements RouteLoaderInterface
3027
*/
3128
private $routeNames = [];
3229

30+
/**
31+
* @var null|Generator
32+
*/
33+
private $generator = null;
34+
3335
/**
3436
* @var string
3537
*/
@@ -89,16 +91,33 @@ private function createOpenApi(): OpenApi
8991
return \OpenApi\scan($this->finder);
9092
}
9193

94+
if (null !== $this->generator) {
95+
return $this->generator->generate($this>finder);
96+
}
97+
9298
if (method_exists(Analysis::class, 'processors')) {
9399
$processors = array_filter(Analysis::processors(), static function ($processor): bool {
94100
// remove OperationId processor which would hash the controller starting in 3.2.2 breaking the default route name logic
95101
return !$processor instanceof OperationId && !$processor instanceof DocBlockDescriptions;
96102
});
97103

98-
return (new Generator())->setProcessors($processors)->generate($this->finder);
104+
$this->generator = (new Generator())->setProcessors($processors);
105+
106+
return $this->generator->generate($this->finder);
99107
}
100108

101-
return (new Generator())->generate($this->finder);
109+
$this->generator = new Generator();
110+
$processors = $this->generator->getProcessors();
111+
112+
foreach ($processors as $key => $processor) {
113+
if ($processor instanceof OperationId) {
114+
unset($processors[$key]);
115+
}
116+
}
117+
118+
$this->generator->setProcessors($processors);
119+
120+
return $this->generator->generate($this->finder);
102121
}
103122

104123
/**

tests/Annotations/OpenApiRouteLoaderAnnotationsTest.php

Lines changed: 118 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -20,24 +20,23 @@
2020
use Tobion\OpenApiSymfonyRouting\Tests\Annotations\Fixtures\SeveralHttpMethods\Controller as SeveralHttpMethodsController;
2121
use Tobion\OpenApiSymfonyRouting\Tests\Annotations\Fixtures\SeveralRoutesOnOneAction\Controller as SeveralRoutesOnOneActionController;
2222

23-
class OpenApiRouteLoaderAnnotationsTest extends TestCase
23+
final class OpenApiRouteLoaderAnnotationsTest extends TestCase
2424
{
25-
private const FIXTURES_ROUTE_NAME_PREFIX = 'tobion_openapisymfonyrouting_tests_fixtures_annotations_';
25+
private const FIXTURES_ROUTE_NAME_PREFIX = 'tobion_openapisymfonyrouting_tests_annotations_fixtures_';
2626

2727
public function testBasic(): void
2828
{
2929
$routeLoader = OpenApiRouteLoader::fromDirectories(__DIR__.'/Fixtures/Basic');
3030

3131
$routes = $routeLoader->__invoke();
3232

33-
foreach ($routes as $route) {
34-
$this->assertEquals(
35-
$route,
36-
(new Route('/foobar'))
37-
->setMethods('GET')
38-
->setDefault('_controller', BasicController::class.'::__invoke')
39-
);
40-
}
33+
$expectedRoutes = new RouteCollection();
34+
$expectedRoutes->add(
35+
self::FIXTURES_ROUTE_NAME_PREFIX.'basic__invoke',
36+
(new Route('/foobar'))->setMethods('GET')->setDefault('_controller', BasicController::class.'::__invoke')
37+
);
38+
39+
self::assertEquals($expectedRoutes, $routes);
4140
}
4241

4342
public function testFormatSuffix(): void
@@ -46,24 +45,21 @@ public function testFormatSuffix(): void
4645

4746
$routes = $routeLoader->__invoke();
4847

49-
$expectedRoutes = [];
50-
$expectedRoutes[] = (new Route('/a.{_format}'))
51-
->setDefault('_format', null)
52-
->setMethods('GET')
53-
->setDefault('_controller', FormatSuffixController::class.'::inheritEnabledFormatSuffix');
54-
$expectedRoutes[] = (new Route('/b.{_format}'))
55-
->setDefault('_format', null)
56-
->setRequirement('_format', 'json|xml')
57-
->setMethods('GET')
58-
->setDefault('_controller', FormatSuffixController::class.'::defineFormatPattern');
59-
$expectedRoutes[] = (new Route('/c'))
60-
->setMethods('GET')
61-
->setDefault('_controller', FormatSuffixController::class.'::disableFormatSuffix');
62-
63-
$index = 0;
64-
foreach ($routes as $route) {
65-
$this->assertEquals($route, $expectedRoutes[$index++]);
66-
}
48+
$expectedRoutes = new RouteCollection();
49+
$expectedRoutes->add(
50+
self::FIXTURES_ROUTE_NAME_PREFIX.'formatsuffix_inheritenabledformatsuffix',
51+
(new Route('/a.{_format}'))->setDefault('_format', null)->setMethods('GET')->setDefault('_controller', FormatSuffixController::class.'::inheritEnabledFormatSuffix')
52+
);
53+
$expectedRoutes->add(
54+
self::FIXTURES_ROUTE_NAME_PREFIX.'formatsuffix_defineformatpattern',
55+
(new Route('/b.{_format}'))->setDefault('_format', null)->setRequirement('_format', 'json|xml')->setMethods('GET')->setDefault('_controller', FormatSuffixController::class.'::defineFormatPattern')
56+
);
57+
$expectedRoutes->add(
58+
self::FIXTURES_ROUTE_NAME_PREFIX.'formatsuffix_disableformatsuffix',
59+
(new Route('/c'))->setMethods('GET')->setDefault('_controller', FormatSuffixController::class.'::disableFormatSuffix')
60+
);
61+
62+
self::assertEquals($expectedRoutes, $routes);
6763
}
6864

6965
public function testOperationId(): void
@@ -87,22 +83,22 @@ public function testPathParameterPattern(): void
8783

8884
$routes = $routeLoader->__invoke();
8985

90-
$expectedRoutes = [];
91-
$expectedRoutes[] = (new Route('/foo/{id}'))
92-
->setMethods('GET')
93-
->setDefault('_controller', PathParameterPatternController::class.'::noPattern');
94-
$expectedRoutes[] = (new Route('/baz/{id}'))
95-
->setMethods('GET')
96-
->setDefault('_controller', PathParameterPatternController::class.'::noSchema');
97-
$expectedRoutes[] = (new Route('/bar/{id}'))
98-
->setRequirement('id', '^[a-zA-Z0-9]+$')
99-
->setMethods('GET')
100-
->setDefault('_controller', PathParameterPatternController::class.'::withPattern');
101-
102-
$index = 0;
103-
foreach ($routes as $route) {
104-
$this->assertEquals($route, $expectedRoutes[$index++]);
105-
}
86+
$expectedRoutes = new RouteCollection();
87+
$expectedRoutes->add(
88+
self::FIXTURES_ROUTE_NAME_PREFIX.'pathparameterpattern_nopattern',
89+
(new Route('/foo/{id}'))->setMethods('GET')->setDefault('_controller', PathParameterPatternController::class.'::noPattern')
90+
);
91+
$expectedRoutes->add(
92+
self::FIXTURES_ROUTE_NAME_PREFIX.'pathparameterpattern_noschema',
93+
(new Route('/baz/{id}'))->setMethods('GET')->setDefault('_controller', PathParameterPatternController::class.'::noSchema')
94+
);
95+
// OpenAPI needs the param pattern to be anchored (^$) to have the desired effect. Symfony automatically trims those to get a valid full path regex.
96+
$expectedRoutes->add(
97+
self::FIXTURES_ROUTE_NAME_PREFIX.'pathparameterpattern_withpattern',
98+
(new Route('/bar/{id}'))->setRequirement('id', '^[a-zA-Z0-9]+$')->setMethods('GET')->setDefault('_controller', PathParameterPatternController::class.'::withPattern')
99+
);
100+
101+
self::assertEquals($expectedRoutes, $routes);
106102
}
107103

108104
public function testPriority(): void
@@ -111,21 +107,23 @@ public function testPriority(): void
111107

112108
$routes = $routeLoader->__invoke();
113109

114-
$expectedRoutes = [];
115-
$expectedRoutes['/bar'] = (new Route('/bar'))
116-
->setMethods('GET')
117-
->setDefault('_controller', PriorityController::class.'::bar');
118-
$expectedRoutes['/foo'] = (new Route('/foo'))
119-
->setMethods('GET')
120-
->setDefault('_controller', PriorityController::class.'::foo');
121-
$expectedRoutes['/{catchall}'] = (new Route('/{catchall}'))
122-
->setMethods('GET')
123-
->setDefault('_controller', PriorityController::class.'::catchall');
124-
125-
foreach ($routes as $route) {
126-
$this->assertArrayHasKey($route->getPath(), $expectedRoutes);
127-
$this->assertEquals($route, $expectedRoutes[$route->getPath()]);
128-
}
110+
$expectedRoutes = new RouteCollection();
111+
$expectedRoutes->add(
112+
self::FIXTURES_ROUTE_NAME_PREFIX.'priority_foo',
113+
(new Route('/foo'))->setMethods('GET')->setDefault('_controller', PriorityController::class.'::foo')
114+
);
115+
$expectedRoutes->add(
116+
self::FIXTURES_ROUTE_NAME_PREFIX.'priority_catchall',
117+
(new Route('/{catchall}'))->setMethods('GET')->setDefault('_controller', PriorityController::class.'::catchall'),
118+
-100
119+
);
120+
$expectedRoutes->add(
121+
self::FIXTURES_ROUTE_NAME_PREFIX.'priority_bar',
122+
(new Route('/bar'))->setMethods('GET')->setDefault('_controller', PriorityController::class.'::bar'),
123+
10
124+
);
125+
126+
self::assertEquals($expectedRoutes, $routes);
129127
}
130128

131129
public function testSeveralClasses(): void
@@ -134,21 +132,21 @@ public function testSeveralClasses(): void
134132

135133
$routes = $routeLoader->__invoke();
136134

137-
$expectedRoutes = [];
138-
$expectedRoutes[] = (new Route('/bar'))
139-
->setMethods('GET')
140-
->setDefault('_controller', BarController::class.'::__invoke');
141-
$expectedRoutes[] = (new Route('/foo'))
142-
->setMethods('GET')
143-
->setDefault('_controller', FooController::class.'::__invoke');
144-
$expectedRoutes[] = (new Route('/sub'))
145-
->setMethods('GET')
146-
->setDefault('_controller', SubController::class.'::__invoke');
147-
148-
$index = 0;
149-
foreach ($routes as $route) {
150-
$this->assertEquals($route, $expectedRoutes[$index++]);
151-
}
135+
$expectedRoutes = new RouteCollection();
136+
$expectedRoutes->add(
137+
self::FIXTURES_ROUTE_NAME_PREFIX.'severalclasses_bar__invoke',
138+
(new Route('/bar'))->setMethods('GET')->setDefault('_controller', BarController::class.'::__invoke')
139+
);
140+
$expectedRoutes->add(
141+
self::FIXTURES_ROUTE_NAME_PREFIX.'severalclasses_foo__invoke',
142+
(new Route('/foo'))->setMethods('GET')->setDefault('_controller', FooController::class.'::__invoke')
143+
);
144+
$expectedRoutes->add(
145+
self::FIXTURES_ROUTE_NAME_PREFIX.'severalclasses_subnamespace_sub__invoke',
146+
(new Route('/sub'))->setMethods('GET')->setDefault('_controller', SubController::class.'::__invoke')
147+
);
148+
149+
self::assertEquals($expectedRoutes, $routes);
152150
}
153151

154152
public function testSeveralHttpMethods(): void
@@ -157,24 +155,25 @@ public function testSeveralHttpMethods(): void
157155

158156
$routes = $routeLoader->__invoke();
159157

160-
$expectedRoutes = [];
161-
$expectedRoutes[] = (new Route('/foobar'))
162-
->setMethods('GET')
163-
->setDefault('_controller', SeveralHttpMethodsController::class.'::get');
164-
$expectedRoutes[] = (new Route('/foobar'))
165-
->setMethods('PUT')
166-
->setDefault('_controller', SeveralHttpMethodsController::class.'::put');
167-
$expectedRoutes[] = (new Route('/foobar'))
168-
->setMethods('POST')
169-
->setDefault('_controller', SeveralHttpMethodsController::class.'::post');
170-
$expectedRoutes[] = (new Route('/foobar'))
171-
->setMethods('DELETE')
172-
->setDefault('_controller', SeveralHttpMethodsController::class.'::delete');
173-
174-
$index = 0;
175-
foreach ($routes as $route) {
176-
$this->assertEquals($route, $expectedRoutes[$index++]);
177-
}
158+
$expectedRoutes = new RouteCollection();
159+
$expectedRoutes->add(
160+
self::FIXTURES_ROUTE_NAME_PREFIX.'severalhttpmethods_get',
161+
(new Route('/foobar'))->setMethods('GET')->setDefault('_controller', SeveralHttpMethodsController::class.'::get')
162+
);
163+
$expectedRoutes->add(
164+
self::FIXTURES_ROUTE_NAME_PREFIX.'severalhttpmethods_put',
165+
(new Route('/foobar'))->setMethods('PUT')->setDefault('_controller', SeveralHttpMethodsController::class.'::put')
166+
);
167+
$expectedRoutes->add(
168+
self::FIXTURES_ROUTE_NAME_PREFIX.'severalhttpmethods_post',
169+
(new Route('/foobar'))->setMethods('POST')->setDefault('_controller', SeveralHttpMethodsController::class.'::post')
170+
);
171+
$expectedRoutes->add(
172+
self::FIXTURES_ROUTE_NAME_PREFIX.'severalhttpmethods_delete',
173+
(new Route('/foobar'))->setMethods('DELETE')->setDefault('_controller', SeveralHttpMethodsController::class.'::delete')
174+
);
175+
176+
self::assertEquals($expectedRoutes, $routes);
178177
}
179178

180179
public function testSeveralRoutesOnOneAction(): void
@@ -183,44 +182,40 @@ public function testSeveralRoutesOnOneAction(): void
183182

184183
$routes = $routeLoader->__invoke();
185184

186-
$expectedRoutes = [];
187-
$expectedRoutes[] = (new Route('/foobar'))
188-
->setMethods('GET')
189-
->setDefault('_controller', SeveralRoutesOnOneActionController::class.'::__invoke');
190-
$expectedRoutes[] = (new Route('/foobar'))
191-
->setMethods('POST')
192-
->setDefault('_controller', SeveralRoutesOnOneActionController::class.'::__invoke');
193-
$expectedRoutes[] = (new Route('/foo-bar'))
194-
->setMethods('GET')
195-
->setDefault('_controller', SeveralRoutesOnOneActionController::class.'::__invoke');
196-
197-
$index = 0;
198-
foreach ($routes as $route) {
199-
$this->assertEquals($route, $expectedRoutes[$index++]);
200-
}
185+
$expectedRoutes = new RouteCollection();
186+
$expectedRoutes->add(
187+
self::FIXTURES_ROUTE_NAME_PREFIX.'severalroutesononeaction__invoke',
188+
(new Route('/foobar'))->setMethods('GET')->setDefault('_controller', SeveralRoutesOnOneActionController::class.'::__invoke')
189+
);
190+
$expectedRoutes->add(
191+
self::FIXTURES_ROUTE_NAME_PREFIX.'severalroutesononeaction__invoke_1',
192+
(new Route('/foobar'))->setMethods('POST')->setDefault('_controller', SeveralRoutesOnOneActionController::class.'::__invoke')
193+
);
194+
$expectedRoutes->add(
195+
'my-name',
196+
(new Route('/foo-bar'))->setMethods('GET')->setDefault('_controller', SeveralRoutesOnOneActionController::class.'::__invoke')
197+
);
198+
199+
self::assertEquals($expectedRoutes, $routes);
201200
}
202201

203202
public function testSeveralDirectories(): void
204203
{
205-
$routeLoader = OpenApiRouteLoader::fromDirectories(
206-
__DIR__.'/Fixtures/Basic',
207-
__DIR__.'/Fixtures/SeveralClasses/SubNamespace'
208-
);
204+
$routeLoader = OpenApiRouteLoader::fromDirectories(__DIR__.'/Fixtures/Basic', __DIR__.'/Fixtures/SeveralClasses/SubNamespace');
209205

210206
$routes = $routeLoader->__invoke();
211207

212-
$expectedRoutes = [];
213-
$expectedRoutes[] = (new Route('/foobar'))
214-
->setMethods('GET')
215-
->setDefault('_controller', BasicController::class.'::__invoke');
216-
$expectedRoutes[] = (new Route('/sub'))
217-
->setMethods('GET')
218-
->setDefault('_controller', SubController::class.'::__invoke');
219-
220-
$index = 0;
221-
foreach ($routes as $route) {
222-
$this->assertEquals($route, $expectedRoutes[$index++]);
223-
}
208+
$expectedRoutes = new RouteCollection();
209+
$expectedRoutes->add(
210+
self::FIXTURES_ROUTE_NAME_PREFIX.'basic__invoke',
211+
(new Route('/foobar'))->setMethods('GET')->setDefault('_controller', BasicController::class.'::__invoke')
212+
);
213+
$expectedRoutes->add(
214+
self::FIXTURES_ROUTE_NAME_PREFIX.'severalclasses_subnamespace_sub__invoke',
215+
(new Route('/sub'))->setMethods('GET')->setDefault('_controller', SubController::class.'::__invoke')
216+
);
217+
218+
self::assertEquals($expectedRoutes, $routes);
224219
}
225220

226221
public function testSrcDirectoryDoesNotExist(): void

0 commit comments

Comments
 (0)