56 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			56 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
|  | <?php | ||
|  | 
 | ||
|  | namespace Tests\Settings; | ||
|  | 
 | ||
|  | use BookStack\Actions\ActivityType; | ||
|  | use BookStack\References\ReferenceStore; | ||
|  | use Tests\TestCase; | ||
|  | 
 | ||
|  | class RegenerateReferencesTest extends TestCase | ||
|  | { | ||
|  |     public function test_option_visible_on_maintenance_page() | ||
|  |     { | ||
|  |         $pageView = $this->asAdmin()->get('/settings/maintenance'); | ||
|  |         $formCssSelector = 'form[action$="/settings/maintenance/regenerate-references"]'; | ||
|  |         $html = $this->withHtml($pageView); | ||
|  |         $html->assertElementExists('#regenerate-references'); | ||
|  |         $html->assertElementExists($formCssSelector); | ||
|  |         $html->assertElementContains($formCssSelector . ' button', 'Regenerate References'); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function test_action_runs_reference_regen() | ||
|  |     { | ||
|  |         $this->mock(ReferenceStore::class) | ||
|  |             ->shouldReceive('updateForAllPages') | ||
|  |             ->once(); | ||
|  | 
 | ||
|  |         $resp = $this->asAdmin()->post('/settings/maintenance/regenerate-references'); | ||
|  |         $resp->assertRedirect('/settings/maintenance#regenerate-references'); | ||
|  |         $this->assertSessionHas('success', 'Reference index has been regenerated!'); | ||
|  |         $this->assertActivityExists(ActivityType::MAINTENANCE_ACTION_RUN, null, 'regenerate-references'); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function test_settings_manage_permission_required() | ||
|  |     { | ||
|  |         $editor = $this->getEditor(); | ||
|  |         $resp = $this->actingAs($editor)->post('/settings/maintenance/regenerate-references'); | ||
|  |         $this->assertPermissionError($resp); | ||
|  | 
 | ||
|  |         $this->giveUserPermissions($editor, ['settings-manage']); | ||
|  | 
 | ||
|  |         $resp = $this->actingAs($editor)->post('/settings/maintenance/regenerate-references'); | ||
|  |         $this->assertNotPermissionError($resp); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function test_action_failed_shown_as_error_notification() | ||
|  |     { | ||
|  |         $this->mock(ReferenceStore::class) | ||
|  |             ->shouldReceive('updateForAllPages') | ||
|  |             ->andThrow(\Exception::class, 'A badger stopped the task'); | ||
|  | 
 | ||
|  |         $resp = $this->asAdmin()->post('/settings/maintenance/regenerate-references'); | ||
|  |         $resp->assertRedirect('/settings/maintenance#regenerate-references'); | ||
|  |         $this->assertSessionError('A badger stopped the task'); | ||
|  |     } | ||
|  | } |