@@ -318,6 +318,70 @@ public function testAttribute()
318
318
$ this ->assertSame (CacheAttributeController::CLASS_SMAXAGE , $ response ->getMaxAge ());
319
319
}
320
320
321
+ /**
322
+ * @dataProvider provideVaryHeaderScenarios
323
+ */
324
+ public function testHasRelevantVaryHeaderBehavior (array $ responseVary , array $ cacheVary , bool $ varyByLanguage , array $ expectedVary )
325
+ {
326
+ $ request = $ this ->createRequest (new Cache (vary: $ cacheVary ));
327
+ $ request ->attributes ->set ('_vary_by_language ' , $ varyByLanguage );
328
+
329
+ $ response = new Response ();
330
+ $ response ->setVary ($ responseVary );
331
+
332
+ $ listener = new CacheAttributeListener ();
333
+ $ event = new ResponseEvent ($ this ->getKernel (), $ request , HttpKernelInterface::MAIN_REQUEST , $ response );
334
+ $ listener ->onKernelResponse ($ event );
335
+
336
+ $ this ->assertSame ($ expectedVary , $ response ->getVary ());
337
+ }
338
+
339
+ public static function provideVaryHeaderScenarios (): \Traversable
340
+ {
341
+ yield 'no vary headers at all ' => [
342
+ 'responseVary ' => [],
343
+ 'cacheVary ' => ['X-Foo ' ],
344
+ 'varyByLanguage ' => false ,
345
+ 'expectedVary ' => ['X-Foo ' ],
346
+ ];
347
+ yield 'response vary accept-language only, vary_by_language true (append new) ' => [
348
+ 'responseVary ' => ['Accept-Language ' ],
349
+ 'cacheVary ' => ['X-Bar ' ],
350
+ 'varyByLanguage ' => true ,
351
+ 'expectedVary ' => ['Accept-Language ' , 'X-Bar ' ], // X-Bar is added
352
+ ];
353
+ yield 'response vary accept-language only, vary_by_language false (no append) ' => [
354
+ 'responseVary ' => ['Accept-Language ' ],
355
+ 'cacheVary ' => ['X-Bar ' ],
356
+ 'varyByLanguage ' => false ,
357
+ 'expectedVary ' => ['Accept-Language ' ], // no append
358
+ ];
359
+ yield 'response vary multiple including accept-language, vary_by_language true (no append) ' => [
360
+ 'responseVary ' => ['Accept-Language ' , 'User-Agent ' ],
361
+ 'cacheVary ' => ['X-Baz ' ],
362
+ 'varyByLanguage ' => true ,
363
+ 'expectedVary ' => ['Accept-Language ' , 'User-Agent ' ], // no append
364
+ ];
365
+ yield 'cache vary is empty ' => [
366
+ 'responseVary ' => ['X-Existing ' ],
367
+ 'cacheVary ' => [],
368
+ 'varyByLanguage ' => true ,
369
+ 'expectedVary ' => ['X-Existing ' ], // nothing to add
370
+ ];
371
+ yield 'vary * (no append) — vary_by_language=true ' => [
372
+ 'responseVary ' => ['* ' ],
373
+ 'cacheVary ' => ['X-Foo ' ],
374
+ 'varyByLanguage ' => true ,
375
+ 'expectedVary ' => ['* ' ],
376
+ ];
377
+ yield 'vary * (no append) — vary_by_language=false ' => [
378
+ 'responseVary ' => ['* ' ],
379
+ 'cacheVary ' => ['X-Foo ' ],
380
+ 'varyByLanguage ' => false ,
381
+ 'expectedVary ' => ['* ' ],
382
+ ];
383
+ }
384
+
321
385
private function createRequest (Cache $ cache ): Request
322
386
{
323
387
return new Request ([], [], ['_cache ' => [$ cache ]]);
0 commit comments