#901 Fixed false-positive coercing of Union types in API methods (#912)

* #901 Fixed false-positive coercing of Union types in API methods

* Added default value for force_reply
This commit is contained in:
Alex Root Junior 2022-05-14 17:27:36 +03:00 committed by GitHub
parent 6ad242399b
commit 824b43c436
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 11 additions and 2 deletions

1
CHANGES/901.bugfix.rst Normal file
View file

@ -0,0 +1 @@
Fixed false-positive coercing of Union types in API methods

View file

@ -46,6 +46,7 @@ class TelegramMethod(abc.ABC, BaseModel, Generic[TelegramType]):
allow_population_by_field_name = True
arbitrary_types_allowed = True
orm_mode = True
smart_union = True # https://github.com/aiogram/aiogram/issues/901
@root_validator(pre=True)
def remove_unset(cls, values: Dict[str, Any]) -> Dict[str, Any]:

View file

@ -2,6 +2,8 @@ from __future__ import annotations
from typing import Optional
from pydantic import Field
from .base import MutableTelegramObject
@ -19,7 +21,7 @@ class ForceReply(MutableTelegramObject):
Source: https://core.telegram.org/bots/api#forcereply
"""
force_reply: bool
force_reply: bool = Field(True, const=True)
"""Shows reply interface to the user, as if they manually selected the bot's message and tapped 'Reply'"""
input_field_placeholder: Optional[str] = None
"""*Optional*. The placeholder to be shown in the input field when the reply is active; 1-64 characters"""

View file

@ -3,7 +3,7 @@ import datetime
import pytest
from aiogram.methods import Request, SendMessage
from aiogram.types import Chat, Message
from aiogram.types import Chat, ForceReply, Message
from tests.mocked_bot import MockedBot
pytestmark = pytest.mark.asyncio
@ -43,3 +43,8 @@ class TestSendMessage:
request: Request = bot.get_request()
assert request.method == "sendMessage"
assert response == prepare_result.result
async def test_force_reply(self):
# https://github.com/aiogram/aiogram/issues/901
method = SendMessage(text="test", chat_id=42, reply_markup=ForceReply())
assert isinstance(method.reply_markup, ForceReply)