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); | ||
|  |     } | ||
|  | } |