diff --git a/src/Hydra/JsonSchema/SchemaFactory.php b/src/Hydra/JsonSchema/SchemaFactory.php index 476667c581..4328d52f47 100644 --- a/src/Hydra/JsonSchema/SchemaFactory.php +++ b/src/Hydra/JsonSchema/SchemaFactory.php @@ -142,10 +142,8 @@ public function buildSchema(string $className, string $format = 'jsonld', string $baseName = Schema::TYPE_OUTPUT === $type ? self::ITEM_BASE_SCHEMA_NAME : self::ITEM_BASE_SCHEMA_OUTPUT_NAME; - if ($this->isResourceClass($inputOrOutputClass)) { - if (!isset($definitions[$baseName])) { - $definitions[$baseName] = Schema::TYPE_OUTPUT === $type ? self::ITEM_BASE_SCHEMA_OUTPUT : self::ITEM_BASE_SCHEMA; - } + if (!isset($definitions[$baseName])) { + $definitions[$baseName] = Schema::TYPE_OUTPUT === $type ? self::ITEM_BASE_SCHEMA_OUTPUT : self::ITEM_BASE_SCHEMA; } $allOf = new \ArrayObject(['allOf' => [ diff --git a/tests/Fixtures/TestBundle/Entity/DummyDtoCustom.php b/tests/Fixtures/TestBundle/Entity/DummyDtoCustom.php index ec705a7618..8b3946e007 100644 --- a/tests/Fixtures/TestBundle/Entity/DummyDtoCustom.php +++ b/tests/Fixtures/TestBundle/Entity/DummyDtoCustom.php @@ -35,7 +35,7 @@ new Delete(), new Post(input: CustomInputDto::class, processor: CustomInputDtoProcessor::class), new GetCollection(), - new GetCollection(output: CustomOutputDto::class, uriTemplate: 'dummy_dto_custom_output', provider: CustomOutputDtoProvider::class), + new GetCollection(output: CustomOutputDto::class, uriTemplate: 'dummy_dto_custom_output', provider: CustomOutputDtoProvider::class, name: 'dummy_dto_custom_output_collection'), new Get(output: CustomOutputDto::class, uriTemplate: 'dummy_dto_custom_output/{id}', provider: CustomOutputDtoProvider::class), new Post(output: false, uriTemplate: 'dummy_dto_custom_post_without_output'), ] diff --git a/tests/Symfony/Bundle/Test/ApiTestCaseTest.php b/tests/Symfony/Bundle/Test/ApiTestCaseTest.php index 8e48db6a29..c0d656597a 100644 --- a/tests/Symfony/Bundle/Test/ApiTestCaseTest.php +++ b/tests/Symfony/Bundle/Test/ApiTestCaseTest.php @@ -20,6 +20,7 @@ use ApiPlatform\Tests\Fixtures\TestBundle\Entity\Address; use ApiPlatform\Tests\Fixtures\TestBundle\Entity\DirectMercure; use ApiPlatform\Tests\Fixtures\TestBundle\Entity\Dummy; +use ApiPlatform\Tests\Fixtures\TestBundle\Entity\DummyDtoCustom; use ApiPlatform\Tests\Fixtures\TestBundle\Entity\DummyDtoInputOutput; use ApiPlatform\Tests\Fixtures\TestBundle\Entity\Issue6041\NumericValidated; use ApiPlatform\Tests\Fixtures\TestBundle\Entity\Issue6146\Issue6146Child; @@ -193,6 +194,13 @@ public function testAssertMatchesResourceItemJsonSchema(string $format, string $ $this->assertMatchesResourceItemJsonSchema(ResourceInterface::class, format: $format); } + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] + public function testAssertMatchesResourceItemJsonSchemaWithCustomOutput(string $format, string $mimeType): void + { + self::createClient()->request('GET', '/dummy_dto_custom_output/some-id', ['headers' => ['Accept' => $mimeType]]); + $this->assertMatchesResourceItemJsonSchema(DummyDtoCustom::class, operationName: 'dummy_dto_custom_output_collection', format: $format); + } + #[\PHPUnit\Framework\Attributes\DataProvider('providerFormats')] #[\PHPUnit\Framework\Attributes\Group('orm')] public function testAssertMatchesResourceItemJsonSchemaWithCustomJson(string $format, string $mimeType): void