]> BookStack Code Mirror - bookstack/commitdiff
Breadcrumbs: Set book/shelf lists to use name ordering
authorDan Brown <redacted>
Sat, 9 Mar 2024 15:24:44 +0000 (15:24 +0000)
committerDan Brown <redacted>
Sat, 9 Mar 2024 15:24:44 +0000 (15:24 +0000)
Previously in database order (id) which is not predictable
nor parsable for users.
For #4876

app/Entities/Tools/SiblingFetcher.php
tests/Entity/EntitySearchTest.php

index 34d0fc6b07e465c3bdc85dbaf7174fdc668ecf24..156209fd23e78ef641cb7324d477a1e469c54466 100644 (file)
@@ -43,13 +43,13 @@ class SiblingFetcher
             if ($contextShelf) {
                 $entities = $contextShelf->visibleBooks()->get();
             } else {
-                $entities = $this->queries->books->visibleForList()->get();
+                $entities = $this->queries->books->visibleForList()->orderBy('name', 'asc')->get();
             }
         }
 
         // Shelf
         if ($entity instanceof Bookshelf) {
-            $entities = $this->queries->shelves->visibleForList()->get();
+            $entities = $this->queries->shelves->visibleForList()->orderBy('name', 'asc')->get();
         }
 
         return $entities;
index dcc0620444628c92680666578db25e46831e28b6..4b032bfc331883c54ceeb567ce0e997e1739f221 100644 (file)
@@ -356,6 +356,42 @@ class EntitySearchTest extends TestCase
         }
     }
 
+    public function test_sibling_search_for_books_provides_results_in_alphabetical_order()
+    {
+        $contextBook = $this->entities->book();
+        $searchBook = $this->entities->book();
+
+        $searchBook->name = 'Zebras';
+        $searchBook->save();
+
+        $search = $this->actingAs($this->users->viewer())->get("/search/entity/siblings?entity_id={$contextBook->id}&entity_type=book");
+        $this->withHtml($search)->assertElementNotContains('a:first-child', 'Zebras');
+
+        $searchBook->name = 'AAAAAAArdvarks';
+        $searchBook->save();
+
+        $search = $this->actingAs($this->users->viewer())->get("/search/entity/siblings?entity_id={$contextBook->id}&entity_type=book");
+        $this->withHtml($search)->assertElementContains('a:first-child', 'AAAAAAArdvarks');
+    }
+
+    public function test_sibling_search_for_shelves_provides_results_in_alphabetical_order()
+    {
+        $contextShelf = $this->entities->shelf();
+        $searchShelf = $this->entities->shelf();
+
+        $searchShelf->name = 'Zebras';
+        $searchShelf->save();
+
+        $search = $this->actingAs($this->users->viewer())->get("/search/entity/siblings?entity_id={$contextShelf->id}&entity_type=bookshelf");
+        $this->withHtml($search)->assertElementNotContains('a:first-child', 'Zebras');
+
+        $searchShelf->name = 'AAAAAAArdvarks';
+        $searchShelf->save();
+
+        $search = $this->actingAs($this->users->viewer())->get("/search/entity/siblings?entity_id={$contextShelf->id}&entity_type=bookshelf");
+        $this->withHtml($search)->assertElementContains('a:first-child', 'AAAAAAArdvarks');
+    }
+
     public function test_search_works_on_updated_page_content()
     {
         $page = $this->entities->page();