56 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?php
 | 
						|
 | 
						|
namespace Tests\Settings;
 | 
						|
 | 
						|
use BookStack\Activity\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('updateForAll')
 | 
						|
            ->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->users->editor();
 | 
						|
        $resp = $this->actingAs($editor)->post('/settings/maintenance/regenerate-references');
 | 
						|
        $this->assertPermissionError($resp);
 | 
						|
 | 
						|
        $this->permissions->grantUserRolePermissions($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('updateForAll')
 | 
						|
            ->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');
 | 
						|
    }
 | 
						|
}
 |