1515
1616use ApiPlatform \Metadata \GetCollection ;
1717use ApiPlatform \Metadata \Link ;
18+ use ApiPlatform \Metadata \Parameters ;
1819use ApiPlatform \Metadata \ResourceAccessCheckerInterface ;
1920use ApiPlatform \State \Provider \SecurityParameterProvider ;
2021use ApiPlatform \State \ProviderInterface ;
@@ -28,16 +29,18 @@ public function testIsGrantedLink(): void
2829 {
2930 $ obj = new \stdClass ();
3031 $ barObj = new \stdClass ();
32+ $ sharedParams = new Parameters ();
3133 $ operation = new GetCollection (uriVariables: [
3234 'barId ' => new Link (toProperty: 'bar ' , fromClass: 'Bar ' , security: 'is_granted("some_voter", "bar") ' ),
33- ], class: \stdClass::class);
35+ ], class: \stdClass::class, parameters: $ sharedParams );
3436 $ decorated = $ this ->createMock (ProviderInterface::class);
3537 $ decorated ->method ('provide ' )->willReturn ($ obj );
3638 $ request = new Request (attributes: ['bar ' => $ barObj ]);
3739 $ resourceAccessChecker = $ this ->createMock (ResourceAccessCheckerInterface::class);
3840 $ resourceAccessChecker ->expects ($ this ->once ())->method ('isGranted ' )->with ('Bar ' , 'is_granted("some_voter", "bar") ' , ['object ' => $ obj , 'previous_object ' => null , 'request ' => $ request , 'bar ' => $ barObj , 'barId ' => 1 , 'operation ' => $ operation ])->willReturn (true );
3941 $ accessChecker = new SecurityParameterProvider ($ decorated , $ resourceAccessChecker );
4042 $ accessChecker ->provide ($ operation , ['barId ' => 1 ], ['request ' => $ request ]);
43+ $ this ->assertCount (0 , $ sharedParams , 'provide() must not mutate the Parameters object stored on the cached operation ' );
4144 }
4245
4346 public function testIsNotGrantedLink (): void
0 commit comments