| 
									
										
										
										
											2021-11-15 00:28:01 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Tests\Api; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use BookStack\Entities\Models\Book; | 
					
						
							|  |  |  | use BookStack\Entities\Models\Bookshelf; | 
					
						
							|  |  |  | use BookStack\Entities\Models\Chapter; | 
					
						
							|  |  |  | use BookStack\Entities\Models\Entity; | 
					
						
							|  |  |  | use BookStack\Entities\Models\Page; | 
					
						
							|  |  |  | use Tests\TestCase; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class SearchApiTest extends TestCase | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     use TestsApi; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     protected $baseEndpoint = '/api/search'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_all_endpoint_returns_search_filtered_results_with_query() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->actingAsApiEditor(); | 
					
						
							|  |  |  |         $uniqueTerm = 'MySuperUniqueTermForSearching'; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         /** @var Entity $entityClass */ | 
					
						
							|  |  |  |         foreach ([Page::class, Chapter::class, Book::class, Bookshelf::class] as $entityClass) { | 
					
						
							|  |  |  |             /** @var Entity $first */ | 
					
						
							|  |  |  |             $first = $entityClass::query()->first(); | 
					
						
							|  |  |  |             $first->update(['name' => $uniqueTerm]); | 
					
						
							|  |  |  |             $first->indexForSearch(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->getJson($this->baseEndpoint . '?query=' . $uniqueTerm . '&count=5&page=1'); | 
					
						
							|  |  |  |         $resp->assertJsonCount(4, 'data'); | 
					
						
							|  |  |  |         $resp->assertJsonFragment(['name' => $uniqueTerm, 'type' => 'book']); | 
					
						
							|  |  |  |         $resp->assertJsonFragment(['name' => $uniqueTerm, 'type' => 'chapter']); | 
					
						
							|  |  |  |         $resp->assertJsonFragment(['name' => $uniqueTerm, 'type' => 'page']); | 
					
						
							|  |  |  |         $resp->assertJsonFragment(['name' => $uniqueTerm, 'type' => 'bookshelf']); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-07 04:42:04 +08:00
										 |  |  |     public function test_all_endpoint_returns_entity_url() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-09-30 00:31:38 +08:00
										 |  |  |         $page = $this->entities->page(); | 
					
						
							| 
									
										
										
										
											2021-12-07 04:42:04 +08:00
										 |  |  |         $page->update(['name' => 'name with superuniquevalue within']); | 
					
						
							|  |  |  |         $page->indexForSearch(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->actingAsApiAdmin()->getJson($this->baseEndpoint . '?query=superuniquevalue'); | 
					
						
							|  |  |  |         $resp->assertJsonFragment([ | 
					
						
							|  |  |  |             'type' => 'page', | 
					
						
							| 
									
										
										
										
											2021-12-15 21:49:20 +08:00
										 |  |  |             'url'  => $page->getUrl(), | 
					
						
							| 
									
										
										
										
											2021-12-07 04:42:04 +08:00
										 |  |  |         ]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_all_endpoint_returns_items_with_preview_html() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2022-09-30 00:31:38 +08:00
										 |  |  |         $book = $this->entities->book(); | 
					
						
							| 
									
										
										
										
											2021-12-07 04:42:04 +08:00
										 |  |  |         $book->update(['name' => 'name with superuniquevalue within', 'description' => 'Description with superuniquevalue within']); | 
					
						
							|  |  |  |         $book->indexForSearch(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->actingAsApiAdmin()->getJson($this->baseEndpoint . '?query=superuniquevalue'); | 
					
						
							|  |  |  |         $resp->assertJsonFragment([ | 
					
						
							| 
									
										
										
										
											2021-12-15 21:49:20 +08:00
										 |  |  |             'type'         => 'book', | 
					
						
							|  |  |  |             'url'          => $book->getUrl(), | 
					
						
							| 
									
										
										
										
											2021-12-07 04:42:04 +08:00
										 |  |  |             'preview_html' => [ | 
					
						
							| 
									
										
										
										
											2021-12-15 21:49:20 +08:00
										 |  |  |                 'name'    => 'name with <strong>superuniquevalue</strong> within', | 
					
						
							| 
									
										
										
										
											2021-12-07 04:42:04 +08:00
										 |  |  |                 'content' => 'Description with <strong>superuniquevalue</strong> within', | 
					
						
							| 
									
										
										
										
											2021-12-15 21:49:20 +08:00
										 |  |  |             ], | 
					
						
							| 
									
										
										
										
											2021-12-07 04:42:04 +08:00
										 |  |  |         ]); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-11-15 00:28:01 +08:00
										 |  |  |     public function test_all_endpoint_requires_query_parameter() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $resp = $this->actingAsApiEditor()->get($this->baseEndpoint); | 
					
						
							|  |  |  |         $resp->assertStatus(422); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->actingAsApiEditor()->get($this->baseEndpoint . '?query=myqueryvalue'); | 
					
						
							|  |  |  |         $resp->assertOk(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |