13
13
14
14
namespace ApiPlatform \Tests \HttpCache \EventListener ;
15
15
16
- use ApiPlatform \Core \Metadata \Resource \Factory \ResourceMetadataFactoryInterface ;
17
- use ApiPlatform \Core \Metadata \Resource \ResourceMetadata ;
18
16
use ApiPlatform \HttpCache \EventListener \AddHeadersListener ;
19
17
use ApiPlatform \Tests \Fixtures \TestBundle \Entity \Dummy ;
20
18
use ApiPlatform \Tests \ProphecyTrait ;
26
24
27
25
/**
28
26
* @author Kévin Dunglas <[email protected] >
29
- * @group legacy
30
27
*/
31
28
class AddHeadersListenerTest extends TestCase
32
29
{
33
30
use ProphecyTrait;
34
31
35
32
public function testDoNotSetHeaderWhenMethodNotCacheable ()
36
33
{
37
- $ request = new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_item_operation_name ' => 'get ' ]);
34
+ $ request = new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_operation_name ' => 'get ' ]);
38
35
$ request ->setMethod ('PUT ' );
39
36
$ response = new Response ();
40
37
$ event = new ResponseEvent (
@@ -52,7 +49,7 @@ public function testDoNotSetHeaderWhenMethodNotCacheable()
52
49
53
50
public function testDoNotSetHeaderOnUnsuccessfulResponse ()
54
51
{
55
- $ request = new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_item_operation_name ' => 'get ' ]);
52
+ $ request = new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_operation_name ' => 'get ' ]);
56
53
$ response = new Response ('{} ' , Response::HTTP_BAD_REQUEST );
57
54
$ event = new ResponseEvent (
58
55
$ this ->prophesize (HttpKernelInterface::class)->reveal (),
@@ -88,7 +85,7 @@ public function testDoNotSetHeaderWhenNoContent()
88
85
$ response = new Response ();
89
86
$ event = new ResponseEvent (
90
87
$ this ->prophesize (HttpKernelInterface::class)->reveal (),
91
- new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_item_operation_name ' => 'get ' ]),
88
+ new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_operation_name ' => 'get ' ]),
92
89
\defined (HttpKernelInterface::class.'::MAIN_REQUEST ' ) ? HttpKernelInterface::MAIN_REQUEST : HttpKernelInterface::MASTER_REQUEST ,
93
90
$ response
94
91
);
@@ -103,15 +100,12 @@ public function testAddHeaders()
103
100
$ response = new Response ('some content ' , 200 , ['Vary ' => ['Accept ' , 'Cookie ' ]]);
104
101
$ event = new ResponseEvent (
105
102
$ this ->prophesize (HttpKernelInterface::class)->reveal (),
106
- new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_item_operation_name ' => 'get ' ]),
103
+ new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_operation_name ' => 'get ' ]),
107
104
\defined (HttpKernelInterface::class.'::MAIN_REQUEST ' ) ? HttpKernelInterface::MAIN_REQUEST : HttpKernelInterface::MASTER_REQUEST ,
108
105
$ response
109
106
);
110
107
111
- $ factory = $ this ->prophesize (ResourceMetadataFactoryInterface::class);
112
- $ factory ->create (Dummy::class)->willReturn (new ResourceMetadata ())->shouldBeCalled ();
113
-
114
- $ listener = new AddHeadersListener (true , 100 , 200 , ['Accept ' , 'Accept-Encoding ' ], true , $ factory ->reveal (), 15 , 30 );
108
+ $ listener = new AddHeadersListener (true , 100 , 200 , ['Accept ' , 'Accept-Encoding ' ], true , 15 , 30 );
115
109
$ listener ->onKernelResponse ($ event );
116
110
117
111
$ this ->assertSame ('"9893532233caff98cd083a116b013c0b" ' , $ response ->getEtag ());
@@ -129,148 +123,16 @@ public function testDoNotSetHeaderWhenAlreadySet()
129
123
130
124
$ event = new ResponseEvent (
131
125
$ this ->prophesize (HttpKernelInterface::class)->reveal (),
132
- new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_item_operation_name ' => 'get ' ]),
126
+ new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_operation_name ' => 'get ' ]),
133
127
\defined (HttpKernelInterface::class.'::MAIN_REQUEST ' ) ? HttpKernelInterface::MAIN_REQUEST : HttpKernelInterface::MASTER_REQUEST ,
134
128
$ response
135
129
);
136
130
137
- $ factory = $ this ->prophesize (ResourceMetadataFactoryInterface::class);
138
- $ factory ->create (Dummy::class)->willReturn (new ResourceMetadata ())->shouldBeCalled ();
139
-
140
- $ listener = new AddHeadersListener (true , 100 , 200 , ['Accept ' , 'Accept-Encoding ' ], true , $ factory ->reveal (), 15 , 30 );
131
+ $ listener = new AddHeadersListener (true , 100 , 200 , ['Accept ' , 'Accept-Encoding ' ], true , 15 , 30 );
141
132
$ listener ->onKernelResponse ($ event );
142
133
143
134
$ this ->assertSame ('"etag" ' , $ response ->getEtag ());
144
135
$ this ->assertSame ('max-age=300, public, s-maxage=400, stale-if-error=30, stale-while-revalidate=15 ' , $ response ->headers ->get ('Cache-Control ' ));
145
136
$ this ->assertSame (['Accept ' , 'Cookie ' , 'Accept-Encoding ' ], $ response ->getVary ());
146
137
}
147
-
148
- public function testSetHeadersFromResourceMetadata ()
149
- {
150
- $ response = new Response ('some content ' , 200 , ['Vary ' => ['Accept ' , 'Cookie ' ]]);
151
- $ event = new ResponseEvent (
152
- $ this ->prophesize (HttpKernelInterface::class)->reveal (),
153
- new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_item_operation_name ' => 'get ' ]),
154
- \defined (HttpKernelInterface::class.'::MAIN_REQUEST ' ) ? HttpKernelInterface::MAIN_REQUEST : HttpKernelInterface::MASTER_REQUEST ,
155
- $ response
156
- );
157
-
158
- $ metadata = new ResourceMetadata (null , null , null , null , null , ['cache_headers ' => ['max_age ' => 123 , 'shared_max_age ' => 456 , 'stale_while_revalidate ' => 928 , 'stale_if_error ' => 70 , 'vary ' => ['Vary-1 ' , 'Vary-2 ' ]]]);
159
- $ factory = $ this ->prophesize (ResourceMetadataFactoryInterface::class);
160
- $ factory ->create (Dummy::class)->willReturn ($ metadata )->shouldBeCalled ();
161
-
162
- $ listener = new AddHeadersListener (true , 100 , 200 , ['Accept ' , 'Accept-Encoding ' ], true , $ factory ->reveal (), 15 , 30 );
163
- $ listener ->onKernelResponse ($ event );
164
-
165
- $ this ->assertSame ('max-age=123, public, s-maxage=456, stale-if-error=70, stale-while-revalidate=928 ' , $ response ->headers ->get ('Cache-Control ' ));
166
- $ this ->assertSame (['Accept ' , 'Cookie ' , 'Vary-1 ' , 'Vary-2 ' ], $ response ->getVary ());
167
- }
168
-
169
- public function testSetHeadersFromResourceMetadataMarkedAsPrivate ()
170
- {
171
- $ response = new Response ('some content ' , 200 );
172
- $ event = new ResponseEvent (
173
- $ this ->prophesize (HttpKernelInterface::class)->reveal (),
174
- new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_item_operation_name ' => 'get ' ]),
175
- \defined (HttpKernelInterface::class.'::MAIN_REQUEST ' ) ? HttpKernelInterface::MAIN_REQUEST : HttpKernelInterface::MASTER_REQUEST ,
176
- $ response
177
- );
178
-
179
- $ metadata = new ResourceMetadata (null , null , null , null , null , [
180
- 'cache_headers ' => [
181
- 'max_age ' => 123 ,
182
- 'public ' => false ,
183
- 'shared_max_age ' => 456 ,
184
- ],
185
- ]);
186
- $ factory = $ this ->prophesize (ResourceMetadataFactoryInterface::class);
187
- $ factory ->create (Dummy::class)->willReturn ($ metadata )->shouldBeCalled ();
188
-
189
- $ listener = new AddHeadersListener (true , 100 , 200 , [], true , $ factory ->reveal ());
190
- $ listener ->onKernelResponse ($ event );
191
-
192
- $ this ->assertSame ('max-age=123, private ' , $ response ->headers ->get ('Cache-Control ' ));
193
-
194
- // resource's cache marked as private must not contain s-maxage
195
- $ this ->assertStringNotContainsString ('s-maxage ' , $ response ->headers ->get ('Cache-Control ' ));
196
- }
197
-
198
- public function testSetHeadersFromResourceMetadataMarkedAsPublic ()
199
- {
200
- $ response = new Response ('some content ' , 200 );
201
- $ event = new ResponseEvent (
202
- $ this ->prophesize (HttpKernelInterface::class)->reveal (),
203
- new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_item_operation_name ' => 'get ' ]),
204
- \defined (HttpKernelInterface::class.'::MAIN_REQUEST ' ) ? HttpKernelInterface::MAIN_REQUEST : HttpKernelInterface::MASTER_REQUEST ,
205
- $ response
206
- );
207
-
208
- $ metadata = new ResourceMetadata (null , null , null , null , null , [
209
- 'cache_headers ' => [
210
- 'max_age ' => 123 ,
211
- 'public ' => true ,
212
- 'shared_max_age ' => 456 ,
213
- ],
214
- ]);
215
- $ factory = $ this ->prophesize (ResourceMetadataFactoryInterface::class);
216
- $ factory ->create (Dummy::class)->willReturn ($ metadata )->shouldBeCalled ();
217
-
218
- $ listener = new AddHeadersListener (true , 100 , 200 , [], true , $ factory ->reveal ());
219
- $ listener ->onKernelResponse ($ event );
220
-
221
- $ this ->assertSame ('max-age=123, public, s-maxage=456 ' , $ response ->headers ->get ('Cache-Control ' ));
222
- }
223
-
224
- public function testSetHeadersFromResourceMetadataWithNoPrivacy ()
225
- {
226
- $ response = new Response ('some content ' , 200 );
227
- $ event = new ResponseEvent (
228
- $ this ->prophesize (HttpKernelInterface::class)->reveal (),
229
- new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_item_operation_name ' => 'get ' ]),
230
- \defined (HttpKernelInterface::class.'::MAIN_REQUEST ' ) ? HttpKernelInterface::MAIN_REQUEST : HttpKernelInterface::MASTER_REQUEST ,
231
- $ response
232
- );
233
-
234
- $ metadata = new ResourceMetadata (null , null , null , null , null , [
235
- 'cache_headers ' => [
236
- 'max_age ' => 123 ,
237
- 'shared_max_age ' => 456 ,
238
- ],
239
- ]);
240
- $ factory = $ this ->prophesize (ResourceMetadataFactoryInterface::class);
241
- $ factory ->create (Dummy::class)->willReturn ($ metadata )->shouldBeCalled ();
242
-
243
- $ listener = new AddHeadersListener (true , 100 , 200 , [], true , $ factory ->reveal ());
244
- $ listener ->onKernelResponse ($ event );
245
-
246
- $ this ->assertSame ('max-age=123, public, s-maxage=456 ' , $ response ->headers ->get ('Cache-Control ' ));
247
- }
248
-
249
- public function testSetHeadersFromResourceMetadataWithNoPrivacyDefaultsPrivate ()
250
- {
251
- $ response = new Response ('some content ' , 200 );
252
- $ event = new ResponseEvent (
253
- $ this ->prophesize (HttpKernelInterface::class)->reveal (),
254
- new Request ([], [], ['_api_resource_class ' => Dummy::class, '_api_item_operation_name ' => 'get ' ]),
255
- \defined (HttpKernelInterface::class.'::MAIN_REQUEST ' ) ? HttpKernelInterface::MAIN_REQUEST : HttpKernelInterface::MASTER_REQUEST ,
256
- $ response
257
- );
258
-
259
- $ metadata = new ResourceMetadata (null , null , null , null , null , [
260
- 'cache_headers ' => [
261
- 'max_age ' => 123 ,
262
- 'shared_max_age ' => 456 ,
263
- ],
264
- ]);
265
- $ factory = $ this ->prophesize (ResourceMetadataFactoryInterface::class);
266
- $ factory ->create (Dummy::class)->willReturn ($ metadata )->shouldBeCalled ();
267
-
268
- $ listener = new AddHeadersListener (true , 100 , 200 , ['Accept ' , 'Accept-Encoding ' ], false , $ factory ->reveal ());
269
- $ listener ->onKernelResponse ($ event );
270
-
271
- $ this ->assertSame ('max-age=123, private ' , $ response ->headers ->get ('Cache-Control ' ));
272
-
273
- // resource's cache marked as private must not contain s-maxage
274
- $ this ->assertStringNotContainsString ('s-maxage ' , $ response ->headers ->get ('Cache-Control ' ));
275
- }
276
138
}
0 commit comments