بهبود هندلر شروع، انعطاف‌پذیری دستورات و افزایش پایداری دیتابیس

This commit is contained in:
Antigravity Bot
2026-08-30 17:44:38 +03:30
parent 1e127580d4
commit d059c84f82
3 changed files with 229 additions and 92 deletions
+68
View File
@@ -0,0 +1,68 @@
import re
import pytest
from unittest.mock import AsyncMock, MagicMock
from db.repository import Repository
from db.models import Post, SourceWebsite, SourceChannel
from services.admin_bot import AdminBotService
def test_start_command_regex():
pattern = r"(?i)^(/start(@\w+)?|/srart(@\w+)?|/strt(@\w+)?|/starrt(@\w+)?|/menu(@\w+)?|شروع|منو|منوی اصلی|🏠 منوی اصلی)(\s.*)?$"
valid_inputs = [
"/start",
"/START",
"/start@copykar_2026_bot",
"/start ",
"/srart",
"/srart@copykar_2026_bot",
"/strt",
"/starrt",
"/menu",
"/menu@copykar_2026_bot",
"منو",
"منوی اصلی",
"🏠 منوی اصلی",
"شروع",
"/start something",
]
for inp in valid_inputs:
assert re.match(pattern, inp), f"Failed to match: {inp}"
invalid_inputs = [
"/start123",
"سلام",
"/settings",
"test",
]
for inp in invalid_inputs:
assert not re.match(pattern, inp), f"Should not match: {inp}"
@pytest.mark.asyncio
async def test_repository_safe_bounds_without_db():
repo = Repository()
# Out of range integer bounds should return None without error
assert await repo.get_source_website_by_id(-1) is None
assert await repo.get_source_website_by_id(0) is None
assert await repo.get_source_website_by_id(99999999999999) is None
assert await repo.get_source_by_id(-5) is None
assert await repo.get_target_by_id(-10) is None
assert await repo.get_category_by_id(-1) is None
assert await repo.get_admin_channel_by_id(0) is None
@pytest.mark.asyncio
async def test_admin_bot_safe_caption_formatting():
repo = MagicMock()
repo.get_source_website_by_id = AsyncMock(side_effect=Exception("Database connection down"))
repo.get_source_by_channel_id = AsyncMock(side_effect=Exception("Database connection down"))
bot = AdminBotService(repo=repo)
post = Post(
id=1,
source_channel_id=-900000001,
source_message_id=10,
raw_text="متن تستی",
status="raw"
)
caption = await bot._format_raw_post_caption(post)
assert "متن تستی" in caption
assert "شناسه <code>-900000001</code>" in caption