From b7d4bd5bcef09ff20d08626f943d707c1e0f175e Mon Sep 17 00:00:00 2001 From: Dan Brown Date: Sat, 9 Mar 2024 15:24:44 +0000 Subject: [PATCH] Breadcrumbs: Set book/shelf lists to use name ordering Previously in database order (id) which is not predictable nor parsable for users. For #4876 --- app/Entities/Tools/SiblingFetcher.php | 4 +-- tests/Entity/EntitySearchTest.php | 36 +++++++++++++++++++++++++++ 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/app/Entities/Tools/SiblingFetcher.php b/app/Entities/Tools/SiblingFetcher.php index 34d0fc6b0..156209fd2 100644 --- a/app/Entities/Tools/SiblingFetcher.php +++ b/app/Entities/Tools/SiblingFetcher.php @@ -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; diff --git a/tests/Entity/EntitySearchTest.php b/tests/Entity/EntitySearchTest.php index dcc062044..4b032bfc3 100644 --- a/tests/Entity/EntitySearchTest.php +++ b/tests/Entity/EntitySearchTest.php @@ -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();