X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/6f1bdbf771b00be12db676e6289830d8cdc7ecda..refs/pull/5721/head:/tests/Api/SearchApiTest.php diff --git a/tests/Api/SearchApiTest.php b/tests/Api/SearchApiTest.php index 55ca0e009..9da7900ca 100644 --- a/tests/Api/SearchApiTest.php +++ b/tests/Api/SearchApiTest.php @@ -13,7 +13,7 @@ class SearchApiTest extends TestCase { use TestsApi; - protected $baseEndpoint = '/api/search'; + protected string $baseEndpoint = '/api/search'; public function test_all_endpoint_returns_search_filtered_results_with_query() { @@ -36,6 +36,36 @@ class SearchApiTest extends TestCase $resp->assertJsonFragment(['name' => $uniqueTerm, 'type' => 'bookshelf']); } + public function test_all_endpoint_returns_entity_url() + { + $page = $this->entities->page(); + $page->update(['name' => 'name with superuniquevalue within']); + $page->indexForSearch(); + + $resp = $this->actingAsApiAdmin()->getJson($this->baseEndpoint . '?query=superuniquevalue'); + $resp->assertJsonFragment([ + 'type' => 'page', + 'url' => $page->getUrl(), + ]); + } + + public function test_all_endpoint_returns_items_with_preview_html() + { + $book = $this->entities->book(); + $book->forceFill(['name' => 'name with superuniquevalue within', 'description' => 'Description with superuniquevalue within'])->save(); + $book->indexForSearch(); + + $resp = $this->actingAsApiAdmin()->getJson($this->baseEndpoint . '?query=superuniquevalue'); + $resp->assertJsonFragment([ + 'type' => 'book', + 'url' => $book->getUrl(), + 'preview_html' => [ + 'name' => 'name with superuniquevalue within', + 'content' => 'Description with superuniquevalue within', + ], + ]); + } + public function test_all_endpoint_requires_query_parameter() { $resp = $this->actingAsApiEditor()->get($this->baseEndpoint); @@ -44,4 +74,46 @@ class SearchApiTest extends TestCase $resp = $this->actingAsApiEditor()->get($this->baseEndpoint . '?query=myqueryvalue'); $resp->assertOk(); } + + public function test_all_endpoint_includes_parent_details_where_visible() + { + $page = $this->entities->pageWithinChapter(); + $chapter = $page->chapter; + $book = $page->book; + + $page->update(['name' => 'name with superextrauniquevalue within']); + $page->indexForSearch(); + + $editor = $this->users->editor(); + $this->actingAsApiEditor(); + $resp = $this->getJson($this->baseEndpoint . '?query=superextrauniquevalue'); + $resp->assertJsonFragment([ + 'id' => $page->id, + 'type' => 'page', + 'book' => [ + 'id' => $book->id, + 'name' => $book->name, + 'slug' => $book->slug, + ], + 'chapter' => [ + 'id' => $chapter->id, + 'name' => $chapter->name, + 'slug' => $chapter->slug, + ], + ]); + + $this->permissions->disableEntityInheritedPermissions($chapter); + $this->permissions->setEntityPermissions($page, ['view'], [$editor->roles()->first()]); + + $resp = $this->getJson($this->baseEndpoint . '?query=superextrauniquevalue'); + $resp->assertJsonPath('data.0.id', $page->id); + $resp->assertJsonPath('data.0.book.name', $book->name); + $resp->assertJsonMissingPath('data.0.chapter'); + + $this->permissions->disableEntityInheritedPermissions($book); + + $resp = $this->getJson($this->baseEndpoint . '?query=superextrauniquevalue'); + $resp->assertJsonPath('data.0.id', $page->id); + $resp->assertJsonMissingPath('data.0.book.name'); + } }