From 3047d2db00b2a7e11723ace53c7f881ab3db3dd3 Mon Sep 17 00:00:00 2001 From: Maria Tyschitskaya Date: Wed, 15 Dec 2021 10:55:51 +0300 Subject: [PATCH] ref #79146 keeping falsy-values when deserialize --- src/Serializer.php | 5 ++- tests/Bot/Tests/Model/MessageTest.php | 55 +++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 tests/Bot/Tests/Model/MessageTest.php diff --git a/src/Serializer.php b/src/Serializer.php index c8c6075..86f4902 100644 --- a/src/Serializer.php +++ b/src/Serializer.php @@ -73,8 +73,11 @@ class Serializer if ($context instanceof DeserializationContext) { switch ($from) { case self::S_ARRAY: + $filtered = array_filter($data, static function ($el) { + return isset($el); + }); $deserialized = $serializer - ->fromArray(array_filter($data), self::normalizeNamespace($entityType), $context); + ->fromArray($filtered, self::normalizeNamespace($entityType), $context); break; case self::S_JSON: $deserialized = $serializer diff --git a/tests/Bot/Tests/Model/MessageTest.php b/tests/Bot/Tests/Model/MessageTest.php new file mode 100644 index 0000000..a3fe55a --- /dev/null +++ b/tests/Bot/Tests/Model/MessageTest.php @@ -0,0 +1,55 @@ + $content]; + + /** @var Message $result */ + $result = Serializer::deserialize($item, Message::class, Serializer::S_ARRAY); + + self::assertNull($result->getContent()); + } + + /** + * @dataProvider dataProvider_withContent + * @param $content + */ + public function testDeserialization_WithContent($content): void + { + $item = ['content' => $content]; + + /** @var Message $result */ + $result = Serializer::deserialize($item, Message::class, Serializer::S_ARRAY); + + self::assertNotNull($result->getContent()); + self::assertEquals($content, $result->getContent()); + } + + public function dataProvider_noContent(): array + { + return [ + [null], + ]; + } + + public function dataProvider_withContent(): array + { + return [ + [''], + ['0'], + ['Something'], + ]; + } +}