X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/3ac34b584930aad5625d29ca6c2e59b85e9d2ef8..refs/pull/2023/head:/tests/HomepageTest.php diff --git a/tests/HomepageTest.php b/tests/HomepageTest.php index 29e0985c3..ada1f5aaf 100644 --- a/tests/HomepageTest.php +++ b/tests/HomepageTest.php @@ -1,5 +1,7 @@ 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); @@ -32,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); @@ -50,22 +58,87 @@ class HomepageTest extends TestCase $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-book-homepage' => true]); + $this->setSettings(['app-homepage-type' => 'books']); $this->asEditor(); $homeVisit = $this->get('/'); $homeVisit->assertSee('Books'); - $homeVisit->assertSee('book-grid-item grid-card'); + $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-book-homepage' => false]); + $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); + } }