61 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			PHP
		
	
	
	
<?php
 | 
						|
 | 
						|
namespace Tests\Api;
 | 
						|
 | 
						|
use BookStack\Auth\User;
 | 
						|
use Tests\TestCase;
 | 
						|
 | 
						|
class ApiDocsTest extends TestCase
 | 
						|
{
 | 
						|
    use TestsApi;
 | 
						|
 | 
						|
    protected $endpoint = '/api/docs';
 | 
						|
 | 
						|
    public function test_docs_page_not_visible_to_normal_viewers()
 | 
						|
    {
 | 
						|
        $viewer = $this->getViewer();
 | 
						|
        $resp = $this->actingAs($viewer)->get($this->endpoint);
 | 
						|
        $resp->assertStatus(403);
 | 
						|
 | 
						|
        $resp = $this->actingAsApiEditor()->get($this->endpoint);
 | 
						|
        $resp->assertStatus(200);
 | 
						|
    }
 | 
						|
 | 
						|
    public function test_docs_page_returns_view_with_docs_content()
 | 
						|
    {
 | 
						|
        $resp = $this->actingAsApiEditor()->get($this->endpoint);
 | 
						|
        $resp->assertStatus(200);
 | 
						|
        $resp->assertSee(url('/api/docs.json'));
 | 
						|
        $resp->assertSee('Show a JSON view of the API docs data.');
 | 
						|
        $resp->assertHeader('Content-Type', 'text/html; charset=UTF-8');
 | 
						|
    }
 | 
						|
 | 
						|
    public function test_docs_json_endpoint_returns_json()
 | 
						|
    {
 | 
						|
        $resp = $this->actingAsApiEditor()->get($this->endpoint . '.json');
 | 
						|
        $resp->assertStatus(200);
 | 
						|
        $resp->assertHeader('Content-Type', 'application/json');
 | 
						|
        $resp->assertJson([
 | 
						|
            'docs' => [[
 | 
						|
                'name' => 'docs-display',
 | 
						|
                'uri'  => 'api/docs',
 | 
						|
            ]],
 | 
						|
        ]);
 | 
						|
    }
 | 
						|
 | 
						|
    public function test_docs_page_visible_by_public_user_if_given_permission()
 | 
						|
    {
 | 
						|
        $this->setSettings(['app-public' => true]);
 | 
						|
        $guest = User::getDefault();
 | 
						|
 | 
						|
        $this->startSession();
 | 
						|
        $resp = $this->get('/api/docs');
 | 
						|
        $resp->assertStatus(403);
 | 
						|
 | 
						|
        $this->giveUserPermissions($guest, ['access-api']);
 | 
						|
 | 
						|
        $resp = $this->get('/api/docs');
 | 
						|
        $resp->assertStatus(200);
 | 
						|
    }
 | 
						|
}
 |