X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/03ee3d21bab5ef1b8fc09de27f3aa8115d947dd1..refs/pull/945/head:/tests/Permissions/RestrictionsTest.php diff --git a/tests/Permissions/RestrictionsTest.php b/tests/Permissions/RestrictionsTest.php index 433ae7ff9..2bbb1a5fa 100644 --- a/tests/Permissions/RestrictionsTest.php +++ b/tests/Permissions/RestrictionsTest.php @@ -1,7 +1,7 @@ user = $this->getEditor(); $this->viewer = $this->getViewer(); - $this->permissionService = $this->app[PermissionService::class]; } - /** - * Manually set some permissions on an entity. - * @param \BookStack\Entity $entity - * @param $actions - */ - protected function setEntityRestrictions(\BookStack\Entity $entity, $actions) + protected function setEntityRestrictions(Entity $entity, $actions = [], $roles = []) { - $entity->restricted = true; - $entity->permissions()->delete(); - - $role = $this->user->roles->first(); - $viewerRole = $this->viewer->roles->first(); - - $permissions = []; - foreach ($actions as $action) { - $permissions[] = [ - 'role_id' => $role->id, - 'action' => strtolower($action) - ]; - $permissions[] = [ - 'role_id' => $viewerRole->id, - 'action' => strtolower($action) - ]; - } - $entity->permissions()->createMany($permissions); - - $entity->save(); - $entity->load('permissions'); - $this->permissionService->buildJointPermissionsForEntity($entity); - $entity->load('jointPermissions'); + $roles = [ + $this->user->roles->first(), + $this->viewer->roles->first(), + ]; + parent::setEntityRestrictions($entity, $actions, $roles); } public function test_book_view_restriction() @@ -621,4 +592,26 @@ class RestrictionsTest extends BrowserKitTest ->see('You do not have permission') ->seePageIs('/'); } + + public function test_can_create_page_if_chapter_has_permissions_when_book_not_visible() + { + $book = Book::first(); + $this->setEntityRestrictions($book, []); + $bookChapter = $book->chapters->first(); + $this->setEntityRestrictions($bookChapter, ['view']); + + $this->actingAs($this->user)->visit($bookChapter->getUrl()) + ->dontSee('New Page'); + + $this->setEntityRestrictions($bookChapter, ['view', 'create']); + + $this->actingAs($this->user)->visit($bookChapter->getUrl()) + ->click('New Page') + ->seeStatusCode(200) + ->type('test page', 'name') + ->type('test content', 'html') + ->press('Save Page') + ->seePageIs($book->getUrl('/page/test-page')) + ->seeStatusCode(200); + } }