19
19
20
20
namespace Civi \Funding \EventSubscriber \FundingCase ;
21
21
22
+ use Civi \Funding \Api4 \Permissions ;
22
23
use Civi \Funding \Event \FundingCase \GetPermissionsEvent ;
23
24
use Civi \Funding \Mock \RequestContext \TestRequestContext ;
25
+ use Civi \Funding \Permission \CiviPermissionChecker ;
26
+ use PHPUnit \Framework \MockObject \MockObject ;
24
27
use PHPUnit \Framework \TestCase ;
25
28
26
29
/**
27
30
* @covers \Civi\Funding\EventSubscriber\FundingCase\FundingCaseFilterPermissionsSubscriber
28
31
*/
29
32
final class FundingCaseFilterPermissionsSubscriberTest extends TestCase {
30
33
34
+ /**
35
+ * @var \Civi\Funding\Permission\CiviPermissionChecker&\PHPUnit\Framework\MockObject\MockObject
36
+ */
37
+ private MockObject $ permissionCheckerMock ;
38
+
31
39
private FundingCaseFilterPermissionsSubscriber $ subscriber ;
32
40
33
41
private TestRequestContext $ requestContext ;
34
42
35
43
protected function setUp (): void {
36
44
parent ::setUp ();
45
+ $ this ->permissionCheckerMock = $ this ->createMock (CiviPermissionChecker::class);
37
46
$ this ->requestContext = TestRequestContext::newInternal ();
38
- $ this ->subscriber = new FundingCaseFilterPermissionsSubscriber ($ this ->requestContext );
47
+ $ this ->subscriber = new FundingCaseFilterPermissionsSubscriber ($ this ->permissionCheckerMock , $ this -> requestContext );
39
48
}
40
49
41
50
public function testGetSubscribedEvents (): void {
@@ -59,12 +68,22 @@ public function testExcludesNonApplicantPermissionsRemoteRequest(): void {
59
68
}
60
69
61
70
public function testPreventAccessInternalRequest (): void {
62
- $ event = $ this ->createEvent (['application_foo ' , 'review_bar ' ]);
71
+ $ event = $ this ->createEvent (['application_foo ' , 'review_bar ' , ' view ' ]);
63
72
64
73
$ this ->subscriber ->onPermissionsGet ($ event );
65
74
static ::assertSame ([], $ event ->getPermissions ());
66
75
}
67
76
77
+ public function testFundingAdminCanViewCasesWithApplicantPermissions (): void {
78
+ $ event = $ this ->createEvent (['application_foo ' , 'review_bar ' , 'view ' ]);
79
+ $ this ->permissionCheckerMock ->method ('checkPermission ' )
80
+ ->with (Permissions::ADMINISTER_FUNDING )
81
+ ->willReturn (TRUE );
82
+
83
+ $ this ->subscriber ->onPermissionsGet ($ event );
84
+ static ::assertSame (['view ' ], $ event ->getPermissions ());
85
+ }
86
+
68
87
public function testInternalRequest (): void {
69
88
$ event = $ this ->createEvent (['review_bar ' ]);
70
89
0 commit comments