Added create_channel_bot_link function

This commit is contained in:
Alex Root Junior 2023-04-23 03:30:48 +03:00
parent 62a9f0cb6e
commit cf269e15f4
No known key found for this signature in database
GPG key ID: 074C1D455EBEA4AC
2 changed files with 100 additions and 4 deletions

View file

@ -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)