]> BookStack Code Mirror - bookstack/commitdiff
Fixed tags listing grouping by name only on search
authorDan Brown <redacted>
Mon, 15 Nov 2021 19:00:37 +0000 (19:00 +0000)
committerDan Brown <redacted>
Mon, 15 Nov 2021 19:00:37 +0000 (19:00 +0000)
Included test to cover case

app/Actions/TagRepo.php
tests/Entity/TagTest.php

index ab1b40677e81c0600128849096fa085d5f39d141..a3298dc16eb5adeb888ccee4621628e01b78b626 100644 (file)
@@ -23,7 +23,6 @@ class TagRepo
      */
     public function queryWithTotals(string $searchTerm, string $nameFilter): Builder
     {
-        $groupingAttribute = $nameFilter ? 'value' : 'name';
         $query = Tag::query()
             ->select([
                 'name',
@@ -34,11 +33,15 @@ class TagRepo
                 DB::raw('SUM(IF(entity_type = \'BookStack\\\\Book\', 1, 0)) as book_count'),
                 DB::raw('SUM(IF(entity_type = \'BookStack\\\\BookShelf\', 1, 0)) as shelf_count'),
             ])
-            ->groupBy($groupingAttribute)
-            ->orderBy($groupingAttribute);
+            ->orderBy($nameFilter ? 'value' : 'name');
 
         if ($nameFilter) {
             $query->where('name', '=', $nameFilter);
+            $query->groupBy('value');
+        } else if ($searchTerm) {
+            $query->groupBy('name', 'value');
+        } else {
+            $query->groupBy('name');
         }
 
         if ($searchTerm) {
index db76cae5f790f0aa90ee0959c16679bb0a261b58..160dd62d8181c7f08a361502295755b47da02e23 100644 (file)
@@ -145,6 +145,18 @@ class TagTest extends TestCase
         $resp->assertElementNotExists('.tag-item .tag-name');
     }
 
+    public function test_tag_index_search_will_show_mulitple_values_of_a_single_tag_name()
+    {
+        /** @var Page $page */
+        $page = Page::query()->first();
+        $page->tags()->create(['name' => 'Animal', 'value' => 'Catfish']);
+        $page->tags()->create(['name' => 'Animal', 'value' => 'Catdog']);
+
+        $resp = $this->asEditor()->get('/tags?search=cat');
+        $resp->assertElementContains('.tag-item .tag-value', 'Catfish');
+        $resp->assertElementContains('.tag-item .tag-value', 'Catdog');
+    }
+
     public function test_tag_index_can_be_scoped_to_specific_tag_name()
     {
         /** @var Page $page */