From 217f2b16282ae3d04f2278cc96e383c5375495e2 Mon Sep 17 00:00:00 2001 From: aurimasrim Date: Fri, 15 Mar 2024 16:00:01 +0200 Subject: [PATCH] feat(metadata): allow \Stringable for security parameters --- src/Metadata/ApiProperty.php | 42 +++---- src/Metadata/ApiResource.php | 6 +- src/Metadata/Delete.php | 6 +- src/Metadata/Error.php | 6 +- src/Metadata/ErrorResource.php | 6 +- src/Metadata/Get.php | 6 +- src/Metadata/GetCollection.php | 6 +- src/Metadata/GraphQl/Operation.php | 6 +- src/Metadata/GraphQl/Query.php | 6 +- src/Metadata/GraphQl/QueryCollection.php | 6 +- src/Metadata/GraphQl/Subscription.php | 6 +- src/Metadata/HttpOperation.php | 6 +- src/Metadata/Metadata.php | 32 ++--- src/Metadata/NotExposed.php | 6 +- src/Metadata/Operation.php | 6 +- src/Metadata/Patch.php | 6 +- src/Metadata/Post.php | 6 +- src/Metadata/Put.php | 6 +- .../StringableSecurityParameterTest.php | 116 ++++++++++++++++++ 19 files changed, 201 insertions(+), 85 deletions(-) create mode 100644 src/Metadata/Tests/Resource/StringableSecurityParameterTest.php diff --git a/src/Metadata/ApiProperty.php b/src/Metadata/ApiProperty.php index 5ad59705401..f0a5d6aebd5 100644 --- a/src/Metadata/ApiProperty.php +++ b/src/Metadata/ApiProperty.php @@ -24,23 +24,23 @@ final class ApiProperty { /** - * @param bool|null $readableLink https://api-platform.com/docs/core/serialization/#force-iri-with-relations-of-the-same-type-parentchilds-relations - * @param bool|null $writableLink https://api-platform.com/docs/core/serialization/#force-iri-with-relations-of-the-same-type-parentchilds-relations - * @param bool|null $required https://api-platform.com/docs/admin/validation/#client-side-validation - * @param bool|null $identifier https://api-platform.com/docs/core/identifiers/ - * @param string|null $default - * @param mixed $example https://api-platform.com/docs/core/openapi/#using-the-openapi-and-swagger-contexts - * @param string|null $deprecationReason https://api-platform.com/docs/core/deprecations/#deprecating-resource-classes-operations-and-properties - * @param bool|null $fetchEager https://api-platform.com/docs/core/performance/#eager-loading - * @param array|null $jsonldContext https://api-platform.com/docs/core/extending-jsonld-context/#extending-json-ld-and-hydra-contexts - * @param array|null $openapiContext https://api-platform.com/docs/core/openapi/#using-the-openapi-and-swagger-contexts - * @param bool|null $push https://api-platform.com/docs/core/push-relations/ - * @param string|null $security https://api-platform.com/docs/core/security - * @param string|null $securityPostDenormalize https://api-platform.com/docs/core/security/#executing-access-control-rules-after-denormalization - * @param string[] $types the RDF types of this property - * @param string[] $iris - * @param Type[] $builtinTypes - * @param string|null $uriTemplate (experimental) whether to return the subRessource collection IRI instead of an iterable of IRI + * @param bool|null $readableLink https://api-platform.com/docs/core/serialization/#force-iri-with-relations-of-the-same-type-parentchilds-relations + * @param bool|null $writableLink https://api-platform.com/docs/core/serialization/#force-iri-with-relations-of-the-same-type-parentchilds-relations + * @param bool|null $required https://api-platform.com/docs/admin/validation/#client-side-validation + * @param bool|null $identifier https://api-platform.com/docs/core/identifiers/ + * @param string|null $default + * @param mixed $example https://api-platform.com/docs/core/openapi/#using-the-openapi-and-swagger-contexts + * @param string|null $deprecationReason https://api-platform.com/docs/core/deprecations/#deprecating-resource-classes-operations-and-properties + * @param bool|null $fetchEager https://api-platform.com/docs/core/performance/#eager-loading + * @param array|null $jsonldContext https://api-platform.com/docs/core/extending-jsonld-context/#extending-json-ld-and-hydra-contexts + * @param array|null $openapiContext https://api-platform.com/docs/core/openapi/#using-the-openapi-and-swagger-contexts + * @param bool|null $push https://api-platform.com/docs/core/push-relations/ + * @param string|\Stringable|null $security https://api-platform.com/docs/core/security + * @param string|\Stringable|null $securityPostDenormalize https://api-platform.com/docs/core/security/#executing-access-control-rules-after-denormalization + * @param string[] $types the RDF types of this property + * @param string[] $iris + * @param Type[] $builtinTypes + * @param string|null $uriTemplate (experimental) whether to return the subRessource collection IRI instead of an iterable of IRI */ public function __construct( private ?string $description = null, @@ -148,7 +148,7 @@ public function __construct( * * */ - private ?string $security = null, + private string|\Stringable|null $security = null, /** * The `securityPostDenormalize` option defines access to the current property after the denormalization process, based on Symfony Security. * It receives an `object` variable related to the current object, and a `property` variable related to the current property. @@ -192,7 +192,7 @@ public function __construct( * * */ - private ?string $securityPostDenormalize = null, + private string|\Stringable|null $securityPostDenormalize = null, private array|string|null $types = null, /* * The related php types. @@ -420,7 +420,7 @@ public function withPush($push): self public function getSecurity(): ?string { - return $this->security; + return $this->security instanceof \Stringable ? (string) $this->security : $this->security; } public function withSecurity($security): self @@ -433,7 +433,7 @@ public function withSecurity($security): self public function getSecurityPostDenormalize(): ?string { - return $this->securityPostDenormalize; + return $this->securityPostDenormalize instanceof \Stringable ? (string) $this->securityPostDenormalize : $this->securityPostDenormalize; } public function withSecurityPostDenormalize($securityPostDenormalize): self diff --git a/src/Metadata/ApiResource.php b/src/Metadata/ApiResource.php index d2ed1e0c58d..7cc6e2f2a19 100644 --- a/src/Metadata/ApiResource.php +++ b/src/Metadata/ApiResource.php @@ -946,11 +946,11 @@ public function __construct( * */ protected ?string $paginationType = null, - protected ?string $security = null, + protected string|\Stringable|null $security = null, protected ?string $securityMessage = null, - protected ?string $securityPostDenormalize = null, + protected string|\Stringable|null $securityPostDenormalize = null, protected ?string $securityPostDenormalizeMessage = null, - protected ?string $securityPostValidation = null, + protected string|\Stringable|null $securityPostValidation = null, protected ?string $securityPostValidationMessage = null, protected ?bool $compositeIdentifier = null, protected ?array $exceptionToStatus = null, diff --git a/src/Metadata/Delete.php b/src/Metadata/Delete.php index 1b816cb6558..cfaa3d0f03f 100644 --- a/src/Metadata/Delete.php +++ b/src/Metadata/Delete.php @@ -67,11 +67,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/Error.php b/src/Metadata/Error.php index 06f060fa9c6..34a2c3c3f71 100644 --- a/src/Metadata/Error.php +++ b/src/Metadata/Error.php @@ -67,11 +67,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/ErrorResource.php b/src/Metadata/ErrorResource.php index a58fb14e990..37ceb56db3d 100644 --- a/src/Metadata/ErrorResource.php +++ b/src/Metadata/ErrorResource.php @@ -72,11 +72,11 @@ public function __construct( ?int $paginationMaximumItemsPerPage = null, ?bool $paginationPartial = null, ?string $paginationType = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?bool $compositeIdentifier = null, ?array $exceptionToStatus = null, diff --git a/src/Metadata/Get.php b/src/Metadata/Get.php index 9be1b044d8d..fe098a2002f 100644 --- a/src/Metadata/Get.php +++ b/src/Metadata/Get.php @@ -67,11 +67,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/GetCollection.php b/src/Metadata/GetCollection.php index bbc7f23191d..f4e85be5017 100644 --- a/src/Metadata/GetCollection.php +++ b/src/Metadata/GetCollection.php @@ -67,11 +67,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/GraphQl/Operation.php b/src/Metadata/GraphQl/Operation.php index c51370967e8..cd2802c0e33 100644 --- a/src/Metadata/GraphQl/Operation.php +++ b/src/Metadata/GraphQl/Operation.php @@ -57,11 +57,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/GraphQl/Query.php b/src/Metadata/GraphQl/Query.php index c86de8e0b07..2ce0d9250df 100644 --- a/src/Metadata/GraphQl/Query.php +++ b/src/Metadata/GraphQl/Query.php @@ -41,11 +41,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/GraphQl/QueryCollection.php b/src/Metadata/GraphQl/QueryCollection.php index a23fa44aa04..1427c024142 100644 --- a/src/Metadata/GraphQl/QueryCollection.php +++ b/src/Metadata/GraphQl/QueryCollection.php @@ -42,11 +42,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/GraphQl/Subscription.php b/src/Metadata/GraphQl/Subscription.php index 1ebec3e4c95..3cc90c8fda1 100644 --- a/src/Metadata/GraphQl/Subscription.php +++ b/src/Metadata/GraphQl/Subscription.php @@ -41,11 +41,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/HttpOperation.php b/src/Metadata/HttpOperation.php index b98e2095f3f..dfbc84abdf0 100644 --- a/src/Metadata/HttpOperation.php +++ b/src/Metadata/HttpOperation.php @@ -173,11 +173,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/Metadata.php b/src/Metadata/Metadata.php index 56049747138..4f2715aa55d 100644 --- a/src/Metadata/Metadata.php +++ b/src/Metadata/Metadata.php @@ -21,15 +21,15 @@ abstract class Metadata { /** - * @param string|null $deprecationReason https://api-platform.com/docs/core/deprecations/#deprecating-resource-classes-operations-and-properties - * @param string|null $security https://api-platform.com/docs/core/security - * @param string|null $securityPostDenormalize https://api-platform.com/docs/core/security/#executing-access-control-rules-after-denormalization - * @param mixed|null $mercure - * @param mixed|null $messenger - * @param mixed|null $input - * @param mixed|null $output - * @param mixed|null $provider - * @param mixed|null $processor + * @param string|null $deprecationReason https://api-platform.com/docs/core/deprecations/#deprecating-resource-classes-operations-and-properties + * @param string|\Stringable|null $security https://api-platform.com/docs/core/security + * @param string|\Stringable|null $securityPostDenormalize https://api-platform.com/docs/core/security/#executing-access-control-rules-after-denormalization + * @param mixed|null $mercure + * @param mixed|null $messenger + * @param mixed|null $input + * @param mixed|null $output + * @param mixed|null $provider + * @param mixed|null $processor */ public function __construct( protected ?string $shortName = null, @@ -60,11 +60,11 @@ public function __construct( protected ?bool $paginationClientPartial = null, protected ?bool $paginationFetchJoinCollection = null, protected ?bool $paginationUseOutputWalkers = null, - protected ?string $security = null, + protected string|\Stringable|null $security = null, protected ?string $securityMessage = null, - protected ?string $securityPostDenormalize = null, + protected string|\Stringable|null $securityPostDenormalize = null, protected ?string $securityPostDenormalizeMessage = null, - protected ?string $securityPostValidation = null, + protected string|\Stringable|null $securityPostValidation = null, protected ?string $securityPostValidationMessage = null, protected $provider = null, protected $processor = null, @@ -451,7 +451,7 @@ public function withPaginationUseOutputWalkers(bool $paginationUseOutputWalkers) public function getSecurity(): ?string { - return $this->security; + return $this->security instanceof \Stringable ? (string) $this->security : $this->security; } public function withSecurity($security): static @@ -477,7 +477,7 @@ public function withSecurityMessage(string $securityMessage): static public function getSecurityPostDenormalize(): ?string { - return $this->securityPostDenormalize; + return $this->securityPostDenormalize instanceof \Stringable ? (string) $this->securityPostDenormalize : $this->securityPostDenormalize; } public function withSecurityPostDenormalize($securityPostDenormalize): static @@ -503,10 +503,10 @@ public function withSecurityPostDenormalizeMessage(string $securityPostDenormali public function getSecurityPostValidation(): ?string { - return $this->securityPostValidation; + return $this->securityPostValidation instanceof \Stringable ? (string) $this->securityPostValidation : $this->securityPostValidation; } - public function withSecurityPostValidation(?string $securityPostValidation = null): static + public function withSecurityPostValidation(string|\Stringable|null $securityPostValidation = null): static { $self = clone $this; $self->securityPostValidation = $securityPostValidation; diff --git a/src/Metadata/NotExposed.php b/src/Metadata/NotExposed.php index a768e5f006a..94de193d1fc 100644 --- a/src/Metadata/NotExposed.php +++ b/src/Metadata/NotExposed.php @@ -80,11 +80,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/Operation.php b/src/Metadata/Operation.php index c6b933563aa..3992cefab98 100644 --- a/src/Metadata/Operation.php +++ b/src/Metadata/Operation.php @@ -611,11 +611,11 @@ public function __construct( protected ?array $normalizationContext = null, protected ?array $denormalizationContext = null, protected ?bool $collectDenormalizationErrors = null, - protected ?string $security = null, + protected string|\Stringable|null $security = null, protected ?string $securityMessage = null, - protected ?string $securityPostDenormalize = null, + protected string|\Stringable|null $securityPostDenormalize = null, protected ?string $securityPostDenormalizeMessage = null, - protected ?string $securityPostValidation = null, + protected string|\Stringable|null $securityPostValidation = null, protected ?string $securityPostValidationMessage = null, /** * The `deprecationReason` option deprecates the current operation with a deprecation message. diff --git a/src/Metadata/Patch.php b/src/Metadata/Patch.php index cce0c9adb48..e136934d33f 100644 --- a/src/Metadata/Patch.php +++ b/src/Metadata/Patch.php @@ -67,11 +67,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/Post.php b/src/Metadata/Post.php index 7be04523d4d..3fa8fda7593 100644 --- a/src/Metadata/Post.php +++ b/src/Metadata/Post.php @@ -67,11 +67,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/Put.php b/src/Metadata/Put.php index cb78e429c2b..b000ac50f8d 100644 --- a/src/Metadata/Put.php +++ b/src/Metadata/Put.php @@ -67,11 +67,11 @@ public function __construct( ?array $normalizationContext = null, ?array $denormalizationContext = null, ?bool $collectDenormalizationErrors = null, - ?string $security = null, + string|\Stringable|null $security = null, ?string $securityMessage = null, - ?string $securityPostDenormalize = null, + string|\Stringable|null $securityPostDenormalize = null, ?string $securityPostDenormalizeMessage = null, - ?string $securityPostValidation = null, + string|\Stringable|null $securityPostValidation = null, ?string $securityPostValidationMessage = null, ?string $deprecationReason = null, ?array $filters = null, diff --git a/src/Metadata/Tests/Resource/StringableSecurityParameterTest.php b/src/Metadata/Tests/Resource/StringableSecurityParameterTest.php new file mode 100644 index 00000000000..926f3c92680 --- /dev/null +++ b/src/Metadata/Tests/Resource/StringableSecurityParameterTest.php @@ -0,0 +1,116 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +declare(strict_types=1); + +namespace ApiPlatform\Metadata\Tests\Resource; + +use ApiPlatform\Metadata\ApiProperty; +use ApiPlatform\Metadata\ApiResource; +use ApiPlatform\Metadata\Delete; +use ApiPlatform\Metadata\Error; +use ApiPlatform\Metadata\ErrorResource; +use ApiPlatform\Metadata\Get; +use ApiPlatform\Metadata\GetCollection; +use ApiPlatform\Metadata\GraphQl\Mutation; +use ApiPlatform\Metadata\GraphQl\Query; +use ApiPlatform\Metadata\GraphQl\QueryCollection; +use ApiPlatform\Metadata\GraphQl\Subscription; +use ApiPlatform\Metadata\Metadata; +use ApiPlatform\Metadata\NotExposed; +use ApiPlatform\Metadata\Patch; +use ApiPlatform\Metadata\Post; +use ApiPlatform\Metadata\Put; +use ApiPlatform\Metadata\Tests\Fixtures\Metadata\RestfulApi; +use PHPUnit\Framework\TestCase; + +/** + * @author Aurimas Rimkus + */ +final class StringableSecurityParameterTest extends TestCase +{ + /** + * @dataProvider metadataProvider + */ + public function testOnMetadata(Metadata $metadata): void + { + $this->assertSame($metadata->getSecurity(), 'stringable_security'); + $this->assertSame($metadata->getSecurityPostDenormalize(), 'stringable_security_post_denormalize'); + $this->assertSame($metadata->getSecurityPostValidation(), 'stringable_security_post_validation'); + } + + public static function metadataProvider(): \Generator + { + $stringableSecurity = new class() implements \Stringable { + public function __toString(): string + { + return 'stringable_security'; + } + }; + $stringableSecurityPostDenormalize = new class() implements \Stringable { + public function __toString(): string + { + return 'stringable_security_post_denormalize'; + } + }; + $stringableSecurityPostValidation = new class() implements \Stringable { + public function __toString(): string + { + return 'stringable_security_post_validation'; + } + }; + $args = [ + 'security' => $stringableSecurity, + 'securityPostDenormalize' => $stringableSecurityPostDenormalize, + 'securityPostValidation' => $stringableSecurityPostValidation, + ]; + + yield [new Get(...$args)]; + yield [new GetCollection(...$args)]; + yield [new Post(...$args)]; + yield [new Put(...$args)]; + yield [new Patch(...$args)]; + yield [new Delete(...$args)]; + yield [new Error(...$args)]; + yield [new NotExposed(...$args)]; + yield [new Query(...$args)]; + yield [new QueryCollection(...$args)]; + yield [new Mutation(...$args)]; + yield [new Subscription(...$args)]; + yield [new ApiResource(...$args)]; + yield [new ErrorResource(...$args)]; + yield [new RestfulApi(...$args)]; + } + + public function testOnApiProperty(): void + { + $stringableSecurity = new class() implements \Stringable { + public function __toString(): string + { + return 'stringable_security'; + } + }; + $stringableSecurityPostDenormalize = new class() implements \Stringable { + public function __toString(): string + { + return 'stringable_security_post_denormalize'; + } + }; + + $metadata = new ApiProperty( + security: $stringableSecurity, + securityPostDenormalize: $stringableSecurityPostDenormalize, + ); + + $this->assertSame($metadata->getSecurity(), 'stringable_security'); + $this->assertSame($metadata->getSecurityPostDenormalize(), 'stringable_security_post_denormalize'); + } +}