Обновлен Python до версии 3.11.9 и изменены зависимости в Dockerfile и pyproject.toml. Удалены устаревшие файлы RATE_LIMITING_SOLUTION.md и тесты для rate limiting.
Обновлены пути к библиотекам в Dockerfile для соответствия новой версии Python. Исправлены все тесты, теперь все проходят
This commit is contained in:
@@ -62,33 +62,38 @@ class TestPostRepository:
|
||||
@pytest.mark.asyncio
|
||||
async def test_create_tables(self, post_repository):
|
||||
"""Тест создания таблиц."""
|
||||
# Мокаем _execute_query
|
||||
# Мокаем _execute_query и _execute_query_with_result
|
||||
post_repository._execute_query = AsyncMock()
|
||||
post_repository._execute_query_with_result = AsyncMock(return_value=[]) # Для проверки столбца
|
||||
|
||||
await post_repository.create_tables()
|
||||
|
||||
# Проверяем, что create_tables вызвался 3 раза (для каждой таблицы)
|
||||
assert post_repository._execute_query.call_count == 3
|
||||
# Проверяем, что create_tables вызвался минимум 3 раза (для каждой таблицы)
|
||||
# Может быть больше из-за ALTER TABLE и индексов
|
||||
assert post_repository._execute_query.call_count >= 3
|
||||
|
||||
# Проверяем, что все нужные таблицы созданы (порядок может быть разным из-за ALTER TABLE)
|
||||
calls = post_repository._execute_query.call_args_list
|
||||
all_queries = [call[0][0] for call in calls]
|
||||
|
||||
# Проверяем создание таблицы постов
|
||||
calls = post_repository._execute_query.call_args_list
|
||||
post_table_call = calls[0][0][0]
|
||||
assert "CREATE TABLE IF NOT EXISTS post_from_telegram_suggest" in post_table_call
|
||||
assert "message_id INTEGER NOT NULL PRIMARY KEY" in post_table_call
|
||||
assert "created_at INTEGER NOT NULL" in post_table_call
|
||||
assert "status TEXT NOT NULL DEFAULT 'suggest'" in post_table_call
|
||||
assert "is_anonymous INTEGER" in post_table_call
|
||||
assert "FOREIGN KEY (author_id) REFERENCES our_users (user_id) ON DELETE CASCADE" in post_table_call
|
||||
post_table_queries = [q for q in all_queries if "CREATE TABLE IF NOT EXISTS post_from_telegram_suggest" in q]
|
||||
assert len(post_table_queries) > 0
|
||||
assert "message_id INTEGER NOT NULL PRIMARY KEY" in post_table_queries[0]
|
||||
assert "created_at INTEGER NOT NULL" in post_table_queries[0]
|
||||
assert "status TEXT NOT NULL DEFAULT 'suggest'" in post_table_queries[0]
|
||||
assert "is_anonymous INTEGER" in post_table_queries[0]
|
||||
assert "FOREIGN KEY (author_id) REFERENCES our_users (user_id) ON DELETE CASCADE" in post_table_queries[0]
|
||||
|
||||
# Проверяем создание таблицы контента
|
||||
content_table_call = calls[1][0][0]
|
||||
assert "CREATE TABLE IF NOT EXISTS content_post_from_telegram" in content_table_call
|
||||
assert "PRIMARY KEY (message_id, content_name)" in content_table_call
|
||||
content_table_queries = [q for q in all_queries if "CREATE TABLE IF NOT EXISTS content_post_from_telegram" in q]
|
||||
assert len(content_table_queries) > 0
|
||||
assert "PRIMARY KEY (message_id, content_name)" in content_table_queries[0]
|
||||
|
||||
# Проверяем создание таблицы связей
|
||||
link_table_call = calls[2][0][0]
|
||||
assert "CREATE TABLE IF NOT EXISTS message_link_to_content" in link_table_call
|
||||
assert "PRIMARY KEY (post_id, message_id)" in link_table_call
|
||||
link_table_queries = [q for q in all_queries if "CREATE TABLE IF NOT EXISTS message_link_to_content" in q]
|
||||
assert len(link_table_queries) > 0
|
||||
assert "PRIMARY KEY (post_id, message_id)" in link_table_queries[0]
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_add_post_with_date(self, post_repository, sample_post):
|
||||
@@ -103,7 +108,7 @@ class TestPostRepository:
|
||||
query = call_args[0][0]
|
||||
params = call_args[0][1]
|
||||
|
||||
assert "INSERT INTO post_from_telegram_suggest" in query
|
||||
assert "INSERT OR IGNORE INTO post_from_telegram_suggest" in query
|
||||
assert "status" in query
|
||||
assert "is_anonymous" in query
|
||||
assert "VALUES (?, ?, ?, ?, ?, ?)" in query
|
||||
@@ -148,9 +153,11 @@ class TestPostRepository:
|
||||
|
||||
await post_repository.add_post(sample_post)
|
||||
|
||||
post_repository.logger.info.assert_called_once_with(
|
||||
f"Пост добавлен: message_id={sample_post.message_id}"
|
||||
)
|
||||
# Проверяем, что логирование вызвано с новым форматом сообщения
|
||||
post_repository.logger.info.assert_called_once()
|
||||
log_call = post_repository.logger.info.call_args[0][0]
|
||||
assert f"message_id={sample_post.message_id}" in log_call
|
||||
assert "Пост добавлен" in log_call or "уже существует" in log_call
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_update_helper_message(self, post_repository):
|
||||
@@ -174,29 +181,61 @@ class TestPostRepository:
|
||||
@pytest.mark.asyncio
|
||||
async def test_update_status_by_message_id(self, post_repository):
|
||||
"""Тест обновления статуса поста по message_id."""
|
||||
# Создаем таблицы перед тестом
|
||||
post_repository._execute_query = AsyncMock()
|
||||
post_repository._execute_query_with_result = AsyncMock(return_value=[])
|
||||
post_repository._get_connection = AsyncMock()
|
||||
mock_conn = AsyncMock()
|
||||
mock_cur = AsyncMock()
|
||||
mock_cur.fetchone = AsyncMock(return_value=(1,)) # 1 строка обновлена
|
||||
mock_conn.execute = AsyncMock(return_value=mock_cur)
|
||||
post_repository._get_connection.return_value = mock_conn
|
||||
post_repository.logger = MagicMock()
|
||||
|
||||
# Создаем таблицы
|
||||
await post_repository.create_tables()
|
||||
post_repository._execute_query.reset_mock()
|
||||
post_repository._execute_query_with_result.reset_mock()
|
||||
post_repository.logger.info.reset_mock() # Сбрасываем счетчик логирования
|
||||
|
||||
message_id = 12345
|
||||
status = "approved"
|
||||
|
||||
await post_repository.update_status_by_message_id(message_id, status)
|
||||
|
||||
post_repository._execute_query.assert_called_once()
|
||||
call_args = post_repository._execute_query.call_args
|
||||
query = call_args[0][0]
|
||||
params = call_args[0][1]
|
||||
# Проверяем, что conn.execute был вызван с правильными параметрами
|
||||
assert mock_conn.execute.call_count >= 1
|
||||
update_call = mock_conn.execute.call_args_list[0]
|
||||
query = update_call[0][0]
|
||||
params = update_call[0][1]
|
||||
|
||||
assert "UPDATE post_from_telegram_suggest" in query
|
||||
assert "SET status = ? WHERE message_id = ?" in query
|
||||
assert params == (status, message_id)
|
||||
post_repository.logger.info.assert_called_once()
|
||||
# Проверяем, что после создания таблиц было вызвано логирование обновления статуса
|
||||
post_repository.logger.info.assert_called()
|
||||
log_calls = [str(call) for call in post_repository.logger.info.call_args_list]
|
||||
assert any("Статус поста message_id=12345 обновлён на approved" in str(call) for call in post_repository.logger.info.call_args_list)
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_update_status_for_media_group_by_helper_id(self, post_repository):
|
||||
"""Тест обновления статуса медиагруппы по helper_message_id."""
|
||||
# Создаем таблицы перед тестом
|
||||
post_repository._execute_query = AsyncMock()
|
||||
post_repository._execute_query_with_result = AsyncMock(return_value=[])
|
||||
post_repository._get_connection = AsyncMock()
|
||||
mock_conn = AsyncMock()
|
||||
mock_cur = AsyncMock()
|
||||
mock_cur.fetchone = AsyncMock(return_value=(1,)) # 1 строка обновлена
|
||||
mock_conn.execute = AsyncMock(return_value=mock_cur)
|
||||
post_repository._get_connection.return_value = mock_conn
|
||||
post_repository.logger = MagicMock()
|
||||
|
||||
# Создаем таблицы
|
||||
await post_repository.create_tables()
|
||||
post_repository._execute_query.reset_mock()
|
||||
post_repository._execute_query_with_result.reset_mock()
|
||||
post_repository.logger.info.reset_mock() # Сбрасываем счетчик логирования
|
||||
|
||||
helper_message_id = 99999
|
||||
status = "declined"
|
||||
@@ -205,16 +244,19 @@ class TestPostRepository:
|
||||
helper_message_id, status
|
||||
)
|
||||
|
||||
post_repository._execute_query.assert_called_once()
|
||||
call_args = post_repository._execute_query.call_args
|
||||
query = call_args[0][0]
|
||||
params = call_args[0][1]
|
||||
# Проверяем, что conn.execute был вызван с правильными параметрами
|
||||
assert mock_conn.execute.call_count >= 1
|
||||
update_call = mock_conn.execute.call_args_list[0]
|
||||
query = update_call[0][0]
|
||||
params = update_call[0][1]
|
||||
|
||||
assert "UPDATE post_from_telegram_suggest" in query
|
||||
assert "SET status = ?" in query
|
||||
assert "message_id = ? OR helper_text_message_id = ?" in query
|
||||
assert params == (status, helper_message_id, helper_message_id)
|
||||
post_repository.logger.info.assert_called_once()
|
||||
# Проверяем, что после создания таблиц было вызвано логирование обновления статуса
|
||||
post_repository.logger.info.assert_called()
|
||||
assert any("Статус медиагруппы helper_message_id=99999 обновлён на declined" in str(call) for call in post_repository.logger.info.call_args_list)
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_add_post_content_success(self, post_repository):
|
||||
@@ -648,10 +690,12 @@ class TestPostRepository:
|
||||
@pytest.mark.asyncio
|
||||
async def test_create_tables_logs_success(self, post_repository):
|
||||
"""Тест логирования успешного создания таблиц."""
|
||||
# Мокаем _execute_query и logger
|
||||
# Мокаем _execute_query, _execute_query_with_result и logger
|
||||
post_repository._execute_query = AsyncMock()
|
||||
post_repository._execute_query_with_result = AsyncMock(return_value=[]) # Для проверки столбца
|
||||
post_repository.logger = MagicMock()
|
||||
|
||||
await post_repository.create_tables()
|
||||
|
||||
post_repository.logger.info.assert_called_once_with("Таблицы для постов созданы")
|
||||
# Проверяем, что финальное сообщение о создании таблиц было вызвано
|
||||
post_repository.logger.info.assert_any_call("Таблицы для постов созданы")
|
||||
|
||||
Reference in New Issue
Block a user