X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/cdb1c7ef88a0054c46ba9eb040464bdea274b095..refs/pull/1462/head:/tests/SharedTestHelpers.php diff --git a/tests/SharedTestHelpers.php b/tests/SharedTestHelpers.php index 325979e74..8e903be11 100644 --- a/tests/SharedTestHelpers.php +++ b/tests/SharedTestHelpers.php @@ -1,12 +1,16 @@ users()->first(); + $user = \BookStack\Auth\Role::getRole('viewer')->users()->first(); if (!empty($attributes)) $user->forceFill($attributes)->save(); return $user; } + /** + * Regenerate the permission for an entity. + * @param Entity $entity + */ + protected function regenEntityPermissions(Entity $entity) + { + app(PermissionService::class)->buildJointPermissionsForEntity($entity); + $entity->load('jointPermissions'); + } + + /** + * Create and return a new bookshelf. + * @param array $input + * @return \BookStack\Entities\Bookshelf + */ + public function newShelf($input = ['name' => 'test shelf', 'description' => 'My new test shelf']) { + return app(EntityRepo::class)->createFromInput('bookshelf', $input, false); + } + /** * Create and return a new book. * @param array $input * @return Book */ public function newBook($input = ['name' => 'test book', 'description' => 'My new test book']) { - return $this->app[EntityRepo::class]->createFromInput('book', $input, false); + return app(EntityRepo::class)->createFromInput('book', $input, false); } /** * Create and return a new test chapter * @param array $input * @param Book $book - * @return Chapter + * @return \BookStack\Entities\Chapter */ public function newChapter($input = ['name' => 'test chapter', 'description' => 'My new test chapter'], Book $book) { - return $this->app[EntityRepo::class]->createFromInput('chapter', $input, $book); + return app(EntityRepo::class)->createFromInput('chapter', $input, $book); } /** * Create and return a new test page * @param array $input - * @return Chapter + * @return Page */ public function newPage($input = ['name' => 'test page', 'html' => 'My new test page']) { $book = Book::first(); - $entityRepo = $this->app[EntityRepo::class]; - $draftPage = $entityRepo->getDraftPage($book); - return $entityRepo->publishPageDraft($draftPage, $input); + $pageRepo = app(PageRepo::class); + $draftPage = $pageRepo->getDraftPage($book); + return $pageRepo->publishPageDraft($draftPage, $input); } /** @@ -140,4 +163,30 @@ trait SharedTestHelpers $entity->load('jointPermissions'); } + /** + * Give the given user some permissions. + * @param \BookStack\Auth\User $user + * @param array $permissions + */ + protected function giveUserPermissions(\BookStack\Auth\User $user, $permissions = []) + { + $newRole = $this->createNewRole($permissions); + $user->attachRole($newRole); + $user->load('roles'); + $user->permissions(false); + } + + /** + * Create a new basic role for testing purposes. + * @param array $permissions + * @return Role + */ + protected function createNewRole($permissions = []) + { + $permissionRepo = app(PermissionsRepo::class); + $roleData = factory(Role::class)->make()->toArray(); + $roleData['permissions'] = array_flip($permissions); + return $permissionRepo->saveNewRole($roleData); + } + } \ No newline at end of file