Skip to content

Commit 696d315

Browse files
authored
fix(metadata): issues with extending xml/yaml resources (api-platform#5956)
1 parent 2de06db commit 696d315

4 files changed

Lines changed: 42 additions & 1 deletion

File tree

src/Metadata/Extractor/YamlResourceExtractor.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,14 +80,15 @@ private function buildResources(array $resourcesYaml, string $path): void
8080
$resourceYaml = [$resourceYaml];
8181
}
8282

83+
$resourcesCount = isset($this->resources[$resourceName]) ? \count($this->resources[$resourceName]) : 0;
8384
foreach ($resourceYaml as $key => $resourceYamlDatum) {
8485
if (null === $resourceYamlDatum) {
8586
$resourceYamlDatum = [];
8687
}
8788

8889
try {
8990
$base = $this->buildExtendedBase($resourceYamlDatum);
90-
$this->resources[$resourceName][$key] = array_merge($base, [
91+
$this->resources[$resourceName][$resourcesCount + $key] = array_merge($base, [
9192
'operations' => $this->buildOperations($resourceYamlDatum, $base),
9293
'graphQlOperations' => $this->buildGraphQlOperations($resourceYamlDatum, $base),
9394
]);

src/Metadata/Tests/Extractor/YamlExtractorTest.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -551,6 +551,29 @@ public function testInputAndOutputAreStrings(): void
551551
$this->assertSame(Program::class.'Output', $resources[Program::class][0]['operations'][0]['output']);
552552
}
553553

554+
public function testExtendingYamlResourcesByMultipleYamlFiles(): void
555+
{
556+
$extractor = new YamlResourceExtractor([
557+
__DIR__.'/yaml/extending-base.yaml',
558+
__DIR__.'/yaml/extending-additional.yaml',
559+
]);
560+
$resources = $extractor->getResources();
561+
562+
$this->assertArrayHasKey(User::class, $resources);
563+
$this->assertCount(2, $resources[User::class], 'Expected two resource definitions for User class');
564+
565+
$this->assertSame('/users{._format}', $resources[User::class][0]['uriTemplate']);
566+
$this->assertSame('Base user resource', $resources[User::class][0]['description']);
567+
$this->assertArrayHasKey('operations', $resources[User::class][0]);
568+
$this->assertCount(2, $resources[User::class][0]['operations']);
569+
570+
$this->assertSame('/admin/users{._format}', $resources[User::class][1]['uriTemplate']);
571+
$this->assertSame('Admin user resource', $resources[User::class][1]['description']);
572+
$this->assertSame('is_granted("ROLE_ADMIN")', $resources[User::class][1]['security']);
573+
$this->assertArrayHasKey('operations', $resources[User::class][1]);
574+
$this->assertCount(1, $resources[User::class][1]['operations']);
575+
}
576+
554577
#[\PHPUnit\Framework\Attributes\DataProvider('getInvalidPaths')]
555578
public function testInvalidYaml(string $path, string $error): void
556579
{
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
resources:
2+
ApiPlatform\Metadata\Tests\Fixtures\ApiResource\User:
3+
- uriTemplate: /admin/users{._format}
4+
description: Admin user resource
5+
security: 'is_granted("ROLE_ADMIN")'
6+
operations:
7+
ApiPlatform\Metadata\GetCollection:
8+
uriTemplate: /admin/users{._format}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
resources:
2+
ApiPlatform\Metadata\Tests\Fixtures\ApiResource\User:
3+
- uriTemplate: /users{._format}
4+
description: Base user resource
5+
operations:
6+
ApiPlatform\Metadata\GetCollection:
7+
uriTemplate: /users{._format}
8+
ApiPlatform\Metadata\Get:
9+
uriTemplate: /users/{id}{._format}

0 commit comments

Comments
 (0)