*/
public function queryWithTotals(string $searchTerm, string $nameFilter): Builder
{
- $groupingAttribute = $nameFilter ? 'value' : 'name';
$query = Tag::query()
->select([
'name',
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) {
$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 */