mirror of
https://github.com/aiogram/aiogram.git
synced 2025-12-06 07:50:32 +00:00
* Added base implementation of formatting utility * Refactored and added docs * Added changelog * Coverage
83 lines
2.6 KiB
Python
83 lines
2.6 KiB
Python
from itertools import product
|
|
from typing import Any, Dict
|
|
from urllib.parse import parse_qs
|
|
|
|
import pytest
|
|
|
|
from aiogram.utils.link import (
|
|
BRANCH,
|
|
create_channel_bot_link,
|
|
create_telegram_link,
|
|
create_tg_link,
|
|
docs_url,
|
|
)
|
|
|
|
|
|
class TestLink:
|
|
@pytest.mark.parametrize(
|
|
"base,params,result",
|
|
[["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
|
|
|
|
@pytest.mark.parametrize(
|
|
"base,params,result",
|
|
[
|
|
["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):
|
|
assert create_telegram_link(base, **params) == result
|
|
|
|
def test_fragment(self):
|
|
assert (
|
|
docs_url("test.html", fragment_="test")
|
|
== f"https://docs.aiogram.dev/en/{BRANCH}/test.html#test"
|
|
)
|
|
|
|
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)
|