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