+ $pageTestResp = $this->asEditor()->get('/search/book/' . $book->id . '?term=' . urlencode($page->name));
+ $pageTestResp->assertSee($page->name);
+
+ $chapterTestResp = $this->asEditor()->get('/search/book/' . $book->id . '?term=' . urlencode($chapter->name));
+ $chapterTestResp->assertSee($chapter->name);
+ }
+
+ public function test_chapter_search()
+ {
+ $chapter = Chapter::has('pages')->first();
+ $page = $chapter->pages[0];
+
+ $pageTestResp = $this->asEditor()->get('/search/chapter/' . $chapter->id . '?term=' . urlencode($page->name));
+ $pageTestResp->assertSee($page->name);
+ }
+
+ public function test_tag_search()
+ {
+ $newTags = [
+ new Tag([
+ 'name' => 'animal',
+ 'value' => 'cat'
+ ]),
+ new Tag([
+ 'name' => 'color',
+ 'value' => 'red'
+ ])
+ ];
+
+ $pageA = Page::first();
+ $pageA->tags()->saveMany($newTags);
+
+ $pageB = Page::all()->last();
+ $pageB->tags()->create(['name' => 'animal', 'value' => 'dog']);
+
+ $this->asEditor();
+ $tNameSearch = $this->get('/search?term=%5Banimal%5D');
+ $tNameSearch->assertSee($pageA->name)->assertSee($pageB->name);
+
+ $tNameSearch2 = $this->get('/search?term=%5Bcolor%5D');
+ $tNameSearch2->assertSee($pageA->name)->assertDontSee($pageB->name);
+
+ $tNameValSearch = $this->get('/search?term=%5Banimal%3Dcat%5D');
+ $tNameValSearch->assertSee($pageA->name)->assertDontSee($pageB->name);
+ }
+
+ public function test_exact_searches()
+ {
+ $page = $this->newPage(['name' => 'My new test page', 'html' => 'this is a story about an orange donkey']);
+
+ $exactSearchA = $this->asEditor()->get('/search?term=' . urlencode('"story about an orange"'));
+ $exactSearchA->assertStatus(200)->assertSee($page->name);
+
+ $exactSearchB = $this->asEditor()->get('/search?term=' . urlencode('"story not about an orange"'));
+ $exactSearchB->assertStatus(200)->assertDontSee($page->name);
+ }
+
+ public function test_search_filters()
+ {
+ $page = $this->newPage(['name' => 'My new test quaffleachits', 'html' => 'this is about an orange donkey danzorbhsing']);
+ $this->asEditor();
+ $editorId = $this->getEditor()->id;
+
+ // Viewed filter searches
+ $this->get('/search?term=' . urlencode('danzorbhsing {not_viewed_by_me}'))->assertSee($page->name);
+ $this->get('/search?term=' . urlencode('danzorbhsing {viewed_by_me}'))->assertDontSee($page->name);
+ $this->get($page->getUrl());
+ $this->get('/search?term=' . urlencode('danzorbhsing {not_viewed_by_me}'))->assertDontSee($page->name);
+ $this->get('/search?term=' . urlencode('danzorbhsing {viewed_by_me}'))->assertSee($page->name);
+
+ // User filters
+ $this->get('/search?term=' . urlencode('danzorbhsing {created_by:me}'))->assertDontSee($page->name);
+ $this->get('/search?term=' . urlencode('danzorbhsing {updated_by:me}'))->assertDontSee($page->name);
+ $this->get('/search?term=' . urlencode('danzorbhsing {updated_by:'.$editorId.'}'))->assertDontSee($page->name);
+ $page->created_by = $editorId;
+ $page->save();
+ $this->get('/search?term=' . urlencode('danzorbhsing {created_by:me}'))->assertSee($page->name);
+ $this->get('/search?term=' . urlencode('danzorbhsing {created_by:'.$editorId.'}'))->assertSee($page->name);
+ $this->get('/search?term=' . urlencode('danzorbhsing {updated_by:me}'))->assertDontSee($page->name);
+ $page->updated_by = $editorId;
+ $page->save();
+ $this->get('/search?term=' . urlencode('danzorbhsing {updated_by:me}'))->assertSee($page->name);
+ $this->get('/search?term=' . urlencode('danzorbhsing {updated_by:'.$editorId.'}'))->assertSee($page->name);
+
+ // Content filters
+ $this->get('/search?term=' . urlencode('{in_name:danzorbhsing}'))->assertDontSee($page->name);
+ $this->get('/search?term=' . urlencode('{in_body:danzorbhsing}'))->assertSee($page->name);
+ $this->get('/search?term=' . urlencode('{in_name:test quaffleachits}'))->assertSee($page->name);
+ $this->get('/search?term=' . urlencode('{in_body:test quaffleachits}'))->assertDontSee($page->name);
+
+ // Restricted filter
+ $this->get('/search?term=' . urlencode('danzorbhsing {is_restricted}'))->assertDontSee($page->name);
+ $page->restricted = true;
+ $page->save();
+ $this->get('/search?term=' . urlencode('danzorbhsing {is_restricted}'))->assertSee($page->name);
+
+ // Date filters
+ $this->get('/search?term=' . urlencode('danzorbhsing {updated_after:2037-01-01}'))->assertDontSee($page->name);
+ $this->get('/search?term=' . urlencode('danzorbhsing {updated_before:2037-01-01}'))->assertSee($page->name);
+ $page->updated_at = '2037-02-01';
+ $page->save();
+ $this->get('/search?term=' . urlencode('danzorbhsing {updated_after:2037-01-01}'))->assertSee($page->name);
+ $this->get('/search?term=' . urlencode('danzorbhsing {updated_before:2037-01-01}'))->assertDontSee($page->name);