OXIESEC PANEL
- Current Dir:
/
/
var
/
www
/
reader
/
API
/
vendor
/
zircote
/
swagger-php
/
tests
/
Annotations
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
08/07/2024 04:34:33 AM
rwxr-xr-x
📄
AbstractAnnotationTest.php
5.79 KB
08/07/2024 04:34:31 AM
rw-r--r--
📄
AnnotationPropertiesDefinedTest.php
822 bytes
08/07/2024 04:34:31 AM
rw-r--r--
📄
AttachableTest.php
1.48 KB
08/07/2024 04:34:31 AM
rw-r--r--
📄
AttributesSyncTest.php
7.67 KB
08/07/2024 04:34:31 AM
rw-r--r--
📄
ComponentsTest.php
663 bytes
08/07/2024 04:34:31 AM
rw-r--r--
📄
ItemsTest.php
1.84 KB
08/07/2024 04:34:31 AM
rw-r--r--
📄
LicenseTest.php
838 bytes
08/07/2024 04:34:31 AM
rw-r--r--
📄
NestedPropertyTest.php
1.73 KB
08/07/2024 04:34:31 AM
rw-r--r--
📄
OpenApiTest.php
1.23 KB
08/07/2024 04:34:31 AM
rw-r--r--
📄
OperationTest.php
1.77 KB
08/07/2024 04:34:31 AM
rw-r--r--
📄
ResponseTest.php
1.08 KB
08/07/2024 04:34:31 AM
rw-r--r--
📄
SecuritySchemesTest.php
4.05 KB
08/07/2024 04:34:31 AM
rw-r--r--
📄
ValidateRelationsTest.php
1.66 KB
08/07/2024 04:34:31 AM
rw-r--r--
Editing: AbstractAnnotationTest.php
Close
<?php declare(strict_types=1); /** * @license Apache 2.0 */ namespace OpenApi\Tests\Annotations; use OpenApi\Annotations as OA; use OpenApi\Generator; use OpenApi\Tests\OpenApiTestCase; class AbstractAnnotationTest extends OpenApiTestCase { public function testVendorFields(): void { $annotations = $this->annotationsFromDocBlockParser('@OA\Get(x={"internal-id": 123})'); $output = $annotations[0]->jsonSerialize(); $prefixedProperty = 'x-internal-id'; $this->assertSame(123, $output->$prefixedProperty); } /** * @requires PHP < 8.2 */ public function testInvalidField(): void { $this->assertOpenApiLogEntryContains('Ignoring unexpected property "doesnot" for @OA\Get(), expecting'); $this->annotationsFromDocBlockParser('@OA\Get(doesnot="exist")'); } public function testUmergedAnnotation(): void { $openapi = $this->createOpenApiWithInfo(); $openapi->merge($this->annotationsFromDocBlockParser('@OA\Items()')); $this->assertOpenApiLogEntryContains('Unexpected @OA\Items(), expected to be inside @OA\\'); $openapi->validate(); } public function testConflictedNesting(): void { $comment = <<<END @OA\Info( title="Info only has one contact field..", version="test", @OA\Contact(name="first"), @OA\Contact(name="second") ) END; $annotations = $this->annotationsFromDocBlockParser($comment); $this->assertOpenApiLogEntryContains('Only one @OA\Contact() allowed for @OA\Info() multiple found in:'); $annotations[0]->validate(); } public function testKey(): void { $comment = <<<END @OA\Response( @OA\Header(header="X-CSRF-Token",description="Token to prevent Cross Site Request Forgery") ) END; $annotations = $this->annotationsFromDocBlockParser($comment); $this->assertEquals('{"headers":{"X-CSRF-Token":{"description":"Token to prevent Cross Site Request Forgery"}}}', json_encode($annotations[0])); } public function testConflictingKey(): void { $comment = <<<END @OA\Response( description="The headers in response must have unique header values", @OA\Header(header="X-CSRF-Token", @OA\Schema(type="string"), description="first"), @OA\Header(header="X-CSRF-Token", @OA\Schema(type="string"), description="second") ) END; $annotations = $this->annotationsFromDocBlockParser($comment); $this->assertOpenApiLogEntryContains('Multiple @OA\Header() with the same header="X-CSRF-Token":'); $annotations[0]->validate(); } public function testRequiredFields(): void { $annotations = $this->annotationsFromDocBlockParser('@OA\Info()'); $info = $annotations[0]; $this->assertOpenApiLogEntryContains('Missing required field "title" for @OA\Info() in '); $this->assertOpenApiLogEntryContains('Missing required field "version" for @OA\Info() in '); $info->validate(); } public function testTypeValidation(): void { $comment = <<<END @OA\Parameter( name=123, in="dunno", required="maybe", @OA\Schema( type="strig", ) ) END; $annotations = $this->annotationsFromDocBlockParser($comment); $parameter = $annotations[0]; $this->assertOpenApiLogEntryContains('@OA\Parameter(name=123,in="dunno")->name is a "integer", expecting a "string" in '); $this->assertOpenApiLogEntryContains('@OA\Parameter(name=123,in="dunno")->in "dunno" is invalid, expecting "query", "header", "path", "cookie" in '); $this->assertOpenApiLogEntryContains('@OA\Parameter(name=123,in="dunno")->required is a "string", expecting a "boolean" in '); $parameter->validate(); } public static function nestedMatches(): iterable { $parameterMatch = (object) ['key' => OA\Parameter::class, 'value' => ['parameters']]; return [ 'simple-match' => [OA\Parameter::class, $parameterMatch], 'invalid-annotation' => [OA\Schema::class, null], 'sub-annotation' => [SubParameter::class, $parameterMatch], 'sub-sub-annotation' => [SubSubParameter::class, $parameterMatch], 'sub-invalid' => [SubSchema::class, null], ]; } /** * @dataProvider nestedMatches */ public function testMatchNested(string $class, $expected): void { $this->assertEquals($expected, (new OA\Get([]))->matchNested(new $class([]))); } public function testDuplicateOperationIdValidation(): void { $analysis = $this->analysisFromFixtures(['DuplicateOperationId.php']); (new Generator())->getProcessorPipeline()->process($analysis); $this->assertOpenApiLogEntryContains('operationId must be unique. Duplicate value found: "getItem"'); $this->assertFalse($analysis->validate()); } public function testIsRoot(): void { $this->assertTrue((new OA\AdditionalProperties([]))->isRoot(OA\AdditionalProperties::class)); $this->assertFalse((new OA\AdditionalProperties([]))->isRoot(OA\Schema::class)); $this->assertTrue((new SubSchema([]))->isRoot(OA\Schema::class)); } /** * @requires PHP 8.1 */ public function testValidateExamples(): void { $this->skipLegacy(); $analysis = $this->analysisFromFixtures(['BadExampleParameter.php']); (new Generator())->getProcessorPipeline()->process($analysis); $this->assertOpenApiLogEntryContains('Required @OA\PathItem() not found'); $this->assertOpenApiLogEntryContains('Required @OA\Info() not found'); $this->assertOpenApiLogEntryContains('"example" and "examples" are mutually exclusive'); $analysis->validate(); } } class SubSchema extends OA\Schema { } class SubParameter extends OA\Parameter { } class SubSubParameter extends SubParameter { }