ai did his job.
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
from types import SimpleNamespace
|
||||
|
||||
import pytest
|
||||
|
||||
from favorite_stickers.bot import (
|
||||
UnsupportedMediaError,
|
||||
download_with_limit,
|
||||
select_media,
|
||||
)
|
||||
|
||||
|
||||
def message(**values):
|
||||
defaults = {
|
||||
"sticker": None,
|
||||
"photo": None,
|
||||
"video": None,
|
||||
"animation": None,
|
||||
"video_note": None,
|
||||
"document": None,
|
||||
}
|
||||
defaults.update(values)
|
||||
return SimpleNamespace(**defaults)
|
||||
|
||||
|
||||
def test_photo_selects_largest_size_as_static_media() -> None:
|
||||
small = SimpleNamespace(file_unique_id="small", file_size=10)
|
||||
large = SimpleNamespace(file_unique_id="large", file_size=20)
|
||||
|
||||
selected = select_media(message(photo=[small, large]))
|
||||
|
||||
assert selected.downloadable is large
|
||||
assert selected.source_unique_id == "large"
|
||||
assert selected.kind == "static"
|
||||
assert selected.suffix == ".jpg"
|
||||
|
||||
|
||||
def test_video_sticker_preserves_emoji() -> None:
|
||||
sticker = SimpleNamespace(
|
||||
file_unique_id="sticker",
|
||||
file_size=42,
|
||||
is_animated=False,
|
||||
is_video=True,
|
||||
emoji="🔥",
|
||||
)
|
||||
|
||||
selected = select_media(message(sticker=sticker))
|
||||
|
||||
assert selected.kind == "video"
|
||||
assert selected.emoji == "🔥"
|
||||
assert selected.suffix == ".webm"
|
||||
|
||||
|
||||
def test_tgs_sticker_reports_clear_limitation() -> None:
|
||||
sticker = SimpleNamespace(
|
||||
file_unique_id="animated",
|
||||
file_size=42,
|
||||
is_animated=True,
|
||||
is_video=False,
|
||||
emoji="🙂",
|
||||
)
|
||||
|
||||
with pytest.raises(UnsupportedMediaError, match="TGS"):
|
||||
select_media(message(sticker=sticker))
|
||||
|
||||
|
||||
def test_image_document_lets_ffprobe_detect_animation() -> None:
|
||||
document = SimpleNamespace(
|
||||
file_unique_id="doc",
|
||||
file_size=42,
|
||||
mime_type="image/png",
|
||||
file_name="picture.PNG",
|
||||
)
|
||||
|
||||
selected = select_media(message(document=document))
|
||||
|
||||
assert selected.kind == "auto"
|
||||
assert selected.suffix == ".png"
|
||||
|
||||
|
||||
def test_gif_document_lets_ffprobe_detect_animation() -> None:
|
||||
document = SimpleNamespace(
|
||||
file_unique_id="gif",
|
||||
file_size=42,
|
||||
mime_type="image/gif",
|
||||
file_name="animation.gif",
|
||||
)
|
||||
|
||||
selected = select_media(message(document=document))
|
||||
|
||||
assert selected.kind == "auto"
|
||||
|
||||
|
||||
class FakeDownloadBot:
|
||||
async def download(self, downloadable, destination, seek=False):
|
||||
destination.write(b"1234")
|
||||
destination.flush()
|
||||
destination.write(b"5678")
|
||||
destination.flush()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_download_enforces_actual_byte_limit(tmp_path) -> None:
|
||||
destination = tmp_path / "source.bin"
|
||||
|
||||
with pytest.raises(UnsupportedMediaError, match="слишком большой"):
|
||||
await download_with_limit(FakeDownloadBot(), object(), destination, 6)
|
||||
|
||||
assert not destination.exists()
|
||||
Reference in New Issue
Block a user