X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/93c677a6a955c75318c184d167737836c8c36cd5..refs/pull/5239/head:/tests/Entity/EntitySearchTest.php diff --git a/tests/Entity/EntitySearchTest.php b/tests/Entity/EntitySearchTest.php index c3e959345..3a1a0a662 100644 --- a/tests/Entity/EntitySearchTest.php +++ b/tests/Entity/EntitySearchTest.php @@ -118,6 +118,32 @@ class EntitySearchTest extends TestCase $exactSearchB->assertStatus(200)->assertDontSee($page->name); } + public function test_negated_searches() + { + $page = $this->entities->newPage(['name' => 'My new test negation page', 'html' => '

An angry tortoise wore trumpeted plimsoles

']); + $page->tags()->saveMany([new Tag(['name' => 'DonkCount', 'value' => '500'])]); + $page->created_by = $this->users->admin()->id; + $page->save(); + + $editor = $this->users->editor(); + $this->actingAs($editor); + + $exactSearch = $this->get('/search?term=' . urlencode('negation -"tortoise"')); + $exactSearch->assertStatus(200)->assertDontSeeText($page->name); + + $tagSearchA = $this->get('/search?term=' . urlencode('negation [DonkCount=500]')); + $tagSearchA->assertStatus(200)->assertSeeText($page->name); + $tagSearchB = $this->get('/search?term=' . urlencode('negation -[DonkCount=500]')); + $tagSearchB->assertStatus(200)->assertDontSeeText($page->name); + + $filterSearchA = $this->get('/search?term=' . urlencode('negation -{created_by:me}')); + $filterSearchA->assertStatus(200)->assertSeeText($page->name); + $page->created_by = $editor->id; + $page->save(); + $filterSearchB = $this->get('/search?term=' . urlencode('negation -{created_by:me}')); + $filterSearchB->assertStatus(200)->assertDontSeeText($page->name); + } + public function test_search_terms_with_delimiters_are_converted_to_exact_matches() { $this->asEditor(); @@ -551,6 +577,14 @@ class EntitySearchTest extends TestCase $this->withHtml($resp)->assertFieldHasValue('extras', '{updated_by:dan} {created_by:dan} -"dog" -[a=b] -{viewed_by_me}'); } + public function test_negated_searches_dont_show_in_inputs() + { + $resp = $this->asEditor()->get('/search?term=' . urlencode('-{created_by:me} -[a=b] -"dog"')); + $this->withHtml($resp)->assertElementNotExists('input[name="tags[]"][value="a=b"]'); + $this->withHtml($resp)->assertElementNotExists('input[name="exact[]"][value="dog"]'); + $this->withHtml($resp)->assertElementNotExists('input[name="filters[created_by]"][value="me"][checked="checked"]'); + } + public function test_searches_with_user_filters_using_me_adds_them_into_advanced_search_form() { $resp = $this->asEditor()->get('/search?term=' . urlencode('test {updated_by:me} {created_by:me}'));