Skip to content

Commit

Permalink
Merge pull request #73 from jolicode/fix/populate-not-array-or-object
Browse files Browse the repository at this point in the history
fix(normalize): don't map unexisting context, fix target to populate
  • Loading branch information
joelwurtz committed Mar 19, 2024
2 parents 2515753 + a4b907a commit 1c808fd
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
10 changes: 10 additions & 0 deletions src/Normalizer/AutoMapperNormalizer.php
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,10 @@ private function createAutoMapperContext(array $serializerContext = []): array
$context = [];

foreach (self::SERIALIZER_CONTEXT_MAPPING as $serializerContextName => $autoMapperContextName) {
if (!\array_key_exists($serializerContextName, $serializerContext)) {
continue;
}

$context[$autoMapperContextName] = $serializerContext[$serializerContextName] ?? null;
unset($serializerContext[$serializerContextName]);
}
Expand All @@ -82,6 +86,12 @@ private function createAutoMapperContext(array $serializerContext = []): array
unset($serializerContext[AbstractNormalizer::DEFAULT_CONSTRUCTOR_ARGUMENTS]);
}

if (\array_key_exists(MapperContext::TARGET_TO_POPULATE, $context)) {
if (!\is_object($context[MapperContext::TARGET_TO_POPULATE]) && !\is_array($context[MapperContext::TARGET_TO_POPULATE])) {
unset($context[MapperContext::TARGET_TO_POPULATE]);
}
}

return $context + $serializerContext;
}
}
10 changes: 8 additions & 2 deletions tests/Normalizer/AutoMapperNormalizerTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ public function hasMapper(string $source, string $target): bool
AbstractNormalizer::GROUPS => ['foo'],
AbstractNormalizer::ATTRIBUTES => ['foo'],
AbstractNormalizer::IGNORED_ATTRIBUTES => ['foo'],
AbstractNormalizer::OBJECT_TO_POPULATE => 'some-object',
AbstractNormalizer::OBJECT_TO_POPULATE => [],
AbstractNormalizer::CIRCULAR_REFERENCE_LIMIT => 1,
AbstractNormalizer::CIRCULAR_REFERENCE_HANDLER => 'circular-reference-handler',
DateTimeNormalizer::FORMAT_KEY => 'Y-m-d',
Expand All @@ -139,14 +139,20 @@ public function hasMapper(string $source, string $target): bool
MapperContext::GROUPS => ['foo'],
MapperContext::ALLOWED_ATTRIBUTES => ['foo'],
MapperContext::IGNORED_ATTRIBUTES => ['foo'],
MapperContext::TARGET_TO_POPULATE => 'some-object',
MapperContext::TARGET_TO_POPULATE => [],
MapperContext::CIRCULAR_REFERENCE_LIMIT => 1,
MapperContext::CIRCULAR_REFERENCE_HANDLER => 'circular-reference-handler',
MapperContext::DATETIME_FORMAT => 'Y-m-d',
'custom-context' => 'some custom context',
],
$context
);

$context = $normalizer->normalize(new Fixtures\User(1, 'Jack', 37), 'array', [
AbstractNormalizer::OBJECT_TO_POPULATE => 'bad-object',
]);

self::assertSame([], $context);
}

public function testItUsesSerializerDateFormatBasedOnSerializerContext(): void
Expand Down

0 comments on commit 1c808fd

Please sign in to comment.