]> BookStack Code Mirror - bookstack/blob - tests/Api/SearchApiTest.php
Added test for logical-theme-system command registration
[bookstack] / tests / Api / SearchApiTest.php
1 <?php
2
3 namespace Tests\Api;
4
5 use BookStack\Entities\Models\Book;
6 use BookStack\Entities\Models\Bookshelf;
7 use BookStack\Entities\Models\Chapter;
8 use BookStack\Entities\Models\Entity;
9 use BookStack\Entities\Models\Page;
10 use Tests\TestCase;
11
12 class SearchApiTest extends TestCase
13 {
14     use TestsApi;
15
16     protected $baseEndpoint = '/api/search';
17
18     public function test_all_endpoint_returns_search_filtered_results_with_query()
19     {
20         $this->actingAsApiEditor();
21         $uniqueTerm = 'MySuperUniqueTermForSearching';
22
23         /** @var Entity $entityClass */
24         foreach ([Page::class, Chapter::class, Book::class, Bookshelf::class] as $entityClass) {
25             /** @var Entity $first */
26             $first = $entityClass::query()->first();
27             $first->update(['name' => $uniqueTerm]);
28             $first->indexForSearch();
29         }
30
31         $resp = $this->getJson($this->baseEndpoint . '?query=' . $uniqueTerm . '&count=5&page=1');
32         $resp->assertJsonCount(4, 'data');
33         $resp->assertJsonFragment(['name' => $uniqueTerm, 'type' => 'book']);
34         $resp->assertJsonFragment(['name' => $uniqueTerm, 'type' => 'chapter']);
35         $resp->assertJsonFragment(['name' => $uniqueTerm, 'type' => 'page']);
36         $resp->assertJsonFragment(['name' => $uniqueTerm, 'type' => 'bookshelf']);
37     }
38
39     public function test_all_endpoint_requires_query_parameter()
40     {
41         $resp = $this->actingAsApiEditor()->get($this->baseEndpoint);
42         $resp->assertStatus(422);
43
44         $resp = $this->actingAsApiEditor()->get($this->baseEndpoint . '?query=myqueryvalue');
45         $resp->assertOk();
46     }
47 }