128 lines
3.8 KiB
Python
128 lines
3.8 KiB
Python
import os
|
||
import tempfile
|
||
from datetime import datetime
|
||
|
||
import pytest
|
||
|
||
from database.models import UserMessage
|
||
from database.repositories.message_repository import MessageRepository
|
||
|
||
|
||
@pytest.fixture(scope="session")
|
||
def test_db_path():
|
||
"""Фикстура для пути к тестовой БД (сессионная область)."""
|
||
with tempfile.NamedTemporaryFile(suffix=".db", delete=False) as f:
|
||
temp_path = f.name
|
||
|
||
yield temp_path
|
||
|
||
# Очистка после всех тестов
|
||
try:
|
||
os.unlink(temp_path)
|
||
except OSError:
|
||
pass
|
||
|
||
|
||
@pytest.fixture
|
||
def message_repository(test_db_path):
|
||
"""Фикстура для MessageRepository."""
|
||
return MessageRepository(test_db_path)
|
||
|
||
|
||
@pytest.fixture
|
||
def sample_messages():
|
||
"""Фикстура для набора тестовых сообщений."""
|
||
base_timestamp = int(datetime.now().timestamp())
|
||
|
||
return [
|
||
UserMessage(
|
||
message_text="Первое тестовое сообщение",
|
||
user_id=1001,
|
||
telegram_message_id=2001,
|
||
date=base_timestamp,
|
||
),
|
||
UserMessage(
|
||
message_text="Второе тестовое сообщение",
|
||
user_id=1002,
|
||
telegram_message_id=2002,
|
||
date=base_timestamp + 1,
|
||
),
|
||
UserMessage(
|
||
message_text="Третье тестовое сообщение",
|
||
user_id=1003,
|
||
telegram_message_id=2003,
|
||
date=base_timestamp + 2,
|
||
),
|
||
]
|
||
|
||
|
||
@pytest.fixture
|
||
def message_without_date():
|
||
"""Фикстура для сообщения без даты."""
|
||
return UserMessage(
|
||
message_text="Сообщение без даты",
|
||
user_id=1004,
|
||
telegram_message_id=2004,
|
||
date=None,
|
||
)
|
||
|
||
|
||
@pytest.fixture
|
||
def message_with_zero_date():
|
||
"""Фикстура для сообщения с нулевой датой."""
|
||
return UserMessage(
|
||
message_text="Сообщение с нулевой датой",
|
||
user_id=1005,
|
||
telegram_message_id=2005,
|
||
date=0,
|
||
)
|
||
|
||
|
||
@pytest.fixture
|
||
def message_with_special_chars():
|
||
"""Фикстура для сообщения со специальными символами."""
|
||
return UserMessage(
|
||
message_text="Сообщение с 'кавычками', \"двойными кавычками\" и эмодзи 😊\nНовая строка",
|
||
user_id=1006,
|
||
telegram_message_id=2006,
|
||
date=int(datetime.now().timestamp()),
|
||
)
|
||
|
||
|
||
@pytest.fixture
|
||
def long_message():
|
||
"""Фикстура для длинного сообщения."""
|
||
long_text = "Очень длинное сообщение " * 100 # ~2400 символов
|
||
return UserMessage(
|
||
message_text=long_text,
|
||
user_id=1007,
|
||
telegram_message_id=2007,
|
||
date=int(datetime.now().timestamp()),
|
||
)
|
||
|
||
|
||
@pytest.fixture
|
||
def message_with_unicode():
|
||
"""Фикстура для сообщения с Unicode символами."""
|
||
return UserMessage(
|
||
message_text="Сообщение с Unicode: 你好世界 🌍 Привет мир",
|
||
user_id=1008,
|
||
telegram_message_id=2008,
|
||
date=int(datetime.now().timestamp()),
|
||
)
|
||
|
||
|
||
@pytest.fixture
|
||
async def initialized_repository(message_repository):
|
||
"""Фикстура для инициализированного репозитория с созданными таблицами."""
|
||
await message_repository.create_tables()
|
||
return message_repository
|
||
|
||
|
||
@pytest.fixture
|
||
async def repository_with_data(initialized_repository, sample_messages):
|
||
"""Фикстура для репозитория с тестовыми данными."""
|
||
for message in sample_messages:
|
||
await initialized_repository.add_message(message)
|
||
return initialized_repository
|