@@ -206,4 +206,141 @@ public function testExceptionWhenInvalidToken()
206206 $ listener = new IsCsrfTokenValidAttributeListener ($ csrfTokenManager );
207207 $ listener ->onKernelControllerArguments ($ event );
208208 }
209+
210+ public function testIsCsrfTokenValidCalledCorrectlyWithDeleteMethod ()
211+ {
212+ $ request = new Request (request: ['_token ' => 'bar ' ]);
213+ $ request ->setMethod ('DELETE ' );
214+
215+ $ csrfTokenManager = $ this ->createMock (CsrfTokenManagerInterface::class);
216+ $ csrfTokenManager ->expects ($ this ->once ())
217+ ->method ('isTokenValid ' )
218+ ->with (new CsrfToken ('foo ' , 'bar ' ))
219+ ->willReturn (true );
220+
221+ $ event = new ControllerArgumentsEvent (
222+ $ this ->createMock (HttpKernelInterface::class),
223+ [new IsCsrfTokenValidAttributeMethodsController (), 'withDeleteMethod ' ],
224+ [],
225+ $ request ,
226+ null
227+ );
228+
229+ $ listener = new IsCsrfTokenValidAttributeListener ($ csrfTokenManager );
230+ $ listener ->onKernelControllerArguments ($ event );
231+ }
232+
233+ public function testIsCsrfTokenValidIgnoredWithNonMatchingMethod ()
234+ {
235+ $ request = new Request (request: ['_token ' => 'bar ' ]);
236+ $ request ->setMethod ('POST ' );
237+
238+ $ csrfTokenManager = $ this ->createMock (CsrfTokenManagerInterface::class);
239+ $ csrfTokenManager ->expects ($ this ->never ())
240+ ->method ('isTokenValid ' )
241+ ->with (new CsrfToken ('foo ' , 'bar ' ));
242+
243+ $ event = new ControllerArgumentsEvent (
244+ $ this ->createMock (HttpKernelInterface::class),
245+ [new IsCsrfTokenValidAttributeMethodsController (), 'withDeleteMethod ' ],
246+ [],
247+ $ request ,
248+ null
249+ );
250+
251+ $ listener = new IsCsrfTokenValidAttributeListener ($ csrfTokenManager );
252+ $ listener ->onKernelControllerArguments ($ event );
253+ }
254+
255+ public function testIsCsrfTokenValidCalledCorrectlyWithGetOrPostMethodWithGetMethod ()
256+ {
257+ $ request = new Request (request: ['_token ' => 'bar ' ]);
258+ $ request ->setMethod ('GET ' );
259+
260+ $ csrfTokenManager = $ this ->createMock (CsrfTokenManagerInterface::class);
261+ $ csrfTokenManager ->expects ($ this ->once ())
262+ ->method ('isTokenValid ' )
263+ ->with (new CsrfToken ('foo ' , 'bar ' ))
264+ ->willReturn (true );
265+
266+ $ event = new ControllerArgumentsEvent (
267+ $ this ->createMock (HttpKernelInterface::class),
268+ [new IsCsrfTokenValidAttributeMethodsController (), 'withGetOrPostMethod ' ],
269+ [],
270+ $ request ,
271+ null
272+ );
273+
274+ $ listener = new IsCsrfTokenValidAttributeListener ($ csrfTokenManager );
275+ $ listener ->onKernelControllerArguments ($ event );
276+ }
277+
278+ public function testIsCsrfTokenValidNoIgnoredWithGetOrPostMethodWithPutMethod ()
279+ {
280+ $ request = new Request (request: ['_token ' => 'bar ' ]);
281+ $ request ->setMethod ('PUT ' );
282+
283+ $ csrfTokenManager = $ this ->createMock (CsrfTokenManagerInterface::class);
284+ $ csrfTokenManager ->expects ($ this ->never ())
285+ ->method ('isTokenValid ' )
286+ ->with (new CsrfToken ('foo ' , 'bar ' ));
287+
288+ $ event = new ControllerArgumentsEvent (
289+ $ this ->createMock (HttpKernelInterface::class),
290+ [new IsCsrfTokenValidAttributeMethodsController (), 'withGetOrPostMethod ' ],
291+ [],
292+ $ request ,
293+ null
294+ );
295+
296+ $ listener = new IsCsrfTokenValidAttributeListener ($ csrfTokenManager );
297+ $ listener ->onKernelControllerArguments ($ event );
298+ }
299+
300+ public function testIsCsrfTokenValidCalledCorrectlyWithInvalidTokenKeyAndPostMethod ()
301+ {
302+ $ this ->expectException (InvalidCsrfTokenException::class);
303+
304+ $ request = new Request (request: ['_token ' => 'bar ' ]);
305+ $ request ->setMethod ('POST ' );
306+
307+ $ csrfTokenManager = $ this ->createMock (CsrfTokenManagerInterface::class);
308+ $ csrfTokenManager ->expects ($ this ->once ())
309+ ->method ('isTokenValid ' )
310+ ->withAnyParameters ()
311+ ->willReturn (false );
312+
313+ $ event = new ControllerArgumentsEvent (
314+ $ this ->createMock (HttpKernelInterface::class),
315+ [new IsCsrfTokenValidAttributeMethodsController (), 'withPostMethodAndInvalidTokenKey ' ],
316+ [],
317+ $ request ,
318+ null
319+ );
320+
321+ $ listener = new IsCsrfTokenValidAttributeListener ($ csrfTokenManager );
322+ $ listener ->onKernelControllerArguments ($ event );
323+ }
324+
325+ public function testIsCsrfTokenValidIgnoredWithInvalidTokenKeyAndUnavailableMethod ()
326+ {
327+ $ request = new Request (request: ['_token ' => 'bar ' ]);
328+ $ request ->setMethod ('PUT ' );
329+
330+ $ csrfTokenManager = $ this ->createMock (CsrfTokenManagerInterface::class);
331+ $ csrfTokenManager ->expects ($ this ->never ())
332+ ->method ('isTokenValid ' )
333+ ->withAnyParameters ();
334+
335+ $ event = new ControllerArgumentsEvent (
336+ $ this ->createMock (HttpKernelInterface::class),
337+ [new IsCsrfTokenValidAttributeMethodsController (), 'withPostMethodAndInvalidTokenKey ' ],
338+ [],
339+ $ request ,
340+ null
341+ );
342+
343+ $ listener = new IsCsrfTokenValidAttributeListener ($ csrfTokenManager );
344+ $ listener ->onKernelControllerArguments ($ event );
345+ }
209346}
0 commit comments