diff --git a/src/Normalizer/AbsolutePercentValueNormalizer.php b/src/Normalizer/AbsolutePercentValueNormalizer.php index 37039ca..372661b 100644 --- a/src/Normalizer/AbsolutePercentValueNormalizer.php +++ b/src/Normalizer/AbsolutePercentValueNormalizer.php @@ -6,9 +6,10 @@ use AssoConnect\AbsolutePercentValueBundle\Object\AbsolutePercentValue; use Symfony\Component\Serializer\Exception\InvalidArgumentException; -use Symfony\Component\Serializer\Exception\NotNormalizableValueException; +use Symfony\Component\Serializer\Exception\UnexpectedValueException; use Symfony\Component\Serializer\Normalizer\DenormalizerInterface; use Symfony\Component\Serializer\Normalizer\NormalizerInterface; +use Throwable; /** * Normalizes an instance of {@see AbsolutePercentValue} to an array ['type' => ..., 'value' => ...]. @@ -17,14 +18,14 @@ class AbsolutePercentValueNormalizer implements NormalizerInterface, DenormalizerInterface { /** - * @param mixed $object + * @param mixed $data * @param mixed[] $context * @return mixed[] * @throws InvalidArgumentException */ - public function normalize(mixed $object, ?string $format = null, array $context = []): array + public function normalize(mixed $data, ?string $format = null, array $context = []): array { - if (!$object instanceof AbsolutePercentValue) { + if (!$data instanceof AbsolutePercentValue) { throw new InvalidArgumentException(sprintf( 'The object must be an instance of "%s".', AbsolutePercentValue::class @@ -32,8 +33,8 @@ public function normalize(mixed $object, ?string $format = null, array $context } return [ - 'type' => $object->getType(), - 'value' => $object->getValue() + 'type' => $data->getType(), + 'value' => $data->getValue() ]; } @@ -47,21 +48,22 @@ public function supportsNormalization(mixed $data, ?string $format = null, array } /** - * @throws NotNormalizableValueException + * @inheritDoc */ public function denormalize( mixed $data, string $type, ?string $format = null, array $context = [] - ): mixed { + ): AbsolutePercentValue { + if ('' === $data || null === $data) { + throw new UnexpectedValueException(); + } + try { - if ('' === $data || null === $data) { - throw new NotNormalizableValueException(); - } return new AbsolutePercentValue($data['type'], $data['value']); - } catch (\Exception $e) { - throw new NotNormalizableValueException($e->getMessage(), $e->getCode(), $e); + } catch (Throwable $e) { + throw new UnexpectedValueException(previous: $e); } } @@ -83,6 +85,6 @@ public function supportsDenormalization( */ public function getSupportedTypes(?string $format): array { - return [AbsolutePercentValue::class => false]; + return [AbsolutePercentValue::class => true]; } } diff --git a/tests/Normalizer/AbsolutePercentValueNormalizerTest.php b/tests/Normalizer/AbsolutePercentValueNormalizerTest.php index c3289bb..746052e 100644 --- a/tests/Normalizer/AbsolutePercentValueNormalizerTest.php +++ b/tests/Normalizer/AbsolutePercentValueNormalizerTest.php @@ -8,6 +8,7 @@ use AssoConnect\AbsolutePercentValueBundle\Object\AbsolutePercentValue; use PHPUnit\Framework\TestCase; use Symfony\Component\Serializer\Exception\NotNormalizableValueException; +use Symfony\Component\Serializer\Exception\UnexpectedValueException; class AbsolutePercentValueNormalizerTest extends TestCase { @@ -26,12 +27,12 @@ public function providerSupportsNormalization(): iterable } /** - * @param mixed $object + * @param mixed $data * @dataProvider providerSupportsNormalization */ - public function testSupportsNormalization($object, bool $result): void + public function testSupportsNormalization($data, bool $result): void { - self::assertSame($result, $this->valueNormalizer->supportsNormalization($object)); + self::assertSame($result, $this->valueNormalizer->supportsNormalization($data)); } public function testNormalize(): void @@ -67,7 +68,7 @@ public function testSupportsDenormalization(string $type, bool $result): void */ public function testDenormalizeFailure(mixed $data): void { - $this->expectException(NotNormalizableValueException::class); + $this->expectException(UnexpectedValueException::class); $this->valueNormalizer->denormalize($data, AbsolutePercentValue::class); }