]> BookStack Code Mirror - bookstack/commitdiff
Shelf view: Updated books to be database sorted
authorDan Brown <redacted>
Fri, 23 Jun 2023 15:42:40 +0000 (16:42 +0100)
committerDan Brown <redacted>
Fri, 23 Jun 2023 15:42:40 +0000 (16:42 +0100)
Fixes issue where sorting would not match other database-sorted parts of
app due to case sensitivity differences.
Added test to cover.

For #4341

app/Entities/Controllers/BookshelfController.php
tests/Entity/BookShelfTest.php

index d1b752dc23eef47b5f5e8297947d2ba6d46c375b..fcfd37538724a8c653e9997e3df732011cd30243 100644 (file)
@@ -30,7 +30,7 @@ class BookshelfController extends Controller
     }
 
     /**
-     * Display a listing of the book.
+     * Display a listing of bookshelves.
      */
     public function index(Request $request)
     {
@@ -111,8 +111,9 @@ class BookshelfController extends Controller
         ]);
 
         $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();
 
index a10a56e9ef338355a8434069e48705fb2e256453..c1842c175a791c335810179a7111c5c49ae31a5e 100644 (file)
@@ -196,6 +196,31 @@ class BookShelfTest extends TestCase
         $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();
Morty Proxy This is a proxified and sanitized view of the page, visit original site.