big upgrade UwU
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
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]
|
||||
Reference in New Issue
Block a user