@@ -2062,6 +2062,93 @@ public function testTraceLevelShort()
20622062 $ this ->assertTrue ($ this ->response ->headers ->has ('X-Symfony-Cache ' ));
20632063 $ this ->assertEquals ('miss ' , $ this ->response ->headers ->get ('X-Symfony-Cache ' ));
20642064 }
2065+
2066+ public function testQueryMethodIsCacheable ()
2067+ {
2068+ $ this ->setNextResponse (200 , ['Cache-Control ' => 'public, max-age=10000 ' ], 'Query result ' , function (Request $ request ) {
2069+ $ this ->assertSame ('QUERY ' , $ request ->getMethod ());
2070+
2071+ return '{"query": "users"} ' === $ request ->getContent ();
2072+ });
2073+
2074+ $ this ->kernel ->reset ();
2075+ $ this ->store = $ this ->createStore ();
2076+ $ this ->cacheConfig ['debug ' ] = true ;
2077+ $ this ->cache = new HttpCache ($ this ->kernel , $ this ->store , null , $ this ->cacheConfig );
2078+
2079+ $ request1 = Request::create ('/ ' , 'QUERY ' , [], [], [], [], '{"query": "users"} ' );
2080+ $ this ->response = $ this ->cache ->handle ($ request1 , HttpKernelInterface::MAIN_REQUEST , $ this ->catch );
2081+
2082+ $ this ->assertSame (200 , $ this ->response ->getStatusCode ());
2083+ $ this ->assertTraceContains ('miss ' );
2084+ $ this ->assertSame ('Query result ' , $ this ->response ->getContent ());
2085+
2086+ $ request2 = Request::create ('/ ' , 'QUERY ' , [], [], [], [], '{"query": "users"} ' );
2087+ $ this ->response = $ this ->cache ->handle ($ request2 , HttpKernelInterface::MAIN_REQUEST , $ this ->catch );
2088+
2089+ $ this ->assertSame (200 , $ this ->response ->getStatusCode ());
2090+ $ this ->assertTrue ($ this ->response ->headers ->has ('Age ' ));
2091+ $ this ->assertSame ('Query result ' , $ this ->response ->getContent ());
2092+ }
2093+
2094+ public function testQueryMethodDifferentBodiesCreateDifferentCacheEntries ()
2095+ {
2096+ $ this ->setNextResponses ([
2097+ [
2098+ 'status ' => 200 ,
2099+ 'body ' => 'Users result ' ,
2100+ 'headers ' => ['Cache-Control ' => 'public, max-age=10000 ' ],
2101+ ],
2102+ [
2103+ 'status ' => 200 ,
2104+ 'body ' => 'Posts result ' ,
2105+ 'headers ' => ['Cache-Control ' => 'public, max-age=10000 ' ],
2106+ ],
2107+ ]);
2108+
2109+ $ this ->store = $ this ->createStore ();
2110+ $ this ->cacheConfig ['debug ' ] = true ;
2111+ $ this ->cache = new HttpCache ($ this ->kernel , $ this ->store , null , $ this ->cacheConfig );
2112+
2113+ $ request1 = Request::create ('/ ' , 'QUERY ' , [], [], [], [], '{"query": "users"} ' );
2114+ $ this ->response = $ this ->cache ->handle ($ request1 , HttpKernelInterface::MAIN_REQUEST , $ this ->catch );
2115+
2116+ $ this ->assertSame ('Users result ' , $ this ->response ->getContent ());
2117+ $ this ->assertTraceContains ('miss ' );
2118+
2119+ $ request2 = Request::create ('/ ' , 'QUERY ' , [], [], [], [], '{"query": "posts"} ' );
2120+ $ this ->response = $ this ->cache ->handle ($ request2 , HttpKernelInterface::MAIN_REQUEST , $ this ->catch );
2121+
2122+ $ this ->assertSame ('Posts result ' , $ this ->response ->getContent ());
2123+ $ this ->assertTraceContains ('miss ' );
2124+
2125+ $ request3 = Request::create ('/ ' , 'QUERY ' , [], [], [], [], '{"query": "users"} ' );
2126+ $ this ->response = $ this ->cache ->handle ($ request3 , HttpKernelInterface::MAIN_REQUEST , $ this ->catch );
2127+
2128+ $ this ->assertSame ('Users result ' , $ this ->response ->getContent ());
2129+ $ this ->assertTrue ($ this ->response ->headers ->has ('Age ' ));
2130+ }
2131+
2132+ public function testQueryMethodWithEmptyBodyIsCacheable ()
2133+ {
2134+ $ this ->setNextResponse (200 , ['Cache-Control ' => 'public, max-age=10000 ' ], 'Empty query result ' );
2135+ $ this ->kernel ->reset ();
2136+ $ this ->store = $ this ->createStore ();
2137+ $ this ->cacheConfig ['debug ' ] = true ;
2138+ $ this ->cache = new HttpCache ($ this ->kernel , $ this ->store , null , $ this ->cacheConfig );
2139+
2140+ $ request1 = Request::create ('/ ' , 'QUERY ' , [], [], [], [], '' );
2141+ $ this ->response = $ this ->cache ->handle ($ request1 , HttpKernelInterface::MAIN_REQUEST , $ this ->catch );
2142+
2143+ $ this ->assertSame (200 , $ this ->response ->getStatusCode ());
2144+ $ this ->assertTraceContains ('miss ' );
2145+
2146+ $ request2 = Request::create ('/ ' , 'QUERY ' , [], [], [], [], '' );
2147+ $ this ->response = $ this ->cache ->handle ($ request2 , HttpKernelInterface::MAIN_REQUEST , $ this ->catch );
2148+
2149+ $ this ->assertSame (200 , $ this ->response ->getStatusCode ());
2150+ $ this ->assertTrue ($ this ->response ->headers ->has ('Age ' ));
2151+ }
20652152}
20662153
20672154class TestKernel implements HttpKernelInterface
0 commit comments