- Add shared proxy module (bot/utils/proxy.py) to eliminate duplicate SOCKS5 parsing - Fix AI client: escape HTML before Markdown→HTML conversion, unify timeouts, make health check optional and disabled by default, handle 429 retries - Fix ai.py: correct forwarded message handling (aiogram 3.x forward_origin), pass relevant summaries via extra_system_content - Fix dialogue.py: only respond to Astra's messages, use system context instead of prompt injection, answer on the limit message before phase transition - Fix voice.py: load Whisper model in thread pool, safe WAV path generation - Improve database.py: composite indexes, Boolean is_active, upsert file_id cache, add context cleanup helper - Update weather.py and yadisk_download.py to use shared proxy connector - Update yadisk.py: validate URL before cache clear, add download size limit, wrap sync file ops in to_thread - Reuse S3 client via lru_cache - Update setup_commands with /aiclear and /aiuser - Update README, Dockerfile (Python 3.11), docker-compose (mount models) - Pin dependency versions, remove unused httpx[socks] - Add basic pytest tests for layout converter and voice normalization
24 lines
600 B
Python
24 lines
600 B
Python
import pytest
|
|
|
|
from bot.utils.layout_converter import convert_layout
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
"input_text, expected",
|
|
[
|
|
("gbdj", "пиво"),
|
|
("rjytxyj!", "конечно!"),
|
|
("Ghbdtn", "Привет"),
|
|
("123", "123"),
|
|
("", ""),
|
|
("qwerty", "йцукен"),
|
|
],
|
|
)
|
|
def test_convert_layout(input_text: str, expected: str) -> None:
|
|
assert convert_layout(input_text) == expected
|
|
|
|
|
|
def test_convert_layout_preserves_case() -> None:
|
|
assert convert_layout("QWERTY") == "ЙЦУКЕН"
|
|
assert convert_layout("QwErTy") == "ЙцУкЕн"
|