Fix telegram-archiver: graceful startup without .env + dev tools

This commit is contained in:
2026-02-19 22:22:11 +03:00
parent 5e9815b167
commit 1d23afd8d0
11 changed files with 563 additions and 38 deletions
+126
View File
@@ -0,0 +1,126 @@
"""Tests for Pydantic models."""
import pytest
from datetime import datetime
from app.models import PostData, MediaFile, MediaType, ArchiveRequest
class TestMediaFile:
"""Test MediaFile model."""
def test_create_media_file(self):
"""Test creating a MediaFile instance."""
media = MediaFile(
filename="test.jpg",
type=MediaType.PHOTO,
caption="Test caption",
size=1024,
)
assert media.filename == "test.jpg"
assert media.type == "photo"
assert media.caption == "Test caption"
assert media.size == 1024
assert media.is_too_large is False
def test_media_file_too_large(self):
"""Test MediaFile with is_too_large flag."""
media = MediaFile(
filename="large.mp4",
type="video",
size=500_000_000,
is_too_large=True,
)
assert media.is_too_large is True
class TestPostData:
"""Test PostData model."""
def test_create_post_data(self):
"""Test creating a PostData instance."""
post = PostData(
message_id=12345,
date=datetime(2024, 2, 19, 14, 30, 0),
text="Test message",
author="Test Channel",
channel_username="test_channel",
)
assert post.message_id == 12345
assert post.text == "Test message"
assert post.author == "Test Channel"
assert post.has_media() is False
def test_post_with_media(self):
"""Test PostData with media files."""
post = PostData(
message_id=12345,
date=datetime.now(),
text="Test",
author="Channel",
channel_username="channel",
media_files=[
MediaFile(filename="photo.jpg", type="photo", size=1024)
],
)
assert post.has_media() is True
assert post.has_downloaded_media() is True
def test_post_bundle_dir(self):
"""Test bundle_dir property."""
post = PostData(
message_id=99999,
date=datetime.now(),
text="Test",
author="Channel",
channel_username="channel",
)
assert post.bundle_dir == "99999"
assert post.index_path == "99999/index.md"
def test_post_with_reply_and_repost(self):
"""Test PostData with reply_to and repost_from."""
post = PostData(
message_id=12345,
date=datetime.now(),
text="Test",
author="Channel",
channel_username="channel",
reply_to=12340,
repost_from=10000,
repost_channel="Original Channel",
)
assert post.reply_to == 12340
assert post.repost_from == 10000
assert post.repost_channel == "Original Channel"
class TestArchiveRequest:
"""Test ArchiveRequest model."""
def test_minimal_request(self):
"""Test minimal archive request."""
req = ArchiveRequest(channel="dedinit")
assert req.channel == "dedinit"
assert req.limit is None
assert req.force is False
def test_full_request(self):
"""Test archive request with all options."""
req = ArchiveRequest(
channel="test_channel",
output_dir="/tmp/archive",
limit=100,
from_message_id=5000,
force=True,
)
assert req.channel == "test_channel"
assert req.output_dir == "/tmp/archive"
assert req.limit == 100
assert req.from_message_id == 5000
assert req.force is True
def test_channel_with_at(self):
"""Test channel username with @ prefix."""
req = ArchiveRequest(channel="@dedinit")
assert req.channel == "@dedinit"