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) {
$cleanedFilters[] = new FilterSearchOption(implode('|', $inputs['types']), 'types');
$cleanedFilters[] = new FilterSearchOption(implode('|', $inputs['types']), 'type');
}
$instance->filters = new SearchOptionSet($cleanedFilters);
@ -235,11 +235,14 @@ class SearchOptions
{
$options = [];
// Non-[created/updated]-by-me options
// Handle filters without UI support
$userFilters = ['updated_by', 'created_by', 'owned_by'];
$unsupportedFilters = ['is_template', 'sort_by'];
foreach ($this->filters->all() as $filter) {
if (in_array($filter->getKey(), $userFilters, true) && $filter->value !== null && $filter->value !== 'me') {
$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()
{
$resp = $this->asEditor()->get('/search?term=' . urlencode('test {updated_by:dan} {created_by:dan} -{viewed_by_me} -[a=b] -"dog"'));
$this->withHtml($resp)->assertFieldHasValue('extras', '{updated_by:dan} {created_by:dan} -"dog" -[a=b] -{viewed_by_me}');
$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} {is_template} {sort_by:last_commented} -"dog" -[a=b] -{viewed_by_me}');
}
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());
}
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()
{
$request = new Request([