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'], + ]; + } +}