135 lines
4.4 KiB
PHP
135 lines
4.4 KiB
PHP
|
<?php
|
||
|
|
||
|
class ReaderTest extends \PHPUnit\Framework\TestCase
|
||
|
{
|
||
|
public function testReadJson()
|
||
|
{
|
||
|
$openapi = \cebe\openapi\Reader::readFromJson(<<<JSON
|
||
|
{
|
||
|
"openapi": "3.0.0",
|
||
|
"info": {
|
||
|
"title": "Test API",
|
||
|
"version": "1.0.0"
|
||
|
},
|
||
|
"paths": {
|
||
|
|
||
|
}
|
||
|
}
|
||
|
JSON
|
||
|
);
|
||
|
|
||
|
$this->assertApiContent($openapi);
|
||
|
}
|
||
|
|
||
|
public function testReadYaml()
|
||
|
{
|
||
|
$openapi = \cebe\openapi\Reader::readFromYaml(<<<YAML
|
||
|
openapi: 3.0.0
|
||
|
info:
|
||
|
title: "Test API"
|
||
|
version: "1.0.0"
|
||
|
paths:
|
||
|
/somepath:
|
||
|
YAML
|
||
|
);
|
||
|
|
||
|
$this->assertApiContent($openapi);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Test if reading YAML file with anchors works
|
||
|
*/
|
||
|
public function testReadYamlWithAnchors()
|
||
|
{
|
||
|
$openApiFile = __DIR__ . '/spec/data/traits-mixins.yaml';
|
||
|
$openapi = \cebe\openapi\Reader::readFromYamlFile($openApiFile);
|
||
|
|
||
|
$this->assertApiContent($openapi);
|
||
|
|
||
|
$putOperation = $openapi->paths['/foo']->put;
|
||
|
$this->assertEquals('create foo', $putOperation->description);
|
||
|
$this->assertTrue($putOperation->responses->hasResponse('200'));
|
||
|
$this->assertTrue($putOperation->responses->hasResponse('404'));
|
||
|
$this->assertTrue($putOperation->responses->hasResponse('428'));
|
||
|
$this->assertTrue($putOperation->responses->hasResponse('default'));
|
||
|
|
||
|
$respOk = $putOperation->responses->getResponse('200');
|
||
|
$this->assertEquals('request succeeded', $respOk->description);
|
||
|
$this->assertEquals('the request id', $respOk->headers['X-Request-Id']->description);
|
||
|
|
||
|
$resp404 = $putOperation->responses->getResponse('404');
|
||
|
$this->assertEquals('resource not found', $resp404->description);
|
||
|
$this->assertEquals('the request id', $resp404->headers['X-Request-Id']->description);
|
||
|
|
||
|
$resp428 = $putOperation->responses->getResponse('428');
|
||
|
$this->assertEquals('resource not found', $resp428->description);
|
||
|
$this->assertEquals('the request id', $resp428->headers['X-Request-Id']->description);
|
||
|
|
||
|
$respDefault = $putOperation->responses->getResponse('default');
|
||
|
$this->assertEquals('resource not found', $respDefault->description);
|
||
|
$this->assertEquals('the request id', $respDefault->headers['X-Request-Id']->description);
|
||
|
|
||
|
$foo = $openapi->components->schemas['Foo'];
|
||
|
$this->assertArrayHasKey('uuid', $foo->properties);
|
||
|
$this->assertArrayHasKey('name', $foo->properties);
|
||
|
$this->assertArrayHasKey('id', $foo->properties);
|
||
|
$this->assertArrayHasKey('description', $foo->properties);
|
||
|
$this->assertEquals('uuid of the resource', $foo->properties['uuid']->description);
|
||
|
}
|
||
|
|
||
|
private function assertApiContent(\cebe\openapi\spec\OpenApi $openapi)
|
||
|
{
|
||
|
$result = $openapi->validate();
|
||
|
$this->assertEquals([], $openapi->getErrors());
|
||
|
$this->assertTrue($result);
|
||
|
|
||
|
|
||
|
$this->assertEquals("3.0.0", $openapi->openapi);
|
||
|
$this->assertEquals("Test API", $openapi->info->title);
|
||
|
$this->assertEquals("1.0.0", $openapi->info->version);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @see https://github.com/symfony/symfony/issues/34805
|
||
|
*/
|
||
|
public function testSymfonyYamlBugHunt()
|
||
|
{
|
||
|
$openApiFile = __DIR__ . '/../vendor/oai/openapi-specification/examples/v3.0/uspto.yaml';
|
||
|
$openapi = \cebe\openapi\Reader::readFromYamlFile($openApiFile);
|
||
|
|
||
|
$inlineYamlExample = $openapi->paths['/']->get->responses['200']->content['application/json']->example;
|
||
|
|
||
|
if (method_exists($this, 'assertIsArray')) {
|
||
|
$this->assertIsArray($inlineYamlExample);
|
||
|
} else {
|
||
|
$this->assertInternalType('array', $inlineYamlExample);
|
||
|
}
|
||
|
|
||
|
$expectedArray = json_decode(<<<JSON
|
||
|
{
|
||
|
"total": 2,
|
||
|
"apis": [
|
||
|
{
|
||
|
"apiKey": "oa_citations",
|
||
|
"apiVersionNumber": "v1",
|
||
|
"apiUrl": "https://developer.uspto.gov/ds-api/oa_citations/v1/fields",
|
||
|
"apiDocumentationUrl": "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/oa_citations.json"
|
||
|
},
|
||
|
{
|
||
|
"apiKey": "cancer_moonshot",
|
||
|
"apiVersionNumber": "v1",
|
||
|
"apiUrl": "https://developer.uspto.gov/ds-api/cancer_moonshot/v1/fields",
|
||
|
"apiDocumentationUrl": "https://developer.uspto.gov/ds-api-docs/index.html?url=https://developer.uspto.gov/ds-api/swagger/docs/cancer_moonshot.json"
|
||
|
}
|
||
|
]
|
||
|
}
|
||
|
JSON
|
||
|
, true);
|
||
|
$this->assertEquals($expectedArray, $inlineYamlExample);
|
||
|
}
|
||
|
|
||
|
|
||
|
// TODO test invalid JSON
|
||
|
// TODO test invalid YAML
|
||
|
}
|