@@ -365,6 +365,70 @@ public function testAttribute()
365
365
$ this ->assertSame (CacheAttributeController::CLASS_SMAXAGE , $ response ->getMaxAge ());
366
366
}
367
367
368
+ /**
369
+ * @dataProvider provideVaryHeaderScenarios
370
+ */
371
+ public function testHasRelevantVaryHeaderBehavior (array $ responseVary , array $ cacheVary , bool $ varyByLanguage , array $ expectedVary )
372
+ {
373
+ $ request = $ this ->createRequest (new Cache (vary: $ cacheVary ));
374
+ $ request ->attributes ->set ('_vary_by_language ' , $ varyByLanguage );
375
+
376
+ $ response = new Response ();
377
+ $ response ->setVary ($ responseVary );
378
+
379
+ $ listener = new CacheAttributeListener ();
380
+ $ event = new ResponseEvent ($ this ->getKernel (), $ request , HttpKernelInterface::MAIN_REQUEST , $ response );
381
+ $ listener ->onKernelResponse ($ event );
382
+
383
+ $ this ->assertSame ($ expectedVary , $ response ->getVary ());
384
+ }
385
+
386
+ public static function provideVaryHeaderScenarios (): \Traversable
387
+ {
388
+ yield 'no vary headers at all ' => [
389
+ 'responseVary ' => [],
390
+ 'cacheVary ' => ['X-Foo ' ],
391
+ 'varyByLanguage ' => false ,
392
+ 'expectedVary ' => ['X-Foo ' ],
393
+ ];
394
+ yield 'response vary accept-language only, vary_by_language true (append new) ' => [
395
+ 'responseVary ' => ['Accept-Language ' ],
396
+ 'cacheVary ' => ['X-Bar ' ],
397
+ 'varyByLanguage ' => true ,
398
+ 'expectedVary ' => ['Accept-Language ' , 'X-Bar ' ], // X-Bar is added
399
+ ];
400
+ yield 'response vary accept-language only, vary_by_language false (no append) ' => [
401
+ 'responseVary ' => ['Accept-Language ' ],
402
+ 'cacheVary ' => ['X-Bar ' ],
403
+ 'varyByLanguage ' => false ,
404
+ 'expectedVary ' => ['Accept-Language ' ], // no append
405
+ ];
406
+ yield 'response vary multiple including accept-language, vary_by_language true (no append) ' => [
407
+ 'responseVary ' => ['Accept-Language ' , 'User-Agent ' ],
408
+ 'cacheVary ' => ['X-Baz ' ],
409
+ 'varyByLanguage ' => true ,
410
+ 'expectedVary ' => ['Accept-Language ' , 'User-Agent ' ], // no append
411
+ ];
412
+ yield 'cache vary is empty ' => [
413
+ 'responseVary ' => ['X-Existing ' ],
414
+ 'cacheVary ' => [],
415
+ 'varyByLanguage ' => true ,
416
+ 'expectedVary ' => ['X-Existing ' ], // nothing to add
417
+ ];
418
+ yield 'vary * (no append) — vary_by_language=true ' => [
419
+ 'responseVary ' => ['* ' ],
420
+ 'cacheVary ' => ['X-Foo ' ],
421
+ 'varyByLanguage ' => true ,
422
+ 'expectedVary ' => ['* ' ],
423
+ ];
424
+ yield 'vary * (no append) — vary_by_language=false ' => [
425
+ 'responseVary ' => ['* ' ],
426
+ 'cacheVary ' => ['X-Foo ' ],
427
+ 'varyByLanguage ' => false ,
428
+ 'expectedVary ' => ['* ' ],
429
+ ];
430
+ }
431
+
368
432
private function createRequest (Cache $ cache ): Request
369
433
{
370
434
return new Request ([], [], ['_cache ' => [$ cache ]]);
0 commit comments