2020use Tobion \OpenApiSymfonyRouting \Tests \Annotations \Fixtures \SeveralHttpMethods \Controller as SeveralHttpMethodsController ;
2121use 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