Files
telegram-sticker-downloader/tests/test_urls.py
T
2026-07-27 15:16:01 +02:00

94 lines
2.8 KiB
Python

from __future__ import annotations
import pytest
from sticker_downloader.errors import InvalidPackReference
from sticker_downloader.urls import (
parse_pack_name,
parse_pack_reference_lines,
read_pack_references,
)
@pytest.mark.parametrize(
"reference",
[
"https://t.me/addstickers/MyPack",
"http://t.me/addstickers/MyPack",
"https://www.t.me/addstickers/MyPack",
"t.me/addstickers/MyPack",
"https://telegram.me/addstickers/MyPack",
"https://telegram.dog/addstickers/MyPack",
"https://t.me/addstickers/MyPack/",
"https://t.me/addstickers/MyPack?utm_source=x",
"tg://addstickers?set=MyPack",
"addstickers/MyPack",
"MyPack",
" MyPack ",
'"https://t.me/addstickers/MyPack"',
],
)
def test_accepts_every_reasonable_form(reference: str) -> None:
assert parse_pack_name(reference) == "MyPack"
def test_accepts_custom_emoji_links() -> None:
assert parse_pack_name("https://t.me/addemoji/MyPack") == "MyPack"
@pytest.mark.parametrize(
"reference",
[
"",
" ",
# The original urls.txt had this typo on its first line.
"me/addstickers/LokisStickers",
"https://example.com/addstickers/MyPack",
"https://t.me/MyPack",
"https://t.me/joinchat/MyPack",
"https://t.me/addstickers/",
"My-Pack!",
"tg://addstickers?other=MyPack",
],
)
def test_rejects_non_sticker_references(reference: str) -> None:
with pytest.raises(InvalidPackReference):
parse_pack_name(reference)
def test_reference_lines_skip_comments_blanks_and_duplicates() -> None:
references, problems = parse_pack_reference_lines(
[
"# a comment",
"",
" ",
"https://t.me/addstickers/One",
"https://t.me/addstickers/Two",
# Same pack, different spelling: only the first survives.
"One",
"t.me/addstickers/one",
]
)
assert references == ["https://t.me/addstickers/One", "https://t.me/addstickers/Two"]
assert problems == []
def test_reference_lines_report_bad_lines_with_line_numbers() -> None:
references, problems = parse_pack_reference_lines(
["https://t.me/addstickers/Good", "not a link at all"], source="urls.txt"
)
assert references == ["https://t.me/addstickers/Good"]
assert len(problems) == 1
assert problems[0].startswith("urls.txt:2:")
def test_read_pack_references_from_file(tmp_path) -> None:
path = tmp_path / "urls.txt"
path.write_text(
"# packs\nhttps://t.me/addstickers/Alpha\nbroken line\n", encoding="utf-8"
)
references, problems = read_pack_references(path)
assert references == ["https://t.me/addstickers/Alpha"]
assert len(problems) == 1
assert str(path) in problems[0]