Skip to content

Commit

Permalink
fix tests
Browse files Browse the repository at this point in the history
  • Loading branch information
idbentley committed Jul 17, 2024
1 parent 4f4e238 commit 75c2aff
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 14 deletions.
2 changes: 1 addition & 1 deletion src/GraphNavigator/DeserializationGraphNavigator.php
Original file line number Diff line number Diff line change
Expand Up @@ -225,7 +225,7 @@ public function accept($data, ?array $type = null)
$this->visitor->endVisitingObject($metadata, $data, $type);

throw new PropertyMissingException("Property $propertyMetadata->name is missing from data ");
} else {
} elseif ($this->visitor->getRequireAllRequiredProperties()) {
$this->visitor->endVisitingObject($metadata, $data, $type);

throw $e;
Expand Down
29 changes: 18 additions & 11 deletions src/Handler/UnionHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -82,21 +82,27 @@ public function deserializeUnion(DeserializationVisitorInterface $visitor, mixed
foreach ($type['params'] as $possibleType) {
$propertyMetadata = $context->getMetadataStack()->top();
$finalType = null;
if (null !== $propertyMetadata->unionDiscriminatorMap) {
if (array_key_exists($propertyMetadata->unionDiscriminatorField, $data) && array_key_exists($data[$propertyMetadata->unionDiscriminatorField], $propertyMetadata->unionDiscriminatorMap)) {
$lkup = $data[$propertyMetadata->unionDiscriminatorField];
if (null !== $propertyMetadata->unionDiscriminatorField) {
if (!array_key_exists($propertyMetadata->unionDiscriminatorField, $data)) {
throw new NonVisitableTypeException("Union Discriminator Field '$propertyMetadata->unionDiscriminatorField' not found in data1");
}

$lkup = $data[$propertyMetadata->unionDiscriminatorField];
if (!empty($propertyMetadata->unionDiscriminatorMap)) {
if (array_key_exists($lkup, $propertyMetadata->unionDiscriminatorMap)) {
$finalType = [
'name' => $propertyMetadata->unionDiscriminatorMap[$lkup],
'params' => [],
];
} else {
throw new NonVisitableTypeException("Union Discriminator Map does not contain key '$lkup'");
}
} else {
$finalType = [
'name' => $propertyMetadata->unionDiscriminatorMap[$lkup],
'name' => $lkup,
'params' => [],
];
} else {
throw new NonVisitableTypeException("Union Discriminator Map does not contain field '$propertyMetadata->unionDiscriminatorField'");
}
} elseif (null !== $propertyMetadata->unionDiscriminatorField) {
$finalType = [
'name' => $data[$propertyMetadata->unionDiscriminatorField],
'params' => [],
];
}

if (null !== $finalType && null !== $finalType['name']) {
Expand Down Expand Up @@ -131,6 +137,7 @@ public function deserializeUnion(DeserializationVisitorInterface $visitor, mixed
}
}
}

return null;
}

Expand Down
1 change: 0 additions & 1 deletion tests/Fixtures/DiscriminatedAuthor.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@

use JMS\Serializer\Annotation\SerializedName;
use JMS\Serializer\Annotation\Type;
use JMS\Serializer\Annotation\Discriminator;

class DiscriminatedAuthor
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@

class ComplexDiscriminatedUnion
{
#[Type('JMS\Serializer\Tests\Fixtures\DiscriminatedAuthor|JMS\Serializer\Tests\Fixtures\DiscriminatedComment')]
#[UnionDiscriminator(field: 'type')]
private DiscriminatedAuthor|DiscriminatedComment $data;

Expand Down

0 comments on commit 75c2aff

Please sign in to comment.