3 class EntitySearchTest extends BrowserKitTest
6 public function test_page_search()
8 $book = \BookStack\Book::all()->first();
9 $page = $book->pages->first();
13 ->type($page->name, 'term')
14 ->press('header-search-box-button')
15 ->see('Search Results')
16 ->seeInElement('.entity-list', $page->name)
17 ->clickInElement('.entity-list', $page->name)
18 ->seePageIs($page->getUrl());
21 public function test_invalid_page_search()
25 ->type('<p>test</p>', 'term')
26 ->press('header-search-box-button')
27 ->see('Search Results')
31 public function test_empty_search_redirects_back()
35 ->visit('/search/all')
39 public function test_book_search()
41 $book = \BookStack\Book::all()->first();
42 $page = $book->pages->last();
43 $chapter = $book->chapters->last();
46 ->visit('/search/book/' . $book->id . '?term=' . urlencode($page->name))
49 ->visit('/search/book/' . $book->id . '?term=' . urlencode($chapter->name))
50 ->see($chapter->name);
53 public function test_empty_book_search_redirects_back()
55 $book = \BookStack\Book::all()->first();
58 ->visit('/search/book/' . $book->id . '?term=')
59 ->seePageIs('/books');
63 public function test_pages_search_listing()
65 $page = \BookStack\Page::all()->last();
66 $this->asAdmin()->visit('/search/pages?term=' . $page->name)
67 ->see('Page Search Results')->see('.entity-list', $page->name);
70 public function test_chapters_search_listing()
72 $chapter = \BookStack\Chapter::all()->last();
73 $this->asAdmin()->visit('/search/chapters?term=' . $chapter->name)
74 ->see('Chapter Search Results')->seeInElement('.entity-list', $chapter->name);
77 public function test_search_quote_term_preparation()
79 $termString = '"192" cat "dog hat"';
80 $repo = $this->app[\BookStack\Repos\EntityRepo::class];
81 $preparedTerms = $repo->prepareSearchTerms($termString);
82 $this->assertTrue($preparedTerms === ['"192"','"dog hat"', 'cat']);
85 public function test_books_search_listing()
87 $book = \BookStack\Book::all()->last();
88 $this->asAdmin()->visit('/search/books?term=' . $book->name)
89 ->see('Book Search Results')->see('.entity-list', $book->name);
92 public function test_searching_hypen_doesnt_break()
94 $this->visit('/search/all?term=cat+-')
98 public function test_tag_search()
111 $pageA = \BookStack\Page::first();
112 $pageA->tags()->saveMany($newTags);
114 $pageB = \BookStack\Page::all()->last();
115 $pageB->tags()->create(['name' => 'animal', 'value' => 'dog']);
117 $this->asAdmin()->visit('/search/all?term=%5Banimal%5D')
118 ->seeLink($pageA->name)
119 ->seeLink($pageB->name);
121 $this->visit('/search/all?term=%5Bcolor%5D')
122 ->seeLink($pageA->name)
123 ->dontSeeLink($pageB->name);
125 $this->visit('/search/all?term=%5Banimal%3Dcat%5D')
126 ->seeLink($pageA->name)
127 ->dontSeeLink($pageB->name);
131 public function test_ajax_entity_search()
133 $page = \BookStack\Page::all()->last();
134 $notVisitedPage = \BookStack\Page::first();
135 $this->visit($page->getUrl());
136 $this->asAdmin()->visit('/ajax/search/entities?term=' . $page->name)->see('.entity-list', $page->name);
137 $this->asAdmin()->visit('/ajax/search/entities?types=book&term=' . $page->name)->dontSee('.entity-list', $page->name);
138 $this->asAdmin()->visit('/ajax/search/entities')->see('.entity-list', $page->name)->dontSee($notVisitedPage->name);