mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-12 18:19:34 +00:00
Added create_channel_bot_link function
This commit is contained in:
parent
62a9f0cb6e
commit
cf269e15f4
2 changed files with 100 additions and 4 deletions
|
|
@ -1,14 +1,22 @@
|
|||
from itertools import product
|
||||
from typing import Any, Dict
|
||||
from urllib.parse import parse_qs
|
||||
|
||||
import pytest
|
||||
|
||||
from aiogram.utils.link import BRANCH, create_telegram_link, create_tg_link, docs_url
|
||||
from aiogram.utils.link import (
|
||||
BRANCH,
|
||||
create_telegram_link,
|
||||
create_tg_link,
|
||||
docs_url,
|
||||
create_channel_bot_link,
|
||||
)
|
||||
|
||||
|
||||
class TestLink:
|
||||
@pytest.mark.parametrize(
|
||||
"base,params,result",
|
||||
[["user", dict(id=42), "tg://user?id=42"]],
|
||||
[["user", {"id": 42}, "tg://user?id=42"]],
|
||||
)
|
||||
def test_create_tg_link(self, base: str, params: Dict[str, Any], result: str):
|
||||
assert create_tg_link(base, **params) == result
|
||||
|
|
@ -16,8 +24,8 @@ class TestLink:
|
|||
@pytest.mark.parametrize(
|
||||
"base,params,result",
|
||||
[
|
||||
["username", dict(), "https://t.me/username"],
|
||||
["username", dict(start="test"), "https://t.me/username?start=test"],
|
||||
["username", {}, "https://t.me/username"],
|
||||
["username", {"start": "test"}, "https://t.me/username?start=test"],
|
||||
],
|
||||
)
|
||||
def test_create_telegram_link(self, base: str, params: Dict[str, Any], result: str):
|
||||
|
|
@ -31,3 +39,45 @@ class TestLink:
|
|||
|
||||
def test_docs(self):
|
||||
assert docs_url("test.html") == f"https://docs.aiogram.dev/en/{BRANCH}/test.html"
|
||||
|
||||
|
||||
class TestCreateChannelBotLink:
|
||||
def test_without_params(self):
|
||||
assert create_channel_bot_link("test_bot") == "https://t.me/test_bot"
|
||||
|
||||
def test_parameter(self):
|
||||
assert (
|
||||
create_channel_bot_link("test_bot", parameter="parameter in group")
|
||||
== "https://t.me/test_bot?startgroup=parameter+in+group"
|
||||
)
|
||||
|
||||
def test_permissions(self):
|
||||
# Is bad idea to put over 2k cases into parameterized test,
|
||||
# so I've preferred to implement it inside the test
|
||||
|
||||
params = {
|
||||
"change_info",
|
||||
"post_messages",
|
||||
"edit_messages",
|
||||
"delete_messages",
|
||||
"restrict_members",
|
||||
"invite_users",
|
||||
"pin_messages",
|
||||
"promote_members",
|
||||
"manage_video_chats",
|
||||
"anonymous",
|
||||
"manage_chat",
|
||||
}
|
||||
|
||||
variants = product([True, False], repeat=len(params))
|
||||
for index, variants in enumerate(variants):
|
||||
kwargs = {k: v for k, v in zip(params, variants) if v}
|
||||
if not kwargs:
|
||||
# Variant without additional arguments is already covered
|
||||
continue
|
||||
|
||||
link = create_channel_bot_link("test", **kwargs)
|
||||
query = parse_qs(link.split("?", maxsplit=1)[-1], max_num_fields=1)
|
||||
assert "admin" in query
|
||||
admin = query["admin"][0]
|
||||
assert set(admin.split("+")) == set(kwargs)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue