20
20
use Tobion \OpenApiSymfonyRouting \Tests \Annotations \Fixtures \SeveralHttpMethods \Controller as SeveralHttpMethodsController ;
21
21
use Tobion \OpenApiSymfonyRouting \Tests \Annotations \Fixtures \SeveralRoutesOnOneAction \Controller as SeveralRoutesOnOneActionController ;
22
22
23
- class OpenApiRouteLoaderAnnotationsTest extends TestCase
23
+ final class OpenApiRouteLoaderAnnotationsTest extends TestCase
24
24
{
25
- private const FIXTURES_ROUTE_NAME_PREFIX = 'tobion_openapisymfonyrouting_tests_fixtures_annotations_ ' ;
25
+ private const FIXTURES_ROUTE_NAME_PREFIX = 'tobion_openapisymfonyrouting_tests_annotations_fixtures_ ' ;
26
26
27
27
public function testBasic (): void
28
28
{
29
29
$ routeLoader = OpenApiRouteLoader::fromDirectories (__DIR__ .'/Fixtures/Basic ' );
30
30
31
31
$ routes = $ routeLoader ->__invoke ();
32
32
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 );
41
40
}
42
41
43
42
public function testFormatSuffix (): void
@@ -46,24 +45,21 @@ public function testFormatSuffix(): void
46
45
47
46
$ routes = $ routeLoader ->__invoke ();
48
47
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 );
67
63
}
68
64
69
65
public function testOperationId (): void
@@ -87,22 +83,22 @@ public function testPathParameterPattern(): void
87
83
88
84
$ routes = $ routeLoader ->__invoke ();
89
85
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 );
106
102
}
107
103
108
104
public function testPriority (): void
@@ -111,21 +107,23 @@ public function testPriority(): void
111
107
112
108
$ routes = $ routeLoader ->__invoke ();
113
109
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 );
129
127
}
130
128
131
129
public function testSeveralClasses (): void
@@ -134,21 +132,21 @@ public function testSeveralClasses(): void
134
132
135
133
$ routes = $ routeLoader ->__invoke ();
136
134
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 );
152
150
}
153
151
154
152
public function testSeveralHttpMethods (): void
@@ -157,24 +155,25 @@ public function testSeveralHttpMethods(): void
157
155
158
156
$ routes = $ routeLoader ->__invoke ();
159
157
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 );
178
177
}
179
178
180
179
public function testSeveralRoutesOnOneAction (): void
@@ -183,44 +182,40 @@ public function testSeveralRoutesOnOneAction(): void
183
182
184
183
$ routes = $ routeLoader ->__invoke ();
185
184
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 );
201
200
}
202
201
203
202
public function testSeveralDirectories (): void
204
203
{
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 ' );
209
205
210
206
$ routes = $ routeLoader ->__invoke ();
211
207
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 );
224
219
}
225
220
226
221
public function testSrcDirectoryDoesNotExist (): void
0 commit comments