Skip to content

Commit

Permalink
Shelf view: Updated books to be database sorted
Browse files Browse the repository at this point in the history
Fixes issue where sorting would not match other database-sorted parts of
app due to case sensitivity differences.
Added test to cover.

For BookStackApp#4341
  • Loading branch information
ssddanbrown committed Jun 23, 2023
1 parent 0a485ba commit 9ae17ef
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 3 deletions.
7 changes: 4 additions & 3 deletions app/Entities/Controllers/BookshelfController.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public function __construct(BookshelfRepo $shelfRepo, ShelfContext $shelfContext
}

/**
* Display a listing of the book.
* Display a listing of bookshelves.
*/
public function index(Request $request)
{
Expand Down Expand Up @@ -111,8 +111,9 @@ public function show(Request $request, ActivityQueries $activities, string $slug
]);

$sort = $listOptions->getSort();
$sortedVisibleShelfBooks = $shelf->visibleBooks()->get()
->sortBy($sort === 'default' ? 'pivot.order' : $sort, SORT_REGULAR, $listOptions->getOrder() === 'desc')
$sortedVisibleShelfBooks = $shelf->visibleBooks()
->reorder($sort === 'default' ? 'order' : $sort, $listOptions->getOrder())
->get()
->values()
->all();

Expand Down
25 changes: 25 additions & 0 deletions tests/Entity/BookShelfTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,31 @@ public function test_shelf_view_sort_takes_action()
$this->withHtml($resp)->assertElementContains('.book-content a.grid-card:nth-child(3)', 'adsfsdfsdfsd');
}

public function test_shelf_view_sorts_by_name_case_insensitively()
{
$shelf = Bookshelf::query()->whereHas('books')->with('books')->first();
$books = Book::query()->take(3)->get(['id', 'name']);
$books[0]->fill(['name' => 'Book Ab'])->save();
$books[1]->fill(['name' => 'Book ac'])->save();
$books[2]->fill(['name' => 'Book AD'])->save();

// Set book ordering
$this->asAdmin()->put($shelf->getUrl(), [
'books' => $books->implode('id', ','),
'tags' => [], 'description' => 'abc', 'name' => 'abc',
]);
$this->assertEquals(3, $shelf->books()->count());
$shelf->refresh();

setting()->putUser($this->users->editor(), 'shelf_books_sort', 'name');
setting()->putUser($this->users->editor(), 'shelf_books_sort_order', 'asc');
$html = $this->withHtml($this->asEditor()->get($shelf->getUrl()));

$html->assertElementContains('.book-content a.grid-card:nth-child(1)', 'Book Ab');
$html->assertElementContains('.book-content a.grid-card:nth-child(2)', 'Book ac');
$html->assertElementContains('.book-content a.grid-card:nth-child(3)', 'Book AD');
}

public function test_shelf_edit()
{
$shelf = $this->entities->shelf();
Expand Down

0 comments on commit 9ae17ef

Please sign in to comment.