105 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
		
		
			
		
	
	
			105 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			PHP
		
	
	
|  | <?php declare(strict_types=1); | ||
|  | 
 | ||
|  | /** | ||
|  |  * @license Apache 2.0 | ||
|  |  */ | ||
|  | 
 | ||
|  | namespace OpenApi\Tests\Processors; | ||
|  | 
 | ||
|  | use OpenApi\Analysis; | ||
|  | use OpenApi\Annotations\Parameter; | ||
|  | use OpenApi\Annotations\Response; | ||
|  | use OpenApi\Context; | ||
|  | use OpenApi\Generator; | ||
|  | use OpenApi\Processors\MergeXmlContent; | ||
|  | use OpenApi\Tests\OpenApiTestCase; | ||
|  | 
 | ||
|  | class MergeXmlContentTest extends OpenApiTestCase | ||
|  | { | ||
|  |     public function testXmlContent() | ||
|  |     { | ||
|  |         $comment = <<<END | ||
|  |             @OA\Response(response=200, | ||
|  |                 @OA\XmlContent(type="array", | ||
|  |                     @OA\Items(ref="#/components/schemas/repository") | ||
|  |                 ) | ||
|  |             ) | ||
|  | END; | ||
|  |         $analysis = new Analysis($this->parseComment($comment), new Context()); | ||
|  |         $this->assertCount(3, $analysis->annotations); | ||
|  |         $response = $analysis->getAnnotationsOfType(Response::class)[0]; | ||
|  |         $this->assertSame(Generator::UNDEFINED, $response->content); | ||
|  |         $this->assertCount(1, $response->_unmerged); | ||
|  |         $analysis->process(new MergeXmlContent()); | ||
|  |         $this->assertCount(1, $response->content); | ||
|  |         $this->assertCount(0, $response->_unmerged); | ||
|  |         $json = json_decode(json_encode($response), true); | ||
|  |         $this->assertSame('#/components/schemas/repository', $json['content']['application/xml']['schema']['items']['$ref']); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testMultipleMediaTypes() | ||
|  |     { | ||
|  |         $comment = <<<END | ||
|  |             @OA\Response(response=200, | ||
|  |                 @OA\MediaType(mediaType="image/png"), | ||
|  |                 @OA\XmlContent(type="array", | ||
|  |                     @OA\Items(ref="#/components/schemas/repository") | ||
|  |                 ) | ||
|  |             ) | ||
|  | END; | ||
|  |         $analysis = new Analysis($this->parseComment($comment), new Context()); | ||
|  |         $response = $analysis->getAnnotationsOfType(Response::class)[0]; | ||
|  |         $this->assertCount(1, $response->content); | ||
|  |         $analysis->process(new MergeXmlContent()); | ||
|  |         $this->assertCount(2, $response->content); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testParameter() | ||
|  |     { | ||
|  |         $comment = <<<END | ||
|  |             @OA\Parameter(name="filter",in="query", @OA\XmlContent( | ||
|  |                 @OA\Property(property="type", type="string"), | ||
|  |                 @OA\Property(property="color", type="string") | ||
|  |             )) | ||
|  | END; | ||
|  |         $analysis = new Analysis($this->parseComment($comment), new Context()); | ||
|  |         $this->assertCount(4, $analysis->annotations); | ||
|  |         $parameter = $analysis->getAnnotationsOfType(Parameter::class)[0]; | ||
|  |         $this->assertSame(Generator::UNDEFINED, $parameter->content); | ||
|  |         $this->assertCount(1, $parameter->_unmerged); | ||
|  |         $analysis->process(new MergeXmlContent()); | ||
|  |         $this->assertCount(1, $parameter->content); | ||
|  |         $this->assertCount(0, $parameter->_unmerged); | ||
|  |         $json = json_decode(json_encode($parameter), true); | ||
|  |         $this->assertSame('query', $json['in']); | ||
|  |         $this->assertSame('application/xml', array_keys($json['content'])[0]); | ||
|  |         $this->assertArrayNotHasKey('mediaType', $json['content']['application/xml']); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testNoParent() | ||
|  |     { | ||
|  |         $this->assertOpenApiLogEntryContains('Unexpected @OA\XmlContent() must be nested'); | ||
|  |         $comment = <<<END | ||
|  |             @OA\XmlContent(type="array", | ||
|  |                 @OA\Items(ref="#/components/schemas/repository") | ||
|  |             ) | ||
|  | END; | ||
|  |         $analysis = new Analysis($this->parseComment($comment), new Context()); | ||
|  |         $analysis->process(new MergeXmlContent()); | ||
|  |     } | ||
|  | 
 | ||
|  |     public function testInvalidParent() | ||
|  |     { | ||
|  |         $this->assertOpenApiLogEntryContains('Unexpected @OA\XmlContent() in @OA\Property() in'); | ||
|  |         $comment = <<<END | ||
|  |             @OA\Property( | ||
|  |                 @OA\XmlContent(type="array", | ||
|  |                     @OA\Items(ref="#/components/schemas/repository") | ||
|  |                 ) | ||
|  |             ) | ||
|  | END; | ||
|  |         $analysis = new Analysis($this->parseComment($comment), new Context()); | ||
|  |         $analysis->process(new MergeXmlContent()); | ||
|  |     } | ||
|  | } |