55namespace Tobion \OpenApiSymfonyRouting \Tests ;
66
77use PHPUnit \Framework \TestCase ;
8+ use Symfony \Component \Finder \Exception \DirectoryNotFoundException ;
89use Symfony \Component \Finder \Finder ;
910use Symfony \Component \Routing \Route ;
1011use Symfony \Component \Routing \RouteCollection ;
@@ -25,8 +26,7 @@ class OpenApiRouteLoaderTest extends TestCase
2526
2627 public function testBasic (): void
2728 {
28- $ finder = (new Finder ())->in (__DIR__ .'/Fixtures/Basic ' );
29- $ routeLoader = new OpenApiRouteLoader ($ finder );
29+ $ routeLoader = OpenApiRouteLoader::fromDirectories (__DIR__ .'/Fixtures/Basic ' );
3030
3131 $ routes = $ routeLoader ->__invoke ();
3232
@@ -36,13 +36,12 @@ public function testBasic(): void
3636 (new Route ('/foobar ' ))->setMethods ('GET ' )->setDefault ('_controller ' , BasicController::class.'::__invoke ' )
3737 );
3838
39- $ this -> assertEquals ($ expectedRoutes , $ routes );
39+ self :: assertEquals ($ expectedRoutes , $ routes );
4040 }
4141
4242 public function testFormatSuffix (): void
4343 {
44- $ finder = (new Finder ())->in (__DIR__ .'/Fixtures/FormatSuffix ' );
45- $ routeLoader = new OpenApiRouteLoader ($ finder );
44+ $ routeLoader = OpenApiRouteLoader::fromDirectories (__DIR__ .'/Fixtures/FormatSuffix ' );
4645
4746 $ routes = $ routeLoader ->__invoke ();
4847
@@ -60,13 +59,12 @@ public function testFormatSuffix(): void
6059 (new Route ('/c ' ))->setMethods ('GET ' )->setDefault ('_controller ' , FormatSuffixController::class.'::disableFormatSuffix ' )
6160 );
6261
63- $ this -> assertEquals ($ expectedRoutes , $ routes );
62+ self :: assertEquals ($ expectedRoutes , $ routes );
6463 }
6564
6665 public function testOperationId (): void
6766 {
68- $ finder = (new Finder ())->in (__DIR__ .'/Fixtures/OperationId ' );
69- $ routeLoader = new OpenApiRouteLoader ($ finder );
67+ $ routeLoader = OpenApiRouteLoader::fromDirectories (__DIR__ .'/Fixtures/OperationId ' );
7068
7169 $ routes = $ routeLoader ->__invoke ();
7270
@@ -76,13 +74,12 @@ public function testOperationId(): void
7674 (new Route ('/foobar ' ))->setMethods ('GET ' )->setDefault ('_controller ' , OperationIdController::class.'::__invoke ' )
7775 );
7876
79- $ this -> assertEquals ($ expectedRoutes , $ routes );
77+ self :: assertEquals ($ expectedRoutes , $ routes );
8078 }
8179
8280 public function testPathParameterPattern (): void
8381 {
84- $ finder = (new Finder ())->in (__DIR__ .'/Fixtures/PathParameterPattern ' );
85- $ routeLoader = new OpenApiRouteLoader ($ finder );
82+ $ routeLoader = OpenApiRouteLoader::fromDirectories (__DIR__ .'/Fixtures/PathParameterPattern ' );
8683
8784 $ routes = $ routeLoader ->__invoke ();
8885
@@ -97,13 +94,12 @@ public function testPathParameterPattern(): void
9794 (new Route ('/bar/{id} ' ))->setRequirement ('id ' , '^[a-zA-Z0-9]+$ ' )->setMethods ('GET ' )->setDefault ('_controller ' , PathParameterPatternController::class.'::withPattern ' )
9895 );
9996
100- $ this -> assertEquals ($ expectedRoutes , $ routes );
97+ self :: assertEquals ($ expectedRoutes , $ routes );
10198 }
10299
103100 public function testSeveralClasses (): void
104101 {
105- $ finder = (new Finder ())->in (__DIR__ .'/Fixtures/SeveralClasses ' )->files ();
106- $ routeLoader = new OpenApiRouteLoader ($ finder );
102+ $ routeLoader = OpenApiRouteLoader::fromDirectories (__DIR__ .'/Fixtures/SeveralClasses ' );
107103
108104 $ routes = $ routeLoader ->__invoke ();
109105
@@ -121,13 +117,12 @@ public function testSeveralClasses(): void
121117 (new Route ('/sub ' ))->setMethods ('GET ' )->setDefault ('_controller ' , SubController::class.'::__invoke ' )
122118 );
123119
124- $ this -> assertEquals ($ expectedRoutes , $ routes );
120+ self :: assertEquals ($ expectedRoutes , $ routes );
125121 }
126122
127123 public function testSeveralHttpMethods (): void
128124 {
129- $ finder = (new Finder ())->in (__DIR__ .'/Fixtures/SeveralHttpMethods ' );
130- $ routeLoader = new OpenApiRouteLoader ($ finder );
125+ $ routeLoader = OpenApiRouteLoader::fromDirectories (__DIR__ .'/Fixtures/SeveralHttpMethods ' );
131126
132127 $ routes = $ routeLoader ->__invoke ();
133128
@@ -149,13 +144,12 @@ public function testSeveralHttpMethods(): void
149144 (new Route ('/foobar ' ))->setMethods ('DELETE ' )->setDefault ('_controller ' , SeveralHttpMethodsController::class.'::delete ' )
150145 );
151146
152- $ this -> assertEquals ($ expectedRoutes , $ routes );
147+ self :: assertEquals ($ expectedRoutes , $ routes );
153148 }
154149
155150 public function testSeveralRoutesOnOneAction (): void
156151 {
157- $ finder = (new Finder ())->in (__DIR__ .'/Fixtures/SeveralRoutesOnOneAction ' );
158- $ routeLoader = new OpenApiRouteLoader ($ finder );
152+ $ routeLoader = OpenApiRouteLoader::fromDirectories (__DIR__ .'/Fixtures/SeveralRoutesOnOneAction ' );
159153
160154 $ routes = $ routeLoader ->__invoke ();
161155
@@ -173,6 +167,33 @@ public function testSeveralRoutesOnOneAction(): void
173167 (new Route ('/foo-bar ' ))->setMethods ('GET ' )->setDefault ('_controller ' , SeveralRoutesOnOneActionController::class.'::__invoke ' )
174168 );
175169
176- $ this ->assertEquals ($ expectedRoutes , $ routes );
170+ self ::assertEquals ($ expectedRoutes , $ routes );
171+ }
172+
173+ public function testSeveralDirectories (): void
174+ {
175+ $ routeLoader = OpenApiRouteLoader::fromDirectories (__DIR__ .'/Fixtures/Basic ' , __DIR__ .'/Fixtures/SeveralClasses/SubNamespace ' );
176+
177+ $ routes = $ routeLoader ->__invoke ();
178+
179+ $ expectedRoutes = new RouteCollection ();
180+ $ expectedRoutes ->add (
181+ self ::FIXTURES_ROUTE_NAME_PREFIX .'basic__invoke ' ,
182+ (new Route ('/foobar ' ))->setMethods ('GET ' )->setDefault ('_controller ' , BasicController::class.'::__invoke ' )
183+ );
184+ $ expectedRoutes ->add (
185+ self ::FIXTURES_ROUTE_NAME_PREFIX .'severalclasses_subnamespace_sub__invoke ' ,
186+ (new Route ('/sub ' ))->setMethods ('GET ' )->setDefault ('_controller ' , SubController::class.'::__invoke ' )
187+ );
188+
189+ self ::assertEquals ($ expectedRoutes , $ routes );
190+ }
191+
192+ public function testSrcDirectoryDoesNotExist (): void
193+ {
194+ self ::expectException (DirectoryNotFoundException::class);
195+ self ::expectExceptionMessage ('/../../../../src" directory does not exist ' );
196+
197+ OpenApiRouteLoader::fromSrcDirectory ();
177198 }
178199}
0 commit comments