Skip to content

Commit bdc3c62

Browse files
authored
Merge pull request #22 from sitegeist/bugfix/fixOtionalParametersHandling
BUGFIX: Fix optional parameter handling in deserializer
2 parents cafa8fb + 9fcf7eb commit bdc3c62

File tree

2 files changed

+26
-1
lines changed

2 files changed

+26
-1
lines changed

Classes/Domain/Schema/SchemaDenormalizer.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,8 @@ private static function convertValueObject(array|int|float|string|bool $value, s
8888
$parameterReflections = $reflection->getConstructor()->getParameters();
8989
$convertedArguments = [];
9090
if (is_array($value)) {
91-
foreach ($parameterReflections as $name => $reflectionParameter) {
91+
foreach ($parameterReflections as $reflectionParameter) {
92+
$name = $reflectionParameter->getName();
9293
$type = $reflectionParameter->getType();
9394
if ($reflectionParameter->isDefaultValueAvailable() && !array_key_exists($reflectionParameter->getName(), $value)) {
9495
continue;

Tests/Unit/Domain/Schema/SchemaNormalizerTest.php

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,30 @@
1313

1414
final class SchemaNormalizerTest extends TestCase
1515
{
16+
public static function denormalizeObjectsWithOptionalParametersDataProvider(): \Generator
17+
{
18+
yield 'min PostalAddress' => [
19+
Fixtures\PostalAddress::class,
20+
['streetAddress' => 'Sesamstraße 42', 'addressRegion' => 'Muppetingen'],
21+
new Fixtures\PostalAddress(streetAddress: 'Sesamstraße 42', addressRegion: 'Muppetingen')
22+
];
23+
yield 'PostalAddress with missing parameter in between' => [
24+
Fixtures\PostalAddress::class,
25+
['streetAddress' => 'Dämonenweg 23', 'addressRegion' => 'Hölle', 'postOfficeBoxNumber' => '666'],
26+
new Fixtures\PostalAddress(streetAddress: 'Dämonenweg 23', addressRegion: 'Hölle', postOfficeBoxNumber: '666')
27+
];
28+
}
29+
30+
/**
31+
* @dataProvider denormalizeObjectsWithOptionalParametersDataProvider
32+
* @test
33+
*/
34+
public function denormalizeObjectsWithOptionalParameters(mixed $type, mixed $data, mixed $expected): void
35+
{
36+
Assert::assertEquals($expected, SchemaDenormalizer::denormalizeValue($data, $type));
37+
}
38+
39+
1640
/**
1741
* @dataProvider valueNormalizationPairs
1842
* @test

0 commit comments

Comments
 (0)