| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | <?php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Tests; | 
					
						
							| 
									
										
										
										
											2017-12-28 21:19:02 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-09-25 20:48:23 +08:00
										 |  |  | use Illuminate\Foundation\Http\Middleware\ValidatePostSize; | 
					
						
							| 
									
										
										
										
											2020-05-23 18:26:48 +08:00
										 |  |  | use Illuminate\Support\Facades\Log; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-28 21:19:02 +08:00
										 |  |  | class ErrorTest extends TestCase | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     public function test_404_page_does_not_show_login() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // Due to middleware being handled differently this will not fail
 | 
					
						
							|  |  |  |         // if our custom, middleware-loaded handler fails but this is here
 | 
					
						
							|  |  |  |         // as a reminder and as a general check in the event of other issues.
 | 
					
						
							| 
									
										
										
										
											2023-01-21 19:08:34 +08:00
										 |  |  |         $editor = $this->users->editor(); | 
					
						
							| 
									
										
										
										
											2018-09-21 22:24:29 +08:00
										 |  |  |         $editor->name = 'tester'; | 
					
						
							|  |  |  |         $editor->save(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-12-28 21:19:02 +08:00
										 |  |  |         $this->actingAs($editor); | 
					
						
							|  |  |  |         $notFound = $this->get('/fgfdngldfnotfound'); | 
					
						
							|  |  |  |         $notFound->assertStatus(404); | 
					
						
							|  |  |  |         $notFound->assertDontSeeText('Log in'); | 
					
						
							| 
									
										
										
										
											2018-09-21 22:24:29 +08:00
										 |  |  |         $notFound->assertSeeText('tester'); | 
					
						
							| 
									
										
										
										
											2017-12-28 21:19:02 +08:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2020-05-23 18:26:48 +08:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-02-28 21:07:34 +08:00
										 |  |  |     public function test_404_page_does_not_non_visible_content() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $editor = $this->users->editor(); | 
					
						
							|  |  |  |         $book = $this->entities->book(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->actingAs($editor)->get($book->getUrl())->assertOk(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->permissions->disableEntityInheritedPermissions($book); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->actingAs($editor)->get($book->getUrl())->assertNotFound(); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function test_404_page_shows_visible_content_within_non_visible_parent() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $editor = $this->users->editor(); | 
					
						
							|  |  |  |         $book = $this->entities->book(); | 
					
						
							|  |  |  |         $page = $book->pages()->first(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->actingAs($editor)->get($page->getUrl())->assertOk(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->permissions->disableEntityInheritedPermissions($book); | 
					
						
							|  |  |  |         $this->permissions->addEntityPermission($page, ['view'], $editor->roles()->first()); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp = $this->actingAs($editor)->get($book->getUrl()); | 
					
						
							|  |  |  |         $resp->assertNotFound(); | 
					
						
							|  |  |  |         $resp->assertSee($page->name); | 
					
						
							|  |  |  |         $resp->assertDontSee($book->name); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-05-23 18:26:48 +08:00
										 |  |  |     public function test_item_not_found_does_not_get_logged_to_file() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2023-01-21 19:08:34 +08:00
										 |  |  |         $this->actingAs($this->users->viewer()); | 
					
						
							| 
									
										
										
										
											2020-05-23 18:26:48 +08:00
										 |  |  |         $handler = $this->withTestLogger(); | 
					
						
							| 
									
										
										
										
											2022-09-30 00:31:38 +08:00
										 |  |  |         $book = $this->entities->book(); | 
					
						
							| 
									
										
										
										
											2020-05-23 18:26:48 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // Ensure we're seeing errors
 | 
					
						
							|  |  |  |         Log::error('cat'); | 
					
						
							|  |  |  |         $this->assertTrue($handler->hasErrorThatContains('cat')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->get('/books/arandomnotfouindbook'); | 
					
						
							|  |  |  |         $this->get($book->getUrl('/chapter/arandomnotfouindchapter')); | 
					
						
							|  |  |  |         $this->get($book->getUrl('/chapter/arandomnotfouindpages')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->assertCount(1, $handler->getRecords()); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function test_access_to_non_existing_image_location_provides_404_response() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2023-01-21 19:08:34 +08:00
										 |  |  |         $resp = $this->actingAs($this->users->viewer())->get('/uploads/images/gallery/2021-05/anonexistingimage.png'); | 
					
						
							| 
									
										
										
										
											2021-05-09 01:49:58 +08:00
										 |  |  |         $resp->assertStatus(404); | 
					
						
							|  |  |  |         $resp->assertSeeText('Image Not Found'); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2023-09-25 20:48:23 +08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function test_posts_above_php_limit_shows_friendly_error() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // Fake super large JSON request
 | 
					
						
							|  |  |  |         $resp = $this->asEditor()->call('GET', '/books', [], [], [], [ | 
					
						
							|  |  |  |             'CONTENT_LENGTH' => '10000000000', | 
					
						
							|  |  |  |             'HTTP_ACCEPT' => 'application/json', | 
					
						
							|  |  |  |         ]); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $resp->assertStatus(413); | 
					
						
							|  |  |  |         $resp->assertJson(['error' => 'The server cannot receive the provided amount of data. Try again with less data or a smaller file.']); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2021-06-26 23:23:15 +08:00
										 |  |  | } |