+ public function test_bookshelves_create_all_permissions()
+ {
+ $this->checkAccessPermission('bookshelf-create-all', [
+ '/create-shelf',
+ ], [
+ '/shelves' => 'New Shelf',
+ ]);
+
+ $this->post('/shelves', [
+ 'name' => 'test shelf',
+ 'description' => 'shelf desc',
+ ])->assertRedirect('/shelves/test-shelf');
+ }
+
+ public function test_bookshelves_edit_own_permission()
+ {
+ /** @var Bookshelf $otherShelf */
+ $otherShelf = Bookshelf::query()->first();
+ $ownShelf = $this->newShelf(['name' => 'test-shelf', 'slug' => 'test-shelf']);
+ $ownShelf->forceFill(['owned_by' => $this->user->id, 'updated_by' => $this->user->id])->save();
+ $this->regenEntityPermissions($ownShelf);
+
+ $this->checkAccessPermission('bookshelf-update-own', [
+ $ownShelf->getUrl('/edit'),
+ ], [
+ $ownShelf->getUrl() => 'Edit',
+ ]);
+
+ $resp = $this->get($otherShelf->getUrl());
+ $this->withHtml($resp)->assertElementNotContains('.action-buttons', 'Edit');
+ $this->get($otherShelf->getUrl('/edit'))->assertRedirect('/');
+ }
+
+ public function test_bookshelves_edit_all_permission()
+ {
+ /** @var Bookshelf $otherShelf */
+ $otherShelf = Bookshelf::query()->first();
+ $this->checkAccessPermission('bookshelf-update-all', [
+ $otherShelf->getUrl('/edit'),
+ ], [
+ $otherShelf->getUrl() => 'Edit',
+ ]);
+ }
+
+ public function test_bookshelves_delete_own_permission()
+ {
+ $this->giveUserPermissions($this->user, ['bookshelf-update-all']);
+ /** @var Bookshelf $otherShelf */
+ $otherShelf = Bookshelf::query()->first();
+ $ownShelf = $this->newShelf(['name' => 'test-shelf', 'slug' => 'test-shelf']);
+ $ownShelf->forceFill(['owned_by' => $this->user->id, 'updated_by' => $this->user->id])->save();
+ $this->regenEntityPermissions($ownShelf);
+
+ $this->checkAccessPermission('bookshelf-delete-own', [
+ $ownShelf->getUrl('/delete'),
+ ], [
+ $ownShelf->getUrl() => 'Delete',
+ ]);
+
+ $resp = $this->get($otherShelf->getUrl());
+ $this->withHtml($resp)->assertElementNotContains('.action-buttons', 'Delete');
+ $this->get($otherShelf->getUrl('/delete'))->assertRedirect('/');
+
+ $this->get($ownShelf->getUrl());
+ $this->delete($ownShelf->getUrl())->assertRedirect('/shelves');
+ $this->get('/shelves')->assertDontSee($ownShelf->name);
+ }
+
+ public function test_bookshelves_delete_all_permission()
+ {
+ $this->giveUserPermissions($this->user, ['bookshelf-update-all']);
+ /** @var Bookshelf $otherShelf */
+ $otherShelf = Bookshelf::query()->first();
+ $this->checkAccessPermission('bookshelf-delete-all', [
+ $otherShelf->getUrl('/delete'),
+ ], [
+ $otherShelf->getUrl() => 'Delete',
+ ]);
+
+ $this->delete($otherShelf->getUrl())->assertRedirect('/shelves');
+ $this->get('/shelves')->assertDontSee($otherShelf->name);
+ }
+