Added tests to cover regresssion.
In reference to #100.
{
$book = $this->bookRepo->getBySlug($bookSlug);
$this->checkOwnablePermission('book-update', $book);
- $bookChildren = $this->bookRepo->getChildren($book);
+ $bookChildren = $this->bookRepo->getChildren($book, true);
$books = $this->bookRepo->getAll(false);
$this->setPageTitle('Sort Book ' . $book->getShortName());
return view('books/sort', ['book' => $book, 'current' => $book, 'books' => $books, 'bookChildren' => $bookChildren]);
* Returns a sorted collection of Pages and Chapters.
* Loads the bookslug onto child elements to prevent access database access for getting the slug.
* @param Book $book
+ * @param bool $filterDrafts
* @return mixed
*/
- public function getChildren(Book $book)
+ public function getChildren(Book $book, $filterDrafts = false)
{
$pageQuery = $book->pages()->where('chapter_id', '=', 0);
$pageQuery = $this->restrictionService->enforcePageRestrictions($pageQuery, 'view');
+
+ if ($filterDrafts) {
+ $pageQuery = $pageQuery->where('draft', '=', false);
+ }
+
$pages = $pageQuery->get();
- $chapterQuery = $book->chapters()->with(['pages' => function($query) {
+ $chapterQuery = $book->chapters()->with(['pages' => function($query) use ($filterDrafts) {
$this->restrictionService->enforcePageRestrictions($query, 'view');
+ if ($filterDrafts) $query->where('draft', '=', false);
}]);
$chapterQuery = $this->restrictionService->enforceChapterRestrictions($chapterQuery, 'view');
$chapters = $chapterQuery->get();
/**
* Get a new draft page instance.
* @param Book $book
- * @param Chapter|null $chapter
+ * @param Chapter|bool $chapter
* @return static
*/
- public function getDraftPage(Book $book, $chapter)
+ public function getDraftPage(Book $book, $chapter = false)
{
$page = $this->page->newInstance();
$page->name = 'New Page';
--- /dev/null
+<?php
+
+class SortTest extends TestCase
+{
+ protected $book;
+
+ public function setUp()
+ {
+ parent::setUp();
+ $this->book = \BookStack\Book::first();
+ }
+
+ public function test_drafts_do_not_show_up()
+ {
+ $this->asAdmin();
+ $pageRepo = app('\BookStack\Repos\PageRepo');
+ $draft = $pageRepo->getDraftPage($this->book);
+
+ $this->visit($this->book->getUrl())
+ ->see($draft->name)
+ ->visit($this->book->getUrl() . '/sort')
+ ->dontSee($draft->name);
+ }
+
+}
\ No newline at end of file