Searching: Fixed some form search issues

- Form was not retaining certain filters
- Form request handling of entity type set wrong filter name
Added test to cover.
This commit is contained in:
Dan Brown 2024-10-05 14:47:00 +01:00
parent c314a60a16
commit 51287d545b
No known key found for this signature in database
GPG Key ID: 46D9F943C24A2EF9
3 changed files with 20 additions and 4 deletions

View File

@ -73,7 +73,7 @@ class SearchOptions
} }
if (isset($inputs['types']) && count($inputs['types']) < 4) { if (isset($inputs['types']) && count($inputs['types']) < 4) {
$cleanedFilters[] = new FilterSearchOption(implode('|', $inputs['types']), 'types'); $cleanedFilters[] = new FilterSearchOption(implode('|', $inputs['types']), 'type');
} }
$instance->filters = new SearchOptionSet($cleanedFilters); $instance->filters = new SearchOptionSet($cleanedFilters);
@ -235,11 +235,14 @@ class SearchOptions
{ {
$options = []; $options = [];
// Non-[created/updated]-by-me options // Handle filters without UI support
$userFilters = ['updated_by', 'created_by', 'owned_by']; $userFilters = ['updated_by', 'created_by', 'owned_by'];
$unsupportedFilters = ['is_template', 'sort_by'];
foreach ($this->filters->all() as $filter) { foreach ($this->filters->all() as $filter) {
if (in_array($filter->getKey(), $userFilters, true) && $filter->value !== null && $filter->value !== 'me') { if (in_array($filter->getKey(), $userFilters, true) && $filter->value !== null && $filter->value !== 'me') {
$options[] = $filter; $options[] = $filter;
} else if (in_array($filter->getKey(), $unsupportedFilters, true)) {
$options[] = $filter;
} }
} }

View File

@ -573,8 +573,8 @@ class EntitySearchTest extends TestCase
public function test_searches_with_terms_without_controls_includes_them_in_extras() public function test_searches_with_terms_without_controls_includes_them_in_extras()
{ {
$resp = $this->asEditor()->get('/search?term=' . urlencode('test {updated_by:dan} {created_by:dan} -{viewed_by_me} -[a=b] -"dog"')); $resp = $this->asEditor()->get('/search?term=' . urlencode('test {updated_by:dan} {created_by:dan} -{viewed_by_me} -[a=b] -"dog" {is_template} {sort_by:last_commented}'));
$this->withHtml($resp)->assertFieldHasValue('extras', '{updated_by:dan} {created_by:dan} -"dog" -[a=b] -{viewed_by_me}'); $this->withHtml($resp)->assertFieldHasValue('extras', '{updated_by:dan} {created_by:dan} {is_template} {sort_by:last_commented} -"dog" -[a=b] -{viewed_by_me}');
} }
public function test_negated_searches_dont_show_in_inputs() public function test_negated_searches_dont_show_in_inputs()

View File

@ -113,6 +113,19 @@ class SearchOptionsTest extends TestCase
$this->assertEquals(['"cheese"', '""', '"baked', 'beans"'], $options->exacts->toValueArray()); $this->assertEquals(['"cheese"', '""', '"baked', 'beans"'], $options->exacts->toValueArray());
} }
public function test_from_request_properly_parses_provided_types()
{
$request = new Request([
'search' => '',
'types' => ['page', 'book'],
]);
$options = SearchOptions::fromRequest($request);
$filters = $options->filters->toValueMap();
$this->assertCount(1, $filters);
$this->assertEquals('page|book', $filters['type'] ?? 'notfound');
}
public function test_from_request_properly_parses_out_extras_as_string() public function test_from_request_properly_parses_out_extras_as_string()
{ {
$request = new Request([ $request = new Request([