22
33namespace Rhubarb \Scaffolds \AuthenticationWithRoles \Tests \unit ;
44
5+ use Rhubarb \Crown \Application ;
6+ use Rhubarb \Crown \Layout \LayoutModule ;
57use Rhubarb \Crown \Tests \Fixtures \TestCases \RhubarbTestCase ;
8+ use Rhubarb \Scaffolds \Authentication \LoginProviders \LoginProvider ;
9+ use Rhubarb \Scaffolds \AuthenticationWithRoles \AuthenticationWithRolesModule ;
610use Rhubarb \Scaffolds \AuthenticationWithRoles \DatabaseSchema ;
711use Rhubarb \Scaffolds \AuthenticationWithRoles \Permission ;
812use Rhubarb \Scaffolds \AuthenticationWithRoles \PermissionAssignment ;
913use Rhubarb \Scaffolds \AuthenticationWithRoles \PermissionException ;
1014use Rhubarb \Scaffolds \AuthenticationWithRoles \Role ;
15+ use Rhubarb \Scaffolds \AuthenticationWithRoles \RolePermissionDefinitions ;
1116use Rhubarb \Scaffolds \AuthenticationWithRoles \User ;
1217use Rhubarb \Scaffolds \AuthenticationWithRoles \UserRole ;
18+ use Rhubarb \Stem \Repositories \Offline \Offline ;
19+ use Rhubarb \Stem \Repositories \Repository ;
1320use Rhubarb \Stem \Schema \SolutionSchema ;
1421
1522class UserTest extends RhubarbTestCase
@@ -18,13 +25,15 @@ protected function setUp()
1825 {
1926 parent ::setUp ();
2027
28+ Repository::setDefaultRepositoryClassName (Offline::class);
2129 SolutionSchema::registerSchema ("Authentication " , DatabaseSchema::class);
2230
23- User::clearObjectCache ();
24- Role::clearObjectCache ();
25- UserRole::clearObjectCache ();
26- Permission::clearObjectCache ();
27- PermissionAssignment::clearObjectCache ();
31+ $ app = new Application ();
32+ $ app ->registerModule (new AuthenticationWithRolesModule (LoginProvider::class));
33+ $ app ->unitTesting = true ;
34+ $ app ->initialiseModules ();
35+
36+ LayoutModule::disableLayout ();
2837 }
2938
3039 public function testRoleCanBeAdded ()
@@ -203,4 +212,37 @@ public function testParentageOfPermissions()
203212
204213 $ this ->assertTrue ($ user ->can ("Staff/Manage/Fire " ));
205214 }
215+
216+ public function testRolePermissionManager ()
217+ {
218+ self ::assertCount (0 , Role::all ());
219+ self ::assertCount (0 , Permission::all ());
220+ AuthenticationWithRolesModule::updateRolePermissions ();
221+ self ::assertCount (0 , Role::all ());
222+ self ::assertCount (0 , Permission::all ());
223+
224+ /** @var RolePermissionDefinitions $definitions */
225+ $ definitions = RolePermissionDefinitions::singleton ();
226+ $ definitions ->allowPermissionsForRole ('r1 ' , ['p1 ' ]);
227+ $ definitions ->allowPermissionsForRole ('r2 ' , []);
228+ AuthenticationWithRolesModule::updateRolePermissions ();
229+ $ p1 = Permission::findFirst ();
230+ $ r1 = Role::findFirst ();
231+ $ r2 = Role::findLast ();
232+ self ::assertEquals ('p1 ' , $ p1 ->PermissionPath );
233+ self ::assertEquals ('r1 ' , $ r1 ->RoleName );
234+ self ::assertEquals ('r2 ' , $ r2 ->RoleName );
235+ self ::assertTrue ($ r1 ->can ('p1 ' ));
236+ self ::assertFalse ($ r2 ->can ('p1 ' ));
237+
238+ $ definitions ->allowPermissionsForRole ('r2 ' , ['p1/p2 ' ]);
239+ AuthenticationWithRolesModule::updateRolePermissions ();
240+ self ::assertTrue ($ r1 ->can ('p1/p2 ' ));
241+ self ::assertTrue ($ r2 ->can ('p1/p2 ' ));
242+
243+ $ definitions ->denyPermissionsForRole ('r1 ' , ['p1/p2/p3 ' ]);
244+ AuthenticationWithRolesModule::updateRolePermissions ();
245+ self ::assertFalse ($ r1 ->can ('p1/p2/p3 ' ));
246+ self ::assertTrue ($ r2 ->can ('p1/p2/p3 ' ));
247+ }
206248}
0 commit comments