diff --git a/CHANGELOG.md b/CHANGELOG.md index 6b234ef..d1e94b3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -23,6 +23,11 @@ Updates should follow the [Keep a CHANGELOG](http://keepachangelog.com/) princip - Nothing ---> +## 1.3.2 - 2020-02-26 + +### Fixed +- fixed Poll normalization bug #21. + ## 1.3.1 - 2020-01-30 ### Fixed diff --git a/src/BotApiNormalizer.php b/src/BotApiNormalizer.php index 2f9ef34..7eb03c6 100644 --- a/src/BotApiNormalizer.php +++ b/src/BotApiNormalizer.php @@ -19,6 +19,7 @@ use TgBotApi\BotApiBase\Normalizer\JsonSerializableNormalizer; use TgBotApi\BotApiBase\Normalizer\LegacyObjectNormalizerWrapper; use TgBotApi\BotApiBase\Normalizer\MediaGroupNormalizer; +use TgBotApi\BotApiBase\Normalizer\PollNormalizer; use TgBotApi\BotApiBase\Normalizer\UserProfilePhotosNormalizer; /** @@ -73,6 +74,7 @@ public function normalize($method): BotApiRequestInterface } $serializer = new Serializer([ + new PollNormalizer($objectNormalizer), new InputFileNormalizer($files), new MediaGroupNormalizer(new InputMediaNormalizer($objectNormalizer, $files), $objectNormalizer), new JsonSerializableNormalizer($objectNormalizer), diff --git a/src/Normalizer/PollNormalizer.php b/src/Normalizer/PollNormalizer.php new file mode 100644 index 0000000..f7085bb --- /dev/null +++ b/src/Normalizer/PollNormalizer.php @@ -0,0 +1,55 @@ +objectNormalizer = $objectNormalizer; + } + + /** + * @param mixed $topic + * @param null $format + * + * @throws ExceptionInterface + * + * @return array|bool|false|float|int|string + */ + public function normalize($topic, $format = null, array $context = []) + { + $serializer = new Serializer([ + new JsonSerializableNormalizer($this->objectNormalizer), + $this->objectNormalizer, + ]); + + $topic->options = \json_encode($topic->options); + + return $serializer->normalize($topic, null, ['skip_null_values' => true]); + } + + /** + * @param mixed $data + * @param null $format + */ + public function supportsNormalization($data, $format = null): bool + { + return $data instanceof SendPollMethod; + } +} diff --git a/tests/Method/SendPollMethodTest.php b/tests/Method/SendPollMethodTest.php index 5020bbc..bec079a 100644 --- a/tests/Method/SendPollMethodTest.php +++ b/tests/Method/SendPollMethodTest.php @@ -18,15 +18,12 @@ public function testEncode() $this->getApi()->sendPoll($this->getMethod()); } - /** - * @return BotApiComplete - */ private function getApi(): BotApiComplete { return $this->getBot('sendPoll', [ 'chat_id' => 'chat_id', 'question' => 'poll_question', - 'options' => ['q1', 'q2'], + 'options' => '["q1","q2"]', 'disable_notification' => true, 'reply_to_message_id' => 1, 'reply_markup' => '{"inline_keyboard":[]}',