diff --git a/src/Metadata/Resource/Factory/OperationDefaultsTrait.php b/src/Metadata/Resource/Factory/OperationDefaultsTrait.php index 3c53fc6984..fbc90a1f50 100644 --- a/src/Metadata/Resource/Factory/OperationDefaultsTrait.php +++ b/src/Metadata/Resource/Factory/OperationDefaultsTrait.php @@ -77,6 +77,12 @@ private function addGlobalDefaults(ApiResource|Operation $operation): ApiResourc $value = [$value]; } + foreach ($value as $index => $item) { + if (\is_int($index) && \in_array($item, $currentValue, true)) { + unset($value[$index]); + } + } + $operation = $operation->{'with'.$upperKey}(array_merge($value, $currentValue)); } diff --git a/src/Metadata/Tests/Resource/Factory/AttributesResourceMetadataCollectionFactoryTest.php b/src/Metadata/Tests/Resource/Factory/AttributesResourceMetadataCollectionFactoryTest.php index f9eef140bc..8b211f10fe 100644 --- a/src/Metadata/Tests/Resource/Factory/AttributesResourceMetadataCollectionFactoryTest.php +++ b/src/Metadata/Tests/Resource/Factory/AttributesResourceMetadataCollectionFactoryTest.php @@ -246,6 +246,22 @@ public function testExtraProperties(): void $this->assertEquals($extraPropertiesResource->getOperation('_api_ExtraPropertiesResource_get')->getExtraProperties(), ['foo' => 'bar']); } + public function testCreateWithListDefaults(): void + { + $attributeResourceMetadataCollectionFactory = new AttributesResourceMetadataCollectionFactory(defaults: [ + 'types' => ['https://schema.org/CreativeWork'], + 'schemes' => ['https'], + ]); + + $resourceMetadataCollection = $attributeResourceMetadataCollectionFactory->create(AttributeResource::class); + $operation = $resourceMetadataCollection->getOperation('_api_AttributeResource_get'); + + $this->assertSame(['https://schema.org/CreativeWork'], $resourceMetadataCollection[0]->getTypes()); + $this->assertInstanceOf(HttpOperation::class, $operation); + $this->assertSame(['https://schema.org/CreativeWork'], $operation->getTypes()); + $this->assertSame(['https'], $operation->getSchemes()); + } + public function testOverrideNameWithoutOperations(): void { $attributeResourceMetadataCollectionFactory = new AttributesResourceMetadataCollectionFactory();