X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/db51cee2d89f7b5acfc815e93cf04c8d67c6a4b8..refs/pull/2238/head:/tests/HomepageTest.php diff --git a/tests/HomepageTest.php b/tests/HomepageTest.php index ed0dbe47c..ada1f5aaf 100644 --- a/tests/HomepageTest.php +++ b/tests/HomepageTest.php @@ -1,8 +1,6 @@ assertSee('My Recently Viewed'); $homeVisit->assertSee('Recently Updated Pages'); $homeVisit->assertSee('Recent Activity'); + $homeVisit->assertSee('home-default'); } public function test_custom_homepage() { $this->asEditor(); $name = 'My custom homepage'; - $content = 'This is the body content of my custom homepage.'; + $content = str_repeat('This is the body content of my custom homepage.', 20); $customPage = $this->newPage(['name' => $name, 'html' => $content]); $this->setSettings(['app-homepage' => $customPage->id]); + $this->setSettings(['app-homepage-type' => 'page']); $homeVisit = $this->get('/'); $homeVisit->assertSee($name); @@ -36,12 +36,16 @@ class HomepageTest extends TestCase { $this->asEditor(); $name = 'My custom homepage'; - $content = 'This is the body content of my custom homepage.'; + $content = str_repeat('This is the body content of my custom homepage.', 20); $customPage = $this->newPage(['name' => $name, 'html' => $content]); - $this->setSettings(['app-homepage' => $customPage->id]); + $this->setSettings([ + 'app-homepage' => $customPage->id, + 'app-homepage-type' => 'page' + ]); $homeVisit = $this->get('/'); $homeVisit->assertSee($name); + $homeVisit->assertElementNotExists('#home-default'); $pageDeleteReq = $this->delete($customPage->getUrl()); $pageDeleteReq->assertStatus(302); @@ -53,4 +57,88 @@ class HomepageTest extends TestCase $homeVisit->assertSee($name); $homeVisit->assertStatus(200); } + + public function test_custom_homepage_can_be_deleted_once_custom_homepage_no_longer_used() + { + $this->asEditor(); + $name = 'My custom homepage'; + $content = str_repeat('This is the body content of my custom homepage.', 20); + $customPage = $this->newPage(['name' => $name, 'html' => $content]); + $this->setSettings([ + 'app-homepage' => $customPage->id, + 'app-homepage-type' => 'default' + ]); + + $pageDeleteReq = $this->delete($customPage->getUrl()); + $pageDeleteReq->assertStatus(302); + $pageDeleteReq->assertSessionHas('success'); + $pageDeleteReq->assertSessionMissing('error'); + } + + public function test_set_book_homepage() + { + $editor = $this->getEditor(); + setting()->putUser($editor, 'books_view_type', 'grid'); + + $this->setSettings(['app-homepage-type' => 'books']); + + $this->asEditor(); + $homeVisit = $this->get('/'); + $homeVisit->assertSee('Books'); + $homeVisit->assertSee('grid-card'); + $homeVisit->assertSee('grid-card-content'); + $homeVisit->assertSee('grid-card-footer'); + $homeVisit->assertSee('featured-image-container'); + + $this->setSettings(['app-homepage-type' => false]); + $this->test_default_homepage_visible(); + } + + public function test_set_bookshelves_homepage() + { + $editor = $this->getEditor(); + setting()->putUser($editor, 'bookshelves_view_type', 'grid'); + + $this->setSettings(['app-homepage-type' => 'bookshelves']); + + $this->asEditor(); + $homeVisit = $this->get('/'); + $homeVisit->assertSee('Shelves'); + $homeVisit->assertSee('bookshelf-grid-item grid-card'); + $homeVisit->assertSee('grid-card-content'); + $homeVisit->assertSee('grid-card-footer'); + $homeVisit->assertSee('featured-image-container'); + + $this->setSettings(['app-homepage-type' => false]); + $this->test_default_homepage_visible(); + } + + public function test_shelves_list_homepage_adheres_to_book_visibility_permissions() + { + $editor = $this->getEditor(); + setting()->putUser($editor, 'bookshelves_view_type', 'list'); + $this->setSettings(['app-homepage-type' => 'bookshelves']); + $this->asEditor(); + + $shelf = Bookshelf::query()->first(); + $book = $shelf->books()->first(); + + // Ensure initially visible + $homeVisit = $this->get('/'); + $homeVisit->assertElementContains('.content-wrap', $shelf->name); + $homeVisit->assertElementContains('.content-wrap', $book->name); + + // Ensure book no longer visible without view permission + $editor->roles()->detach(); + $this->giveUserPermissions($editor, ['bookshelf-view-all']); + $homeVisit = $this->get('/'); + $homeVisit->assertElementContains('.content-wrap', $shelf->name); + $homeVisit->assertElementNotContains('.content-wrap', $book->name); + + // Ensure is visible again with entity-level view permission + $this->setEntityRestrictions($book, ['view'], [$editor->roles()->first()]); + $homeVisit = $this->get('/'); + $homeVisit->assertElementContains('.content-wrap', $shelf->name); + $homeVisit->assertElementContains('.content-wrap', $book->name); + } }