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