]> BookStack Code Mirror - bookstack/blob - tests/RolesTest.php
Refactored some permission controls and increased testing for roles system
[bookstack] / tests / RolesTest.php
1 <?php
2
3 class RolesTest extends TestCase
4 {
5     protected $user;
6
7     public function setUp()
8     {
9         parent::setUp();
10     }
11
12     /**
13      * Create a new basic role for testing purposes.
14      * @return static
15      */
16     protected function createNewRole()
17     {
18         $permissionRepo = app('BookStack\Repos\PermissionsRepo');
19         return $permissionRepo->saveNewRole(factory(\BookStack\Role::class)->make()->toArray());
20     }
21
22     public function test_admin_can_see_settings()
23     {
24         $this->asAdmin()->visit('/settings')->see('Settings');
25     }
26
27     public function test_cannot_delete_admin_role()
28     {
29         $adminRole = \BookStack\Role::getRole('admin');
30         $deletePageUrl = '/settings/roles/delete/' . $adminRole->id;
31         $this->asAdmin()->visit($deletePageUrl)
32             ->press('Confirm')
33             ->seePageIs($deletePageUrl)
34             ->see('cannot be deleted');
35     }
36
37     public function test_role_cannot_be_deleted_if_default()
38     {
39         $newRole = $this->createNewRole();
40         $this->setSettings(['registration-role' => $newRole->id]);
41
42         $deletePageUrl = '/settings/roles/delete/' . $newRole->id;
43         $this->asAdmin()->visit($deletePageUrl)
44             ->press('Confirm')
45             ->seePageIs($deletePageUrl)
46             ->see('cannot be deleted');
47     }
48
49     public function test_role_create_update_delete_flow()
50     {
51         $testRoleName = 'Test Role';
52         $testRoleDesc = 'a little test description';
53         $testRoleUpdateName = 'An Super Updated role';
54
55         // Creation
56         $this->asAdmin()->visit('/settings')
57             ->click('Roles')
58             ->seePageIs('/settings/roles')
59             ->click('Add new role')
60             ->type('Test Role', 'display_name')
61             ->type('A little test description', 'description')
62             ->press('Save Role')
63             ->seeInDatabase('roles', ['display_name' => $testRoleName, 'name' => 'test-role', 'description' => $testRoleDesc])
64             ->seePageIs('/settings/roles');
65         // Updating
66         $this->asAdmin()->visit('/settings/roles')
67             ->see($testRoleDesc)
68             ->click($testRoleName)
69             ->type($testRoleUpdateName, '#display_name')
70             ->press('Save Role')
71             ->seeInDatabase('roles', ['display_name' => $testRoleUpdateName, 'name' => 'test-role', 'description' => $testRoleDesc])
72             ->seePageIs('/settings/roles');
73         // Deleting
74         $this->asAdmin()->visit('/settings/roles')
75             ->click($testRoleUpdateName)
76             ->click('Delete Role')
77             ->see($testRoleUpdateName)
78             ->press('Confirm')
79             ->seePageIs('/settings/roles')
80             ->dontSee($testRoleUpdateName);
81     }
82
83 }