X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/07bc0612c0d276d8d9fb234f570556f655afdf04..refs/pull/1756/head:/tests/Entity/BookShelfTest.php diff --git a/tests/Entity/BookShelfTest.php b/tests/Entity/BookShelfTest.php index 9071e3c06..5c7673847 100644 --- a/tests/Entity/BookShelfTest.php +++ b/tests/Entity/BookShelfTest.php @@ -1,7 +1,10 @@ assertElementContains('header', 'Shelves'); } + public function test_shelves_shows_in_header_if_have_any_shelve_view_permission() + { + $user = factory(User::class)->create(); + $this->giveUserPermissions($user, ['image-create-all']); + $shelf = Bookshelf::first(); + $userRole = $user->roles()->first(); + + $resp = $this->actingAs($user)->get('/'); + $resp->assertElementNotContains('header', 'Shelves'); + + $this->setEntityRestrictions($shelf, ['view'], [$userRole]); + + $resp = $this->get('/'); + $resp->assertElementContains('header', 'Shelves'); + } + public function test_shelves_page_contains_create_link() { $resp = $this->asEditor()->get('/shelves'); - $resp->assertElementContains('a', 'Create New Shelf'); + $resp->assertElementContains('a', 'New Shelf'); } public function test_shelves_create() { $booksToInclude = Book::take(2)->get(); $shelfInfo = [ - 'name' => 'My test book' . str_random(4), - 'description' => 'Test book description ' . str_random(10) + 'name' => 'My test book' . Str::random(4), + 'description' => 'Test book description ' . Str::random(10) ]; $resp = $this->asEditor()->post('/shelves', array_merge($shelfInfo, [ 'books' => $booksToInclude->implode('id', ','), @@ -81,9 +100,11 @@ class BookShelfTest extends TestCase { $shelf = Bookshelf::first(); $resp = $this->asAdmin()->get($shelf->getUrl()); + $resp->assertSee($shelf->getUrl('/create-book')); $resp->assertSee($shelf->getUrl('/edit')); $resp->assertSee($shelf->getUrl('/permissions')); $resp->assertSee($shelf->getUrl('/delete')); + $resp->assertElementContains('a', 'New Book'); $resp->assertElementContains('a', 'Edit'); $resp->assertElementContains('a', 'Permissions'); $resp->assertElementContains('a', 'Delete'); @@ -100,8 +121,8 @@ class BookShelfTest extends TestCase $booksToInclude = Book::take(2)->get(); $shelfInfo = [ - 'name' => 'My test book' . str_random(4), - 'description' => 'Test book description ' . str_random(10) + 'name' => 'My test book' . Str::random(4), + 'description' => 'Test book description ' . Str::random(10) ]; $resp = $this->asEditor()->put($shelf->getUrl(), array_merge($shelfInfo, [ @@ -130,6 +151,32 @@ class BookShelfTest extends TestCase $this->assertDatabaseHas('bookshelves_books', ['bookshelf_id' => $shelf->id, 'book_id' => $booksToInclude[1]->id]); } + public function test_shelf_create_new_book() + { + $shelf = Bookshelf::first(); + $resp = $this->asEditor()->get($shelf->getUrl('/create-book')); + + $resp->assertSee('Create New Book'); + $resp->assertSee($shelf->getShortName()); + + $testName = 'Test Book in Shelf Name'; + + $createBookResp = $this->asEditor()->post($shelf->getUrl('/create-book'), [ + 'name' => $testName, + 'description' => 'Book in shelf description' + ]); + $createBookResp->assertRedirect(); + + $newBook = Book::query()->orderBy('id', 'desc')->first(); + $this->assertDatabaseHas('bookshelves_books', [ + 'bookshelf_id' => $shelf->id, + 'book_id' => $newBook->id, + ]); + + $resp = $this->asEditor()->get($shelf->getUrl()); + $resp->assertSee($testName); + } + public function test_shelf_delete() { $shelf = Bookshelf::first(); @@ -167,4 +214,30 @@ class BookShelfTest extends TestCase $this->assertDatabaseHas('entity_permissions', ['restrictable_id' => $child->id, 'action' => 'update', 'role_id' => $editorRole->id]); } + public function test_bookshelves_show_in_breadcrumbs_if_in_context() + { + $shelf = Bookshelf::first(); + $shelfBook = $shelf->books()->first(); + $shelfPage = $shelfBook->pages()->first(); + $this->asAdmin(); + + $bookVisit = $this->get($shelfBook->getUrl()); + $bookVisit->assertElementNotContains('.breadcrumbs', 'Shelves'); + $bookVisit->assertElementNotContains('.breadcrumbs', $shelf->getShortName()); + + $this->get($shelf->getUrl()); + $bookVisit = $this->get($shelfBook->getUrl()); + $bookVisit->assertElementContains('.breadcrumbs', 'Shelves'); + $bookVisit->assertElementContains('.breadcrumbs', $shelf->getShortName()); + + $pageVisit = $this->get($shelfPage->getUrl()); + $pageVisit->assertElementContains('.breadcrumbs', 'Shelves'); + $pageVisit->assertElementContains('.breadcrumbs', $shelf->getShortName()); + + $this->get('/books'); + $pageVisit = $this->get($shelfPage->getUrl()); + $pageVisit->assertElementNotContains('.breadcrumbs', 'Shelves'); + $pageVisit->assertElementNotContains('.breadcrumbs', $shelf->getShortName()); + } + }