mirror of
https://github.com/aiogram/aiogram.git
synced 2026-04-08 16:37:47 +00:00
Fixed nested hashtag, cashtag and email entnties parsing (#1263)
* Fixed nested hashtag, cashtag and email message entities not being parsed correctly when these entities are inside another entity. * Tests coverage
This commit is contained in:
parent
020db29e6d
commit
a80031509e
3 changed files with 42 additions and 1 deletions
1
CHANGES/1259.bugfix.rst
Normal file
1
CHANGES/1259.bugfix.rst
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
Fixed nested hashtag, cashtag and email message entities not being parsed correctly when these entities are inside another entity.
|
||||||
|
|
@ -43,8 +43,11 @@ class TextDecoration(ABC):
|
||||||
MessageEntityType.URL,
|
MessageEntityType.URL,
|
||||||
MessageEntityType.MENTION,
|
MessageEntityType.MENTION,
|
||||||
MessageEntityType.PHONE_NUMBER,
|
MessageEntityType.PHONE_NUMBER,
|
||||||
|
MessageEntityType.HASHTAG,
|
||||||
|
MessageEntityType.CASHTAG,
|
||||||
|
MessageEntityType.EMAIL,
|
||||||
}:
|
}:
|
||||||
# This entities should not be changed
|
# These entities should not be changed
|
||||||
return text
|
return text
|
||||||
if entity.type in {
|
if entity.type in {
|
||||||
MessageEntityType.BOLD,
|
MessageEntityType.BOLD,
|
||||||
|
|
@ -71,6 +74,8 @@ class TextDecoration(ABC):
|
||||||
if entity.type == MessageEntityType.CUSTOM_EMOJI:
|
if entity.type == MessageEntityType.CUSTOM_EMOJI:
|
||||||
return self.custom_emoji(value=text, custom_emoji_id=cast(str, entity.custom_emoji_id))
|
return self.custom_emoji(value=text, custom_emoji_id=cast(str, entity.custom_emoji_id))
|
||||||
|
|
||||||
|
# This case is not possible because of `if` above, but if any new entity is added to
|
||||||
|
# API it will be here too
|
||||||
return self.quote(text)
|
return self.quote(text)
|
||||||
|
|
||||||
def unparse(self, text: str, entities: Optional[List[MessageEntity]] = None) -> str:
|
def unparse(self, text: str, entities: Optional[List[MessageEntity]] = None) -> str:
|
||||||
|
|
|
||||||
|
|
@ -113,6 +113,14 @@ class TestTextDecoration:
|
||||||
):
|
):
|
||||||
assert decorator.apply_entity(entity, "test") == result
|
assert decorator.apply_entity(entity, "test") == result
|
||||||
|
|
||||||
|
def test_unknown_apply_entity(self):
|
||||||
|
assert (
|
||||||
|
html_decoration.apply_entity(
|
||||||
|
MessageEntity(type="unknown", offset=0, length=5), "<test>"
|
||||||
|
)
|
||||||
|
== "<test>"
|
||||||
|
)
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"decorator,before,after",
|
"decorator,before,after",
|
||||||
[
|
[
|
||||||
|
|
@ -243,6 +251,33 @@ class TestTextDecoration:
|
||||||
[MessageEntity(type="bold", offset=0, length=8, url=None, user=None)],
|
[MessageEntity(type="bold", offset=0, length=8, url=None, user=None)],
|
||||||
"<b>👋🏾 Hi!</b>",
|
"<b>👋🏾 Hi!</b>",
|
||||||
],
|
],
|
||||||
|
[
|
||||||
|
html_decoration,
|
||||||
|
"#test",
|
||||||
|
[
|
||||||
|
MessageEntity(type="hashtag", offset=0, length=5),
|
||||||
|
MessageEntity(type="bold", offset=0, length=5),
|
||||||
|
],
|
||||||
|
"<b>#test</b>",
|
||||||
|
],
|
||||||
|
[
|
||||||
|
html_decoration,
|
||||||
|
"$TEST",
|
||||||
|
[
|
||||||
|
MessageEntity(type="cashtag", offset=0, length=5),
|
||||||
|
MessageEntity(type="bold", offset=0, length=5),
|
||||||
|
],
|
||||||
|
"<b>$TEST</b>",
|
||||||
|
],
|
||||||
|
[
|
||||||
|
html_decoration,
|
||||||
|
"test@example.com",
|
||||||
|
[
|
||||||
|
MessageEntity(type="email", offset=0, length=16),
|
||||||
|
MessageEntity(type="bold", offset=0, length=16),
|
||||||
|
],
|
||||||
|
"<b>test@example.com</b>",
|
||||||
|
],
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
def test_unparse(
|
def test_unparse(
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue