137 lines
4.1 KiB
PHP
137 lines
4.1 KiB
PHP
<?php declare(strict_types=1);
|
|
|
|
/**
|
|
* @license Apache 2.0
|
|
*/
|
|
|
|
namespace OpenApi\Tests\Annotations;
|
|
|
|
use OpenApi\Annotations\Info;
|
|
use OpenApi\Annotations\SecurityScheme;
|
|
use OpenApi\Annotations\Server;
|
|
use OpenApi\Tests\OpenApiTestCase;
|
|
|
|
/**
|
|
* Class SecuritySchemesTest.
|
|
*
|
|
* Security openapi test
|
|
*/
|
|
class SecuritySchemesTest extends OpenApiTestCase
|
|
{
|
|
/**
|
|
* Test parse servers.
|
|
*/
|
|
public function testParseServers()
|
|
{
|
|
$comment = <<<INFO
|
|
/**
|
|
* @OA\Info(
|
|
* title="Simple api",
|
|
* description="Simple api description",
|
|
* )
|
|
* @OA\Server(
|
|
* url="http://example.com",
|
|
* description="First host"
|
|
* )
|
|
* @OA\Server(
|
|
* url="http://example-second.com",
|
|
* description="Second host"
|
|
* )
|
|
*/
|
|
|
|
INFO;
|
|
$analysis = $this->analysisFromDockBlock($comment);
|
|
|
|
$this->assertCount(3, $analysis);
|
|
$this->assertInstanceOf(Info::class, $analysis[0]);
|
|
$this->assertInstanceOf(Server::class, $analysis[1]);
|
|
$this->assertInstanceOf(Server::class, $analysis[2]);
|
|
|
|
$this->assertEquals('http://example.com', $analysis[1]->url);
|
|
$this->assertEquals('First host', $analysis[1]->description);
|
|
|
|
$this->assertEquals('http://example-second.com', $analysis[2]->url);
|
|
$this->assertEquals('Second host', $analysis[2]->description);
|
|
}
|
|
|
|
/**
|
|
* Test parse security scheme.
|
|
*/
|
|
public function testImplicitFlowAnnotation()
|
|
{
|
|
$comment = <<<SCHEME
|
|
/**
|
|
* @OA\SecurityScheme(
|
|
* @OA\Flow(
|
|
* flow="implicit",
|
|
* tokenUrl="http://auth.test.com/token",
|
|
* refreshUrl="http://auth.test.com/refresh-token"
|
|
* ),
|
|
* securityScheme="oauth2",
|
|
* in="header",
|
|
* type="oauth2",
|
|
* description="Oauth2 security",
|
|
* name="oauth2",
|
|
* scheme="https",
|
|
* bearerFormat="bearer",
|
|
* openIdConnectUrl="http://test.com",
|
|
* )
|
|
*/
|
|
SCHEME;
|
|
|
|
$analysis = $this->analysisFromDockBlock($comment);
|
|
$this->assertCount(1, $analysis);
|
|
/** @var \OpenApi\Annotations\SecurityScheme $security */
|
|
$security = $analysis[0];
|
|
$this->assertInstanceOf(SecurityScheme::class, $security);
|
|
|
|
$this->assertCount(1, $security->flows);
|
|
$this->assertEquals('implicit', $security->flows[0]->flow);
|
|
$this->assertEquals('http://auth.test.com/token', $security->flows[0]->tokenUrl);
|
|
$this->assertEquals('http://auth.test.com/refresh-token', $security->flows[0]->refreshUrl);
|
|
}
|
|
|
|
public function testMultipleAnnotations()
|
|
{
|
|
$comment = <<<SCHEME
|
|
/**
|
|
* @OA\SecurityScheme(
|
|
* @OA\Flow(
|
|
* flow="implicit",
|
|
* tokenUrl="http://auth.test.com/token",
|
|
* refreshUrl="http://auth.test.com/refresh-token"
|
|
* ),
|
|
* @OA\Flow(
|
|
* flow="client_credentials",
|
|
* authorizationUrl="http://authClient.test.com",
|
|
* tokenUrl="http://authClient.test.com/token",
|
|
* refreshUrl="http://authClient.test.com/refresh-token"
|
|
* ),
|
|
* securityScheme="oauth2",
|
|
* in="header",
|
|
* type="oauth2",
|
|
* description="Oauth2 security",
|
|
* name="oauth2",
|
|
* scheme="https",
|
|
* bearerFormat="bearer",
|
|
* openIdConnectUrl="http://test.com",
|
|
* )
|
|
*/
|
|
SCHEME;
|
|
|
|
$analysis = $this->analysisFromDockBlock($comment);
|
|
$this->assertCount(1, $analysis);
|
|
/** @var \OpenApi\Annotations\SecurityScheme $security */
|
|
$security = $analysis[0];
|
|
|
|
$this->assertCount(2, $security->flows);
|
|
$this->assertEquals('implicit', $security->flows[0]->flow);
|
|
$this->assertEquals('http://auth.test.com/token', $security->flows[0]->tokenUrl);
|
|
$this->assertEquals('http://auth.test.com/refresh-token', $security->flows[0]->refreshUrl);
|
|
$this->assertEquals('client_credentials', $security->flows[1]->flow);
|
|
$this->assertEquals('http://authClient.test.com', $security->flows[1]->authorizationUrl);
|
|
$this->assertEquals('http://authClient.test.com/token', $security->flows[1]->tokenUrl);
|
|
$this->assertEquals('http://authClient.test.com/refresh-token', $security->flows[1]->refreshUrl);
|
|
}
|
|
}
|