X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/7f3f6e65b9705beabbafa5ceba8636a74ac22138..refs/pull/2296/head:/tests/Permissions/RolesTest.php diff --git a/tests/Permissions/RolesTest.php b/tests/Permissions/RolesTest.php index 5bbdcf0bb..73060c834 100644 --- a/tests/Permissions/RolesTest.php +++ b/tests/Permissions/RolesTest.php @@ -1,17 +1,16 @@ -user = $this->getViewer(); @@ -58,7 +57,7 @@ class RolesTest extends BrowserKitTest ->type('Test Role', 'display_name') ->type('A little test description', 'description') ->press('Save Role') - ->seeInDatabase('roles', ['display_name' => $testRoleName, 'name' => 'test-role', 'description' => $testRoleDesc]) + ->seeInDatabase('roles', ['display_name' => $testRoleName, 'description' => $testRoleDesc]) ->seePageIs('/settings/roles'); // Updating $this->asAdmin()->visit('/settings/roles') @@ -66,7 +65,7 @@ class RolesTest extends BrowserKitTest ->click($testRoleName) ->type($testRoleUpdateName, '#display_name') ->press('Save Role') - ->seeInDatabase('roles', ['display_name' => $testRoleUpdateName, 'name' => 'test-role', 'description' => $testRoleDesc]) + ->seeInDatabase('roles', ['display_name' => $testRoleUpdateName, 'description' => $testRoleDesc]) ->seePageIs('/settings/roles'); // Deleting $this->asAdmin()->visit('/settings/roles') @@ -100,6 +99,25 @@ class RolesTest extends BrowserKitTest $this->see('This user is the only user assigned to the administrator role'); } + public function test_migrate_users_on_delete_works() + { + $roleA = Role::query()->create(['display_name' => 'Delete Test A']); + $roleB = Role::query()->create(['display_name' => 'Delete Test B']); + $this->user->attachRole($roleB); + + $this->assertCount(0, $roleA->users()->get()); + $this->assertCount(1, $roleB->users()->get()); + + $deletePage = $this->asAdmin()->get("/settings/roles/delete/{$roleB->id}"); + $deletePage->seeElement('select[name=migrate_role_id]'); + $this->asAdmin()->delete("/settings/roles/delete/{$roleB->id}", [ + 'migrate_role_id' => $roleA->id, + ]); + + $this->assertCount(1, $roleA->users()->get()); + $this->assertEquals($this->user->id, $roleA->users()->first()->id); + } + public function test_manage_user_permission() { $this->actingAs($this->user)->visit('/settings/users') @@ -119,6 +137,43 @@ class RolesTest extends BrowserKitTest $this->actingAs($this->user)->visit('/')->dontSee($usersLink); } + public function test_user_cannot_change_email_unless_they_have_manage_users_permission() + { + $userProfileUrl = '/settings/users/' . $this->user->id; + $originalEmail = $this->user->email; + $this->actingAs($this->user); + + $this->visit($userProfileUrl) + ->assertResponseOk() + ->seeElement('input[name=email][disabled]'); + $this->put($userProfileUrl, [ + 'name' => 'my_new_name', + 'email' => 'new_email@example.com', + ]); + $this->seeInDatabase('users', [ + 'id' => $this->user->id, + 'email' => $originalEmail, + 'name' => 'my_new_name', + ]); + + $this->giveUserPermissions($this->user, ['users-manage']); + + $this->visit($userProfileUrl) + ->assertResponseOk() + ->dontSeeElement('input[name=email][disabled]') + ->seeElement('input[name=email]'); + $this->put($userProfileUrl, [ + 'name' => 'my_new_name_2', + 'email' => 'new_email@example.com', + ]); + + $this->seeInDatabase('users', [ + 'id' => $this->user->id, + 'email' => 'new_email@example.com', + 'name' => 'my_new_name_2', + ]); + } + public function test_user_roles_manage_permission() { $this->actingAs($this->user)->visit('/settings/roles') @@ -600,14 +655,14 @@ class RolesTest extends BrowserKitTest $ownPage->getUrl() => 'Delete' ]); - $bookUrl = $ownPage->book->getUrl(); + $parent = $ownPage->chapter ?? $ownPage->book; $this->visit($otherPage->getUrl()) ->dontSeeInElement('.action-buttons', 'Delete') ->visit($otherPage->getUrl() . '/delete') ->seePageIs('/'); $this->visit($ownPage->getUrl())->visit($ownPage->getUrl() . '/delete') ->press('Confirm') - ->seePageIs($bookUrl) + ->seePageIs($parent->getUrl()) ->dontSeeInElement('.book-content', $ownPage->name); } @@ -621,19 +676,21 @@ class RolesTest extends BrowserKitTest $otherPage->getUrl() => 'Delete' ]); - $bookUrl = $otherPage->book->getUrl(); + $parent = $otherPage->chapter ?? $otherPage->book; $this->visit($otherPage->getUrl())->visit($otherPage->getUrl() . '/delete') ->press('Confirm') - ->seePageIs($bookUrl) + ->seePageIs($parent->getUrl()) ->dontSeeInElement('.book-content', $otherPage->name); } public function test_public_role_visible_in_user_edit_screen() { $user = \BookStack\Auth\User::first(); + $adminRole = Role::getSystemRole('admin'); + $publicRole = Role::getSystemRole('public'); $this->asAdmin()->visit('/settings/users/' . $user->id) - ->seeElement('[name="roles[admin]"]') - ->seeElement('[name="roles[public]"]'); + ->seeElement('[name="roles['.$adminRole->id.']"]') + ->seeElement('[name="roles['.$publicRole->id.']"]'); } public function test_public_role_visible_in_role_listing() @@ -646,9 +703,8 @@ class RolesTest extends BrowserKitTest public function test_public_role_visible_in_default_role_setting() { $this->asAdmin()->visit('/settings') - ->seeElement('[data-role-name="admin"]') - ->seeElement('[data-role-name="public"]'); - + ->seeElement('[data-system-role-name="admin"]') + ->seeElement('[data-system-role-name="public"]'); } public function test_public_role_not_deleteable() @@ -814,7 +870,7 @@ class RolesTest extends BrowserKitTest private function addComment($page) { $comment = factory(\BookStack\Actions\Comment::class)->make(); - $url = "/ajax/page/$page->id/comment"; + $url = "/comment/$page->id"; $request = [ 'text' => $comment->text, 'html' => $comment->html @@ -827,7 +883,7 @@ class RolesTest extends BrowserKitTest private function updateComment($commentId) { $comment = factory(\BookStack\Actions\Comment::class)->make(); - $url = "/ajax/comment/$commentId"; + $url = "/comment/$commentId"; $request = [ 'text' => $comment->text, 'html' => $comment->html @@ -837,7 +893,7 @@ class RolesTest extends BrowserKitTest } private function deleteComment($commentId) { - $url = '/ajax/comment/' . $commentId; + $url = '/comment/' . $commentId; return $this->json('DELETE', $url); }